ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

M9A 开发入门:环境搭建、子模块初始化与 GitHub Pull Request 贡献流程全指南

M9A 开发入门:环境搭建、子模块初始化与 GitHub Pull Request 贡献流程全指南 GUI 自动化AI 应用【免费下载链接】M9A重返未来1999 小助手 | Assistant For Reverse: 1999项目地址https://gitcode.com/gh_mirrors/m9/M9A点击查看免费下载M9A 是基于 MaaFramework 的《重返未来1999》自动化小助手融合了图像识别OCR与模拟控制能力。本文面向想要参与 M9A 开发的开发者系统梳理官方《开发前须知》的全部内容并结合仓库源码详解 fork 流程、子模块初始化、开发环境搭建、依赖安装与 PR 提交的完整链路。读完本文你将具备从零开始搭建 M9A 本地开发环境、正确补齐 OCR 资源、并通过 Pull Request 向主仓库贡献代码的实战能力。开发前须知先确认你的身份M9A 官方开发文档 docs/zh_cn/develop/development.md 的开篇就划出了一条明确的分界线普通用户只想使用 M9A请移步 M9A 使用手册那里覆盖了从下载、配置到启动的全部用户侧内容无需阅读本文。MaaFramework 平台开发者希望基于 MaaFramework 开发自己的项目请前往 MaaFramework 官方仓库与文档M9A 只是其生态中的一个落地应用。M9A 开发者本文档唯一面向的读者。下面所有内容都以你想要开发 M9A 本身为前提展开。从仓库结构可以印证这一分层的合理性agent/目录承载全部 Python 智能体逻辑tasks/目录存放大量任务 JSON如 Daily.json、Combat.json、WarehouseInventory.json 等docs/下则是 zh_cn 与 en_us 双语文档体系。这意味着贡献者既可能是写 Python 核心逻辑的工程师也可能是只调整 JSON 任务配置与文档的非程序员——文档因此为两类人提供了不同的 PR 路径。GitHub Pull Request 流程简述两条路径官方文档将贡献者明确分为两类并给出完全不同的入门路径。路径一不懂编程只想改 JSON / 文档M9A 的大量功能由 JSON 任务文件驱动例如 tasks/preset/Daily.json 定义每日任务、data/combat/items.json 定义作战物品数据因此非程序员修改 JSON/文档是项目真实的常见贡献场景。官方文档为此类贡献者推荐了面向零基础用户的 GitHub Pull Request 使用指南牛牛也能看懂的 PR 教程重点学习如何在 GitHub 网页端完成 fork、在线编辑、发起 PR 的整套操作。路径二有编程经验参与正式开发这是本文的核心内容官方文档给出 7 个步骤下面逐一展开并结合仓库源码深化。步骤 1清理历史遗留的 fork如果很久以前 fork 过 M9A 仓库先进入自己仓库的Settings翻到最底部删除旧 fork。这一步能避免旧分支、过期子模块引用与本地历史残留干扰后续操作。步骤 2Fork 主仓库打开 M9A 主仓库页面点击Fork继续点击Create fork得到你自己的远程副本。此后所有开发都在自己的 fork 上进行最终通过 PR 回流主仓库。步骤 3克隆仓库并拉取子模块最容易翻车的一步官方文档要求使用--recursive参数克隆并给出了强烈警告git clone --recursive https://github.com/你的用户名/M9A.git警告--recursive一定不要忘OCR 异常失败很可能就是没加--recursive导致的。为什么这个参数如此关键查看仓库根目录的.gitmodules可以找到答案——M9A 依赖两个 Git 子模块[submodule MaaCommonAssets] path MaaCommonAssets url https://github.com/MaaXYZ/MaaCommonAssets.git [submodule Android/MaaFwApp] path Android/MaaFwApp url https://github.com/Aliothmoon/MaaFwApp.git branch mainMaaCommonAssets/MaaFramework 的公共资源库包含 OCR 模型等基础资产本镜像仓库中该目录当前为空正式克隆后由子模块填充。Android/MaaFwApp/M9A 的 Android 版外壳即 Android/README.md 中描述的基于 MaaFramework PI V2 协议的 Android GUI 客户端。如果已经克隆但发现资源缺失可以随时补救git submodule update --init --recursive子模块补齐之后还需要从子模块复制 OCR 模型到运行时目录python tools/configure.py这一步的实际逻辑可以从 tools/configure.py 源码确认脚本将MaaCommonAssets/OCR/ppocr_v6/small目录下的 OCR 模型整体复制到resource/base/model/ocrshutil.copytree(..., dirs_exist_okTrue)保证重复执行不会报错。这正是官方文档强调OCR 异常失败很可能就是没加 recursive的底层原因——OCR 模型根本不在主仓库里而是由子模块提供缺了子模块就等于缺了 OCR 识别能力。步骤 4配置编程环境官方文档对开发环境版本有明确要求组件版本要求用途Python3.13智能体agent运行语言Node.js≥ 24pnpm 脚本与前端工具链pnpm随 Node.js 安装前端依赖与脚本管理uv最新版Python 包和项目管理工具VSCode最新版推荐 IDE含格式化/校验插件支持仓库中的版本约束文件可以交叉验证这些要求根目录.python-version内容为3.13pyproject.toml中requires-python 3.13,3.14严格锁定 Python 3.13.node-version内容为22而package.json中engines.node 22.13与packageManager pnpm11.5.1共同界定了 Node 工具链的下限官方文档写 ≥24 是更保守的要求。uv则通过根目录的uv.lock锁定 Python 依赖解析结果保证团队成员安装出完全一致的依赖树。此外官方文档推荐选择性安装以下调试/开发工具工具简介MaaDebugger独立调试工具用于 MaaFramework 任务调试Maa Pipeline SupportVSCode 插件提供调试、截图、获取 ROI、取色等功能深度集成 VSCodeMFAToolsPlus跨平台开发工具箱提供便捷的数据获取和模拟测试方法ImageCropper不推荐独立截图及获取 ROI 工具功能已被 VSCode 插件覆盖MaaLogAnalyzer可视化分析基于 MaaFramework 开发应用的日志官方建议开发调试用 VSCode 插件用户日志分析用 MaaLogAnalyzer。这种组合恰好覆盖了开发的两端——写代码时的 ROI 标注/取色/截图以及发布后回读用户运行日志定位问题。步骤 5安装项目依赖在项目根目录运行两条命令pnpm install uv sync两条命令各司其职pnpm install安装 Node.js 生态的开发依赖。从 package.json 的devDependencies可以看到核心工具链nekosu/maa-toolsmaa-tools CLI用于校验 pipeline 配置、prettier与nekosu/prettier-plugin-maafw-sort统一 JSON 格式化与排序、ajvajv-formatsjsonc-parserschema 校验基础设施、prettier-plugin-multiline-arrays。uv sync根据 pyproject.toml 创建.venv虚拟环境并安装 Python 依赖。运行依赖包括maafw5.13.0b0MaaFramework 的 Python 包、loguru日志、pillow10.0图像处理、pytz时区、requestsHTTP开发依赖则由dependency-groups.dev声明pyright1.1.400严格类型检查、pytest8.0测试、ruff0.11.0lint 与格式化。同时requirements.txt 与 requirements.in 是uv export生成的兼容产物供 Dependabot 等工具使用。步骤 6开始开发使用 VSCode 插件等调试/开发工具开发 M9A。官方文档对这一步的描述是开始愉快的改代码吧但结合仓库源码一个合格的开发循环至少包含下面几条质量门槛均在 package.json 的scripts中定义pnpm format # prettier 全量格式化 pnpm check:schema # node tools/validate-schema.mjs校验 interface/task/schema 合法性 pnpm check:i18n # node tools/validate-i18n.mjs校验双语 locale 一致性 pnpm check:maa # pnpm exec maa-tools check校验 pipeline 配置 pnpm format:py # uv run --frozen ruff format . pnpm lint:py # uv run --frozen ruff check . pnpm typecheck:py # uv run --frozen pyrightstrict 模式 pnpm test:py # uv run --frozen pytest其中pnpm check一条命令即可串起前四项前端侧校验pnpm check:py则串起 Python 侧的 lint、类型检查与测试。.vscode/settings.json还提供了开箱即用的编辑器配置editor.formatOnSave开启保存即格式化Python 使用 ruff 作为默认格式化器并为interface.json、tasks/*.json、resource/*/pipeline/**/*.json分别绑定了 interface.schema.json、interface_import.schema.json、pipeline.schema.json 做实时 schema 校验——这意味着在 VSCode 里编辑任务 JSON 时格式与字段错误会直接标红提示。pyproject.toml中的[tool.pyright]还透露了类型检查的细节typeCheckingMode strict、include [agent, tools]、extraPaths [agent]并对 MaaFramework Python 包缺少类型存根的情况做了统一的抑制配置reportMissingTypeStubs none等这是 M9A 能跑通 strict 模式类型检查的关键前提。步骤 7提交 Pull Request开发完成后将改动推送到自己的 fork然后在 GitHub 上向 M9A 主仓库发起 Pull Request。仓库根目录的 CONTRIBUTING.md 与 .github/PULL_REQUEST_TEMPLATE.md 提供了贡献规范与 PR 模板.github/workflows/check.yml 则展示了合入前自动执行的 CI 门槛——在 pull_request 与 main/master 分支 push 时CI 会依次运行pnpm install --frozen-lockfile、pnpm audit --audit-level high依赖安全审计、pnpm check、pnpm check:py、pnpm release:dry-run构建产物试运行全部通过才具备合入资格。如果你的 PR 触碰了 Python 或 JSON 配置提交前在本地跑通pnpm check与pnpm check:py就能避免在 CI 阶段反复返工。从源码结构看 M9A 的开发布局除了官方文档的 7 步流程理解仓库布局能让你更快定位要改的文件。结合根目录结构M9A 的核心模块如下agent/Python 智能体核心。agent/main.py与agent/agent_runtime.py是运行入口agent/custom/action/下按功能拆分的动作模块如balanced_farming.py、bank.py、wilderness.py、switch_account.py对应 README 中的功能列表agent/custom/reco/存放识别recognition模块agent/utils/提供日志、HTTP 会话、账号存储、参数解析、资源更新等基础设施。tasks/任务 JSON 定义含preset/预设任务与单项任务Combat.json、CharUpgrade.json、TheSyndromeOfSilence.json 等是与 MaaFramework pipeline 直接交互的层。data/静态数据如 data/combat/items.json、data/redeem_code/cn.txt兑换码、data/sos/局外演绎无声综合征相关节点数据。docs/zh_cn 与 en_us 双语文档开发相关文档集中在 docs/zh_cn/develop/含 custom.md、pipeline.md、structure.md 等协议文档在 docs/zh_cn/protocol/。locales/i18n 词条zh_cn.json/en_us.json新增功能需要同步维护双语文案。tests/pytest 测试套件覆盖 agent 运行时、自定义动作注册、战斗逻辑、仓库盘点、资源更新器等模块如 test_agent_runtime.py、test_balanced_farming.py、test_warehouse_inventory.py。tools/开发/发布辅助脚本如 tools/configure.py复制 OCR 模型、tools/validate-schema.mjs、tools/validate-i18n.mjs、tools/sync-runtime.mjs、tools/android-packaging.mjsAndroid 打包。resource/MaaFramework 运行时资源base 模型、pipeline 等其中resource/base/model/ocr就是configure.py的落盘位置。Android/Android 客户端工程外壳其 agent 产物输出到Android/agent-dist/已在 .gitignore 中忽略。可以看到M9A 是一个Python 逻辑 JSON 任务 静态数据 双语文档 Android 外壳的复合型仓库不同技能背景的贡献者都能找到自己的切入点。常见问题与最佳实践克隆后 OCR 报错先运行git submodule update --init --recursive再运行python tools/configure.py确认resource/base/model/ocr下存在从MaaCommonAssets/OCR/ppocr_v6/small复制来的模型文件。版本不匹配严格遵循.python-version3.13与.node-version22使用uv sync而非裸pip install保证依赖树与 uv.lock 一致。提交前自检跑一遍pnpm check与pnpm check:py涵盖格式化、schema、i18n、pipeline、Python lint/类型/测试的全部检查项与 CIcheck.yml保持一致避免 PR 因流水线红叉而被阻塞。改 JSON 不熟 Git走官方推荐的网页端 PR 教程路径直接从 GitHub 界面编辑并提交无需本地环境。结语M9A 的开发流程并不复杂但子模块必须 recursive、版本必须对齐、提交前必须过 check这三条纪律是绝大多数新手踩坑的根源。本文已把官方《开发前须知》的每一步都还原为仓库中可验证的源码与配置证据.gitmodules解释了--recursive为何关键tools/configure.py 说明了 OCR 模型从哪来package.json 与 pyproject.toml 定义了完整的质量门槛。按 7 步走完 fork → clone → 装环境 → 改代码 → 提 PR 的流程你就能正式成为 M9A 的贡献者之一。进一步的开发细节可继续阅读 docs/zh_cn/develop/ 下的 custom.md自定义动作/识别、pipeline.mdpipeline 编写与 structure.md项目结构。赞分享GUI 自动化AI 应用【免费下载链接】M9A重返未来1999 小助手 | Assistant For Reverse: 1999项目地址https://gitcode.com/gh_mirrors/m9/M9A点击查看免费下载相关推荐RustScan 贡献指南Docker 开发环境搭建、构建测试与 Pull Request 全流程RustScan 贡献指南Docker 开发环境搭建、构建测试与 Pull Request 全流程 本篇指南以 RustScan 官方贡献文档 contri网络安全渗透测试CLIDask 开发贡献指南环境搭建、测试体系与 Pull Request 全流程Dask 开发贡献指南环境搭建、测试体系与 Pull Request 全流程 导读 本文基于 Dask 官方开发指南仓库中的 docs/source/dev大数据数据分析任务调度GitHub Profile README Generator 贡献指南从本地开发环境搭建到 Pull Request 全流程实战GitHub Profile README Generator 贡献指南从本地开发环境搭建到 Pull Request 全流程实战 本文是一份面向开发者的完整开发工具上一篇TripoSR 上手0.5 秒从单张图片生成 3D 模型下一篇gh_mirrors/ww/WWDC 中的持续部署自动构建与发布流程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表