模块详解
packages/core/src/ 下有 56 个顶层目录。
其中 8 个承担了框架的核心抽象——DI 容器、Agent、工作流引擎、agentic 循环、中间件管线、模型层、存储、工具系统;
其余 48 个是支撑性子系统。卡片默认折叠,点击展开可看到关键源码路径、公开导出和内部依赖。
Core Modules
8 · 按代码量排序agent.ts 9408 行是整个 core 最大单文件,但实际执行逻辑大量委托出去:prepare-stream workflow(agent/workflows/prepare-stream/)在每次调用时构造,加载 memory、解析 tools、跑 input processors;真正的 LLM 循环交给 llm/model/model.loop.ts 里的 MastraLLMVNext → loop()。读 Agent 时重点看 agent.ts 里的 #execute() 私有方法和 generate()/stream() 如何构造 prepare-stream。另外注意:Agent 没有顶层 approve()/decline(),人审接口在 agent-controller(session approval)和 approveNetworkToolCall/declineNetworkToolCall(network 场景)。
agent/ ├── agent.ts ← 9408L 主类(generate/stream/resume) ├── types.ts ← AgentConfig、AgentResult 类型 ├── trip-wire.ts ← TripWire abort 机制 ├── signals.ts ← Agent signal 系统 ├── durable/ │ ├── durable-agent.ts ← 可持久化恢复的 Agent │ └── workflows/ ← durable agent 内部 workflow steps ├── workflows/ │ └── prepare-stream/ ← 每次调用构造的 prepare workflow │ ├── index.ts ← createPrepareStreamWorkflow 工厂 │ ├── prepare-memory-step.ts │ ├── prepare-tools-step.ts │ └── map-results-step.ts └── message-list/ ← MessageList、消息转换、prompt 构造
Mastra 类在 index.ts 里是个 5870 行的大类,但绝大多数方法是注册/查找(getAgent、addAgent、listAgents、getWorkflow...)。执行期 primitives 通过 request-context 反向拿到 Mastra 实例(di/RequestContext),所以运行时依赖是反的。它主要是注册期的大管家 + 后台服务(worker、scheduler、server)的宿主。顶层 @mastra/core 只 re-export Mastra 和 Config,其他都走子路径(@mastra/core/agent 等)。
Workflow 本身不内置 LLM 概念,但和 Agent/loop 的耦合极深:Agentic Loop 的每轮迭代就是一次 Workflow 执行。两套引擎并存:DefaultExecutionEngine(pull-based,传统 workflow 用)和 evented/(push-based,实时事件处理)。Step 可以是普通函数、LLM step、或另一个 Workflow,这是 agentic-loop > agentic-execution 嵌套的基础。读源码时 workflow.ts 4400 行是入口,但真正的执行流程在 handlers/ 和 evented/workflow-event-processor/ 里。
workflows/
├── workflow.ts ← 4400L 主类 + createStep + Run
├── default.ts ← DefaultExecutionEngine(pull-based)
├── types.ts ← ExecutionEngine、StepFlowEntry 类型
├── create.ts ← createWorkflow() 工厂
├── step.ts ← Step 类型/构造器
├── handlers/
│ ├── control-flow.ts ← branch/loop/foreach/parallel
│ ├── entry.ts ← entry step handler
│ └── step.ts ← 普通 step handler
└── evented/
├── workflow.ts ← Evented Workflow(push-based)
└── workflow-event-processor/
└── index.ts ← 主事件 processor 循环理解 Mastra 执行模型的关键模块。注意:createPrepareStreamWorkflow 不在 loop/ 下,而在 agent/workflows/prepare-stream/。loop.ts 本身只有 177 行,真正逻辑在 workflows/ 子目录。agentic-execution 单轮的 step 顺序是:llmExecutionStep → map-tool-calls → foreach(toolCallStep) → llmMappingStep → backgroundTaskCheckStep → signalDrainStep → isTaskCompleteStep → goalStep。loop() 只依赖 stream/processors/observability 等少数模块,不直接依赖 agent/——反向依赖由 llm/model.loop.ts(MastraLLMVNext)桥接。
loop/
├── loop.ts ← 177L 顶层入口函数
├── workflows/
│ ├── stream.ts ← workflowLoopStream() 驱动流
│ ├── agentic-loop/
│ │ └── index.ts ← 外层 dowhile 循环
│ └── agentic-execution/
│ ├── index.ts ← 单轮 DAG 定义
│ ├── llm-execution-step.ts ← 2192L LLM 调用
│ ├── tool-call-step.ts ← 1303L 工具执行
│ ├── llm-mapping-step.ts ← 输出映射
│ └── goal-step.ts ← 目标评估
├── network/
│ ├── index.ts ← networkLoop() 多 agent 网络
│ └── validation.ts ← 网络配置校验
└── shared/
└── stream-until-idle-helpers.tsProcessor 接口定义在 index.ts 本身(不是单独的 types 文件),890 行。10+ 个 hooks 分阶段:processInput/processLLMRequest(请求侧)、processLLMResponse/processOutput/processOutputStream(响应侧)、processAPIError(错误处理)、computeStateSignal(状态信号)、processInputStep/processOutputStep(step 粒度)、processDataParts(流数据处理)。Processor 本身可以是类实例或 Workflow(复用 DAG 能力)。读源码时先从内置 processor 反向理解接口比直接看 interface 更直观——24 个内置 processor 都在 processors/processors/ 和 processors/memory/ 下。
关键理解点:MastraLLMVNext(model.loop.ts)虽然在 llm/ 下但不从 llm/index.ts 导出,agent/agent.ts 直接 import 它。这个类包装 AI SDK LanguageModel,但把 doStream 路由进 Mastra 自己的 loop(),而不是直接调 AI SDK——这是 agent.generate() 最终跑三层 workflow 的入口。router.ts 的 ModelRouterLanguageModel 做字符串解析和 provider 动态 import(冷启动成本来源)。gateway 认证、API key 轮换、fallback 链都在 router/gateway 层。注意 llm/ 还同时支持 AI SDK v4/v5/v6/v7(aisdk/ 子目录各版本 wrapper)。
Storage 是被依赖最多的底层模块,自己只依赖 base.ts(MastraBase),几乎零跨模块依赖。设计上每个子域(storage/domains/<name>/)独立提供 base/inmemory/filesystem 三套实现——你可以 workflow 状态用 Postgres(外部包)、blob 用 S3、memory 用 Redis、其他用 InMemory,混搭运行。types.ts 3086 行是整个 core 最大的类型文件。读源码时 base.ts 只有 614 行(主要是域访问器和 init/close),真正的域接口定义全在 types.ts 和 domains/ 下。
Tools 代码量不大(5712 行),但它和 loop/agent 的交互点很关键:工具可以声明 requireApproval(中断 loop 等人审)、suspend(SuspendOptions 类型来自 workflows/,把 agent 睡眠等外部事件唤醒)、background(由 tool-loop-agent 后台跑)。这些扩展点不是 if/else 加在 Tool 类里,而是通过 agentic-execution workflow 的 tool-call-step 分支实现——durable execution 天然支持中途停下来。tool-builder/builder.ts 1068 行负责把 Vercel AI SDK 工具和其他 provider 工具转成 Mastra Tool,是生态兼容层。
Secondary Modules
48 · 参考清单| Module | Role | LoC |
|---|---|---|
| workspace/ | Workspace/knowledge 抽象,agent 间共享的 state sandbox(19,640 行,最大的 secondary 模块) | 19,640 |
| agent-controller/ | AgentController,session 管理、approval/decline/suspend/resume 交互式运行 | 8,484 |
| stream/ | 流式输出抽象:MastraModelOutput、ChunkType、AI SDK adapters、caching-transform | 7,687 |
| channels/ | AgentChannels — Slack/Discord/WhatsApp 等多通道输出集成 | 5,349 |
| evals/ | 评测框架:MastraScorer 基类、hooks、scoreTraces、collect-tool-mocks | 5,112 |
| _types/ | 内部共享类型(无 index.ts,直接消费) | 4,700 |
| browser/ | MastraBrowser 抽象、browser-context processor(Playwright 集成) | 4,402 |
| observability/ | OpenTelemetry tracing/metrics/logging:Span、SpanType、NoOpObservability | 3,721 |
| datasets/ | DatasetsManager,评测数据集管理 | 3,692 |
| memory/ | MastraMemory 基类、MemoryConfig、thread/resource 管理、working-memory utils | 3,143 |
| events/ | PubSub 事件总线:EventEmitterPubSub、PubSub 接口、事件类型 | 2,748 |
| background-tasks/ | BackgroundTaskManager,async/dispatched 后台工作 | 2,311 |
| a2a/ | Agent-to-Agent 协议(Google A2A spec)客户端 | 1,938 |
| schedules/ | Schedules 类,agent/workflow 调度管理 | 1,732 |
| notifications/ | 通知派发:delivery policy、notification workflow | 1,144 |
| tool-provider/ | ToolProvider 接口,外部工具源动态注册(MCP 等) | 1,047 |
| vector/ | MastraVector 基类,向量存储抽象 | 952 |
| agent-builder/ | Builder 模式程序化构建 Agent 实例 | 875 |
| signals/ | SignalProvider 基类、WebhookSignalProvider、signal 类型 | 795 |
| worker/ | MastraWorker 接口、OrchestrationWorker、SchedulerWorker、BackgroundTaskWorker | 781 |
| server/ | MastraServerBase、ApiRoute、Middleware、StudioConfig | 741 |
| mcp/ | Model Context Protocol:MCPServerBase、MCP 客户端集成 | 669 |
| skills/ | resolveAgentSkills、mergeWorkspaceSkills、SkillInput 类型 | 610 |
| editor/ | IMastraEditor 接口,代码编辑器抽象 | 531 |
| tool-loop-agent/ | ToolLoopAgentLike compat adapter(human-out-of-the-loop) | 433 |
| telemetry/ | Feature telemetry(trackFeatureUsage) | 417 |
| processor-provider/ | ProcessorProvider 接口,动态注册 processor | 417 |
| coding-agent/ | Coding-agent prompt 构建(SWE-agent 风格) | 343 |
| logger/ | IMastraLogger、ConsoleLogger、DualLogger、NoopLogger | 289 |
| license/ | LicenseClient 商业 license 校验 | 285 |
| utils/ | 工具函数(makeCoreTool、deepMerge、createMastraProxy)——注意 src/utils.ts 647 行在 src 根 | 253 |
| test-utils/ | 内部测试辅助工具 | 216 |
| cache/ | InMemoryServerCache、MastraServerCache 接口 | 153 |
| hooks/ | AvailableHooks 枚举(ON_SCORER_RUN 等)、registerHook | 151 |
| harness/ | 测试 harness(re-exports AgentController) | 147 |
| integration/ | Integration 抽象基类 | 140 |
| bundler/ | IBundler 接口(部署打包用) | 85 |
| types/ | DynamicArgument<T, TRequestContext> 等全局共享类型 | 84 |
| relevance/ | Relevance scorer for agents | 60 |
| auth/ | Re-exports @internal/auth(Fine-Grained Authorization、ActorSignal) | 57 |
| features/ | coreFeatures set — 特性开关注册表 | 30 |
| tts/ | MastraTTS、TTSConfig 接口 | 24 |
| deployer/ | IDeployer 接口(extends IBundler) | 23 |
| action/ | MastraPrimitives 类型——传给各组件的 primitives 中央 bag | 20 |
| schema/ | Standard schema 类型(StandardSchemaWithJSON、toStandardSchema) | 16 |
| error/ | MastraError、ErrorDomain、ErrorCategory 枚举 | 12 |
| request-context/ | AsyncLocalStorage 请求上下文(拿 Mastra 实例)+ key 常量 | 9 |
| di/ | RequestContext 依赖注入 token | 8 |
| voice/ | Re-exports @internal/voice(AISDKSpeech、MastraVoice) | 8 |
| run/ | Run types(无 index.ts) | 5 |
Secondary 模块只做清单级展示,深度阅读请沿着 Core Module 卡片里的「内部依赖模块」链接跳转。