ARTICLE DETAIL

资讯详情

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

MastraCode 贡献者指南:从零搭建 Mastra Software Factory 本地开发环境

MastraCode 贡献者指南:从零搭建 Mastra Software Factory 本地开发环境 MastraCode 贡献者指南从零搭建 Mastra Software Factory 本地开发环境【免费下载链接】mastraMastra is the modern TypeScript framework for AI-powered applications and agents.项目地址: https://gitcode.com/GitHub_Trending/ma/mastra这篇指南围绕 Mastra 仓库中mastracode目录展开帮助你在本地完整运行Mastra FactoryMastra 软件工厂一个用编码智能体把 issue 变成计划、实现和已评审 Pull Request 的开源环境。读完本文你将掌握六个包各自的职责分工、从仓库根目录完成环境初始化的标准步骤、两种本地运行模式集成模式与分离 UI 模式的差异与选择以及后端核心机制Board 生命周期、configVersion 与规则迁移的底层原理。MastraCode 是什么一个包级视角MastraCode 是 Mastra 项目中承载**编码智能体coding agent与软件工厂Software Factory**能力的目录。它不是一个单一包而是六个各司其职的包组成的工程集合mastracode/README.md 用一张表清晰地划分了各自的边界包职责factoryFactory 后端存储、路由、规则与集成factory-uiFactory React 应用与浏览器测试web本地与可部署的 Factory 宿主hostsdk共享的编码智能体运行时tui终端界面mastracodeCLImastra-factorycreate-factory脚手架理解这套分工是本地开发的第一步后端逻辑在factoryReact 代码在factory-ui环境与部署接线在web共享的 agent-controller 行为在sdk。正如 web/README.md 所述mastracode/web负责把环境相关的存储、认证、集成、事件总线与沙箱接线到mastra/factoryReact 代码则必须放在factory-ui中。环境初始化从仓库根目录开始mastracode/web是一个独立的 pnpm 工程拥有自己的 lockfile并通过link:依赖指向 monorepo 中的包。因此在仓库根目录执行以下三步原文档原样继承pnpm install pnpm --dir mastracode/web install pnpm --dir mastracode/web run prebuild其中prebuild会构建 web host 所链接的本地包。从 mastracode/web/package.json 的脚本定义可以看到它实际执行的是根目录下的 turbo 构建目标包括./mastracode/sdk、./mastracode/factory、./auth/workos、./client-sdks/client-js、./stores/libsql、./stores/pg、./server-adapters/hono、./workspaces/platform-workspace、./pubsub/redis-streams、./workspaces/e2b与./packages/cli——也就是说web host 依赖了存储LibSQL/PG、认证WorkOS、HTTP 适配器Hono、沙箱E2B与 CLI 等多条链路初次构建耗时较长属正常现象。另外注意版本前提tui/README.md 要求Node.js 22.19.0 或更高mastra-factory/README.md 的脚手架要求Node.js 22.13.0 或更高web 工程的engines字段同样声明了22.19.0。前置配置本地 GitHub App运行 Factory 之前必须先完成本地 GitHub App 的配置web README 中的 Configure local onboarding 章节。在 GitHub 的 App 创建页面新建一个 App其 URL 必须与你要运行的模式严格匹配设置项集成模式Integrated分离 UI 模式Split UIHomepage URLhttp://localhost:5873http://localhost:5173Callback URLhttp://localhost:5873/auth/github/callbackhttp://localhost:5173/auth/github/callbackSetup URLhttp://localhost:5873/auth/github/callbackhttp://localhost:5173/auth/github/callback⚠️ 不要混用两种模式集成模式下 5173 端口不会有任何服务在运行。随后按以下步骤完成 App 配置授予Contents、Issues、Pull requests的读写权限以及Metadata的只读权限。本地开发时清除 Webhook → Active勾选。生成 client secret 与 private key。将这些值写入mastracode/web/.envGITHUB_APP_ID GITHUB_APP_PRIVATE_KEY-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY----- GITHUB_APP_CLIENT_ID GITHUB_APP_CLIENT_SECRET GITHUB_APP_SLUG GITHUB_APP_WEBHOOK_SECRET关键细节来自 web/README.md用openssl rand -hex 32生成状态签名密钥填入GITHUB_APP_WEBHOOK_SECRETprivate key 中必须使用转义的\n换行符修改.env后必须重启服务端才生效其他环境变量可参考 mastracode/web/.env.schema注该文件未被包含在仓库列表中时以实际目录为准。两种本地运行模式本地开发使用 LibSQL 与本地沙箱onboarding 需要登录和 GitHub App。根据工作内容选择模式集成模式Integrated mode——后端工作首选后端开发与接近生产的检查用这种模式API 与打包后的 UI 一起运行pnpm --dir mastracode/web dev然后打开http://localhost:5873。从 package.json 可以看到该命令通过varlock run包装mastra factory dev --dir src/mastra并预设PORT5873与MASTRACODE_PUBLIC_URL。分离 UI 模式Split UI mode——带热更新的前端开发UI 开发需要热模块替换HMR时使用。一条命令会依次启动 Docker 服务 → 构建 UI 依赖的工作区包 → 在:4111运行 API → 在:5173运行 Vite dev serverpnpm --dir mastracode/web dev:ui打开http://localhost:5173。若希望两个终端分别运行而不互相干扰pnpm --dir mastracode/web db:up然后分别执行pnpm --dir mastracode/web apiAPI与pnpm --filter ./mastracode/factory-ui devVite即可。可选本地服务PostgreSQL 与 Redis要测试 PostgreSQL 和 Redis 场景pnpm --dir mastracode/web db:up并在mastracode/web/.env中加入以下值后重启DATABASE_URLpostgres://user:passlocalhost:54329/mastracode_web REDIS_URLredis://localhost:63799对应 docker-compose.yml 中的映射端口54329 / 63799。可选接入 Slack 频道Slack 只向公开 HTTPS 来源发送事件因此本地服务需要隧道。以下步骤假设集成模式服务监听 5873启动隧道安装cloudflared后运行cloudflared tunnel --url http://127.0.0.1:5873它会启动一个无需账号与配置文件的临时 Quick Tunnel将输出的trycloudflare.com主机名保存下来该主机名在命令停止前有效。若有 Cloudflare 账号和域名也可改用命名隧道以获得稳定主机名避免每次重启都要更新 Slack manifest。创建 Slack App为隧道 URL 生成 manifest 并复制到剪贴板pnpm --dir mastracode/web slack:manifest \ --url https://your-tunnel-hostname \ --name Mastra Factory (dev) \ --copy在 Slack 的 App 管理页面选择Create New App → From a manifest粘贴生成的内容安装到工作区后将Basic Information → App Credentials的凭据与OAuth Permissions中的 bot token 填入.envMASTRACODE_CHANNELS_PUBLIC_URLhttps://your-tunnel-hostname SLACK_APP_SIGNING_SECRET SLACK_APP_CLIENT_ID SLACK_APP_CLIENT_SECRET SLACK_APP_BOT_TOKEN重启 dev server——varlock会在启动时读取.env。关联账号给 bot 发私信它会回复一张 Connect 卡片完成该流程后你的 Slack 身份即绑定到 Mastra 用户之后 Slack 中的消息将以你的身份执行。注意Quick Tunnel 每次运行都会获得新主机名更换后需要同步更新MASTRACODE_CHANNELS_PUBLIC_URL以及 Slack App 的Event Subscriptions、Interactivity Shortcuts、OAuth Permissions设置。后端核心机制Factory 的架构与规则模型prepare → finalize 生命周期factory/README.md 说明了宿主应用的接入方式宿主调用MastraFactory.prepare()初始化 Factory 自有资源构造Mastra实例再调用MastraFactory.finalize()把路由、集成、存储驱动行为与 agent-controller 能力连接到宿主。关键约束是new Mastra(...)必须保留在宿主入口文件中以便 Mastra 的部署器能检测并打包它mastracode/web/src/mastra/index.ts 就是规范宿主示例。最简用法如下import { MastraFactory } from mastra/factory; import type { MastraFactoryConfig } from mastra/factory; export function createFactory(storage: MastraFactoryConfig[storage]) { return new MastraFactory({ storage }); }Board规则的新一代归属模型从源码结构看Factory 的规则体系已从全局 rules 对象迁移到Board 定义Board 拥有生命周期处理器onEnter/onExit、转移策略transitionPolicy、阶段语义kind与工具结果规则tools集成integration拥有自己的事件处理器运行时只负责执行规则不再存在全局 rules 对象。Work 与 Review 两个内置 Board 会自动安装默认配置无需任何规则配置。阶段kind的语义为resting——卡片停靠人类移出时武装自主性、移回时解除initialPhase必须是 restingworking——由 agent 座位承载卡片必须声明roleterminal——卡片完成进入后释放沙箱、允许 sweeps 淘汰过期决策。此外configVersion取代了旧rules选项与ruleSetVersion作为操作员维护的部署标签盖在审计记录上存储列名保持为rule_set_version默认值为factory-config-v1。旧 API 已移除传递rules会在构造时抛错并指向替代方案// 迁移前 new MastraFactory({ storage, rules: defaultFactoryRules({ version: v2, overrides: { tools: { my_tool: { onResult } } } }) }); // 迁移后 new MastraFactory({ storage, configVersion: v2, boards: [defineBoard({ ..., tools: { my_tool: { onResult } } })] });自定义 Board 通过defineBoard()声明示例可见 factory/README.md 中完整的 release 彩排 Boardqueued → preparing → shipping → shipped四阶段含transitionPolicy人类审批闸门、invokeSkill进入处理器与execute_command工具结果规则。Board 与阶段标识符为 1–128 个字母、数字、下划线或连字符区分大小写且不能含首尾空白work与review两个 ID 保持保留不可用于替换内置 Board。集成事件规则与更多 intake 来源GitHubGithubIntegration与PlatformGithubIntegration均可在构造时通过rules选项替换或禁用默认事件处理器函数替换、null禁用undefined保留默认事件名与处理器值非法会在构造期被拒绝。仓库维护者还可以在 PR 评论中发factory-app review或factory-app re-review直接启动一次 Factory review。LinearLinearIntegration/PlatformLinearIntegration自动安装issueObserved与issueClosed内置处理器无需任何默认规则导入。incident.ioIncidentioIntegration读取INCIDENT_IO_API_KEY与平台版PlatformIncidentioIntegration通过/v2/connections/{connectionId}/proxy代理可把活跃 incident 与遗留 follow-up 作为 Intake 源导入任意已安装 Board默认每五分钟由 reconciliation worker 轮询刷新一次状态可用MASTRACODE_INCIDENT_IO_RECONCILE_ENABLED与MASTRACODE_INCIDENT_IO_RECONCILE_INTERVAL_MS控制。Intake 路由GitHub 通过GET/PUT /web/intake/label-routes将 label 映射到 Board不区分大小写未路由的 issue 进入 WorkLinear 项目绑定则在 Settings › Intake › Linear routing 中选择一个 Board。产品遥测Factory 会在 Mastra 现有的 PostHog 项目中记录factory_web_activity事件浏览器只把已知的页面类别与活动类型发给已认证的/web/telemetry/activity端点由服务端补充已验证的账号与部署上下文。事件属性包括activitypage_view/interaction、page有界类别如work/review/settings绝不发送 URL、platform_user_id/platform_org_id、platform_project_id来自MASTRA_PROJECT_ID、platform_hosted是否存在非空MASTRA_DEPLOYMENT_ID等schema_version为1。交互事件每个挂载的浏览器应用每分钟最多一次服务端按账号/组织每进程每分钟上限 60 次隐藏标签页不采集。可通过设置MASTRA_TELEMETRY_DISABLEDtrue关闭接受1/true/yes忽略大小写与空白。该事件不采集姓名、邮箱、token、提示词、输入值、原始 URL、会话回放或匿名浏览器身份。测试、构建与部署测试与质量检查web 宿主的测试命令pnpm --dir mastracode/web test pnpm --dir mastracode/web check按包划分UI 测试在factory-ui后端测试在factory。Factory 包的聚焦检查从仓库根目录运行pnpm --filter ./mastracode/factory test pnpm --filter ./mastracode/factory check pnpm --filter ./mastracode/factory lint pnpm --filter ./mastracode/factory build:lib pnpm --filter ./mastracode/factory smoke:dist测试与源码同目录存放为*.test.ts构建后建议运行smoke:dist验证发布入口可被正常导入。factory-ui 的测试约定还包括单元测试test:unit与 MSW 页面测试test:msw参见 mastracode/factory-ui/AGENTS.md。构建、运行与部署pnpm --dir mastracode/web build pnpm --dir mastracode/web start构建会通过scripts/monorepo-deps.mjs先行处理 monorepo 依赖再执行mastra build --dir src/mastra。部署需要先登录 Mastra 平台mastra auth login pnpm --dir mastracode/web deploydeploy会先执行 build 与scripts/validate-output.mjs输出校验再以mastra deploy --skip-build发布。快速上手的另一条路径脚手架如果你不是要开发 MastraCode 本身而是想使用Mastra Factory官方推荐用create-factory脚手架mastra-factory/README.mdnpx create-factorylatest也支持 Yarnyarn dlx create-factorylatest与 pnpmpnpm create factorylatest。默认情况下交互式向导会在 setup 期间预置 Mastra 平台资源使你可以在平台上或本地 云端能力的方式完整运行 Factory若想完全自托管加上--no-platform标志npx create-factorylatest -- --no-platform所有选项可通过npx create-factorylatest --help查看。结语从包结构到两种运行模式再到 Board 规则模型与部署链路mastracode目录展示了一套完整的可复用后端 React 前端 独立宿主 共享 SDK工程形态。后端工作走集成模式5873 端口UI 工作走分离模式5173 端口 Docker 服务并牢记策略、校验与持久化留在mastra/factoryReact 里不放业务规则的边界原则即可高效地在本地贡献 MastraCode。各包的 CHANGELOG.md 记录了版本历史与迁移细节值得在升级时同步查阅。【免费下载链接】mastraMastra is the modern TypeScript framework for AI-powered applications and agents.项目地址: https://gitcode.com/GitHub_Trending/ma/mastra创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表