AgentController
AgentController 功能目前处于 beta 阶段。在正式脱离 beta 状态之前,次要版本中可能会包含破坏性变更。
AgentController 类是一个共享宿主,可承载一个或多个 Session 实例。初始化控制器并创建 Session 后,使用 session.* API 管理对话状态和运行控制。
有关引导式介绍,请参阅 AgentController 概述。
用法示例用法示例的直接链接
以下示例初始化控制器并创建 Session。它会在发送消息之前订阅 Session 事件。
import { Agent } from '@mastra/core/agent'
import { AgentController } from '@mastra/core/agent-controller'
import { Workspace } from '@mastra/core/workspace'
const agent = new Agent({
id: 'coding-agent',
name: 'Coding agent',
instructions: 'Help with software engineering tasks.',
model: 'anthropic/claude-sonnet-4-6',
})
const controller = new AgentController({
id: 'coding-controller',
agent,
workspace: new Workspace({ id: 'coding-workspace' }),
modes: [{ id: 'build', name: 'Build', metadata: { default: true } }],
})
await controller.init()
const session = await controller.createSession({ resourceId: 'project-42' })
const unsubscribe = session.subscribe(event => {
if (event.type === 'message_update') {
console.log(event.message)
}
})
await session.sendMessage({ content: 'Review the project structure.' })
unsubscribe()
构造函数参数构造函数参数的直接链接
id:
modes:
id:
name?:
defaultModelId?:
description?:
instructions?:
transitionsTo?:
submit_plan 暂停后进入的模式。availableTools?:
metadata?:
metadata.default: true 用于标记默认模式。tools?:
additionalTools 互斥。additionalTools?:
tools 互斥。agent?:
agent 参数。default?:
metadata.default 或 defaultModeId。agent?:
resourceId?:
id。storage?:
stateSchema?:
session.state 更新的 schema。initialState?:
memory?:
defaultModeId?:
instructions?:
tools?:
workspace?:
browser?:
channels?:
intervalHandlers?:
init() 启动、由 stopIntervals() 或 destroy() 停止的周期处理程序。idGenerator?:
modelUseCountProvider?:
modelUseCountTracker?:
session.model.switch() 后记录模型选择。subagents?:
subagent Tool 公开的子 Agent 类型。id:
name:
description:
instructions:
tools?:
allowedControllerTools?:
allowedWorkspaceTools?:
defaultModelId?:
maxSteps?:
stopWhen?:
forked?:
gateways?:
omConfig?:
disableBuiltinTools?:
toolCategoryResolver?:
pubsub?:
threadLock?:
observability?:
属性属性的直接链接
id:
方法方法的直接链接
SessionSession的直接链接
createSession(options)createsessionoptions的直接链接
获取或创建为 (resourceId, scope) 组合注册的实时 Session。请先调用 init()。
const session = await controller.createSession({
resourceId: 'project-42',
scope: 'editor-window-1',
threadId: 'thread-7',
})
相同的 resourceId 和 scope 会返回同一个 Session 实例。不同的作用域会为同一资源创建隔离的 Session。提供 threadId 时,该方法会将缓存的 Session 切换到该线程;若线程不存在,则创建它。
resourceId?:
resourceId 或控制器 id。scope?:
threadId?:
id?:
id。ownerId?:
id。workspace?:
browser?:
requestContext?:
返回:Promise<Session<TState>>
getSessionByResource(resourceId, scope?)getsessionbyresourceresourceid-scope的直接链接
返回为某个资源和可选作用域注册的实时 Session。
const session = await controller.getSessionByResource('project-42', 'editor-window-1')
返回:Promise<Session<TState> | undefined>
setResourceId(session, { resourceId })setresourceidsession--resourceid-的直接链接
将实时 Session 移到另一个资源,并清除其活动线程绑定。
await controller.setResourceId(session, { resourceId: 'project-43' })
getKnownResourceIds(session)getknownresourceidssession的直接链接
列出已存储线程中存在的资源标识符。
const resourceIds = await controller.getKnownResourceIds(session)
返回:Promise<string[]>
生命周期生命周期的直接链接
init()init的直接链接
初始化共享存储、Workspace 服务和已配置的周期处理程序。重复调用会复用同一个初始化 Promise。
await controller.init()
destroy()destroy的直接链接
停止控制器拥有的周期处理程序。这不会销毁控制器创建的 Session。
await controller.destroy()
模式和 Agent模式和 Agent的直接链接
listModes()listmodes的直接链接
返回已配置的模式定义。
const modes = controller.listModes()
返回:AgentControllerMode[]
getCurrentAgent(session)getcurrentagentsession的直接链接
返回 Session 活动模式对应的后端 Agent。
const agent = controller.getCurrentAgent(session)
返回:Agent
Workspace 和浏览器Workspace 和浏览器的直接链接
hasWorkspace()hasworkspace的直接链接
报告控制器是否具有静态、动态或基于对象的 Workspace 配置。
if (controller.hasWorkspace()) {
console.log('Workspace configured')
}
返回:boolean
isWorkspaceReady()isworkspaceready的直接链接
报告控制器级 Workspace 是否已就绪。
const ready = controller.isWorkspaceReady()
返回:boolean
getWorkspace()getworkspace的直接链接
返回静态控制器 Workspace。动态 Workspace 工厂在解析完成前返回 undefined。
const workspace = controller.getWorkspace()
返回:Workspace | undefined
resolveWorkspace({ session, requestContext? })resolveworkspace-session-requestcontext-的直接链接
为 Session 解析动态 Workspace,并将结果缓存在控制器上。
const workspace = await controller.resolveWorkspace({ session, requestContext })
返回:Promise<Workspace | undefined>
setBrowser(browser)setbrowserbrowser的直接链接
替换控制器浏览器,并将其传播到后端 Agent。
controller.setBrowser(browser)
Mastra 和频道Mastra 和频道的直接链接
getMastra()getmastra的直接链接
返回父 Mastra 实例或由 init() 创建的内部实例。
const mastra = controller.getMastra()
返回:Mastra | undefined
getChannels()getchannels的直接链接
返回已配置的聊天频道集成。
const channels = controller.getChannels()
返回:AgentControllerChannels | null
模型模型的直接链接
getCurrentModelAuthStatus(session)getcurrentmodelauthstatussession的直接链接
返回 Session 所选模型的身份验证状态。
const status = await controller.getCurrentModelAuthStatus(session)
返回:Promise<ModelAuthStatus>
listAvailableModels()listavailablemodels的直接链接
列出已配置网关和内置网关中的模型。结果会短暂缓存;配置 modelUseCountProvider 后,还会结合使用数据排序。
const models = await controller.listAvailableModels()
返回:Promise<AvailableModel[]>
invalidateAvailableModelsCache()invalidateavailablemodelscache的直接链接
清除可用模型缓存。
controller.invalidateAvailableModelsCache()
观测记忆和权限观测记忆和权限的直接链接
loadOMProgress(session)loadomprogresssession的直接链接
加载活动线程已存储的观测记忆进度,并发出 om_status 事件。
await controller.loadOMProgress(session)
getObservationalMemoryRecord(session)getobservationalmemoryrecordsession的直接链接
返回活动线程的观测记忆记录。
const record = await controller.getObservationalMemoryRecord(session)
返回:Promise<ObservationalMemoryRecord | null>
getToolCategory({ toolName })gettoolcategory-toolname-的直接链接
解析 Tool 的权限类别。
const category = controller.getToolCategory({ toolName: 'execute_command' })
返回:ToolCategory | null
周期处理程序周期处理程序的直接链接
registerInterval(handler)registerintervalhandler的直接链接
启动或替换周期处理程序。
controller.registerInterval({
id: 'refresh',
intervalMs: 60_000,
handler: async () => refreshData(),
})
removeInterval({ id })removeinterval-id-的直接链接
停止一个周期处理程序并运行其可选关闭回调。
await controller.removeInterval({ id: 'refresh' })
stopIntervals()stopintervals的直接链接
停止所有周期处理程序并运行其可选关闭回调。
await controller.stopIntervals()