AgentController
AgentController 功能目前處於 Beta 階段;在脫離 Beta 狀態前,minor version 仍可能包含 breaking change。
AgentController 類別是供一或多個 Session instance 使用的共用 host。先初始化 controller 並建立 Session,接著使用 session.* API 管理對話 state 與 run。
引導式介紹請參閱 AgentController 概觀。
使用範例「使用範例」的直接連結
以下範例會初始化 controller 並建立 Session。它會先訂閱 Session event,再傳送訊息。
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()
Constructor 參數「Constructor 參數」的直接連結
id:
modes:
id:
name?:
defaultModelId?:
description?:
instructions?:
transitionsTo?:
submit_plan suspension 後進入的 mode。availableTools?:
metadata?:
metadata.default: true 會標示預設 mode。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() 停止的週期性 handler。idGenerator?:
modelUseCountProvider?:
modelUseCountTracker?:
session.model.switch() 後記錄模型選擇。subagents?:
subagent Tool 公開的 subagent 型別。id:
name:
description:
instructions:
tools?:
allowedControllerTools?:
allowedWorkspaceTools?:
defaultModelId?:
maxSteps?:
stopWhen?:
forked?:
gateways?:
omConfig?:
disableBuiltinTools?:
toolCategoryResolver?:
pubsub?:
threadLock?:
observability?:
屬性「屬性」的直接連結
id:
方法「方法」的直接連結
Session「Session」的直接連結
createSession(options)「createsessionoptions」的直接連結
取得或建立為 (resourceId, scope) pair 註冊的即時 Session。呼叫此方法前,請先呼叫 init()。
const session = await controller.createSession({
resourceId: 'project-42',
scope: 'editor-window-1',
threadId: 'thread-7',
})
相同的 resourceId 與 scope 會傳回相同的 Session instance。不同 scope 會為同一 resource 建立隔離的 Session。提供 threadId 時,此方法會將快取的 Session 切換至該 thread;如果 thread 不存在,則加以建立。
resourceId?:
resourceId 或 controller id。scope?:
threadId?:
id?:
id。ownerId?:
id。workspace?:
browser?:
requestContext?:
傳回:Promise<Session<TState>>
getSessionByResource(resourceId, scope?)「getsessionbyresourceresourceid-scope」的直接連結
傳回為 resource 與選填 scope 註冊的即時 Session。
const session = await controller.getSessionByResource('project-42', 'editor-window-1')
傳回:Promise<Session<TState> | undefined>
setResourceId(session, { resourceId })「setresourceidsession--resourceid-」的直接連結
將即時 Session 移至其他 resource,並清除有效的 thread 繫結。
await controller.setResourceId(session, { resourceId: 'project-43' })
getKnownResourceIds(session)「getknownresourceidssession」的直接連結
列出已儲存 thread 中存在的 resource 識別碼。
const resourceIds = await controller.getKnownResourceIds(session)
傳回:Promise<string[]>
生命週期「生命週期」的直接連結
init()「init」的直接連結
初始化共用 Storage、Workspace 服務與設定的 interval handler。重複呼叫會重複使用相同的初始化 promise。
await controller.init()
destroy()「destroy」的直接連結
停止 controller 擁有的 interval handler。這不會銷毀 controller 建立的 Session。
await controller.destroy()
Mode 與 Agent「Mode 與 Agent」的直接連結
listModes()「listmodes」的直接連結
傳回設定的 mode 定義。
const modes = controller.listModes()
傳回:AgentControllerMode[]
getCurrentAgent(session)「getcurrentagentsession」的直接連結
傳回 Session 有效 mode 的底層 Agent。
const agent = controller.getCurrentAgent(session)
傳回:Agent
Workspace 與瀏覽器「Workspace 與瀏覽器」的直接連結
hasWorkspace()「hasworkspace」的直接連結
回報 controller 是否具有靜態、動態或物件型 Workspace 設定。
if (controller.hasWorkspace()) {
console.log('Workspace configured')
}
傳回:boolean
isWorkspaceReady()「isworkspaceready」的直接連結
回報 controller 層級的 Workspace 是否準備就緒。
const ready = controller.isWorkspaceReady()
傳回:boolean
getWorkspace()「getworkspace」的直接連結
傳回靜態 controller Workspace。動態 Workspace factory 在解析前會傳回 undefined。
const workspace = controller.getWorkspace()
傳回:Workspace | undefined
resolveWorkspace({ session, requestContext? })「resolveworkspace-session-requestcontext-」的直接連結
為 Session 解析動態 Workspace,並在 controller 上快取結果。
const workspace = await controller.resolveWorkspace({ session, requestContext })
傳回:Promise<Workspace | undefined>
setBrowser(browser)「setbrowserbrowser」的直接連結
取代 controller 瀏覽器,並傳遞至底層 Agent。
controller.setBrowser(browser)
Mastra 與 Channel「Mastra 與 Channel」的直接連結
getMastra()「getmastra」的直接連結
傳回父 Mastra instance,或由 init() 建立的內部 instance。
const mastra = controller.getMastra()
傳回:Mastra | undefined
getChannels()「getchannels」的直接連結
傳回設定的聊天 Channel 整合。
const channels = controller.getChannels()
傳回:AgentControllerChannels | null
模型「模型」的直接連結
getCurrentModelAuthStatus(session)「getcurrentmodelauthstatussession」的直接連結
傳回 Session 所選模型的驗證狀態。
const status = await controller.getCurrentModelAuthStatus(session)
傳回:Promise<ModelAuthStatus>
listAvailableModels()「listavailablemodels」的直接連結
列出設定與內建 gateway 提供的模型。結果會短暫快取;設定 modelUseCountProvider 時,會使用使用資料排序。
const models = await controller.listAvailableModels()
傳回:Promise<AvailableModel[]>
invalidateAvailableModelsCache()「invalidateavailablemodelscache」的直接連結
清除可用模型 cache。
controller.invalidateAvailableModelsCache()
Observational Memory 與權限「Observational Memory 與權限」的直接連結
loadOMProgress(session)「loadomprogresssession」的直接連結
載入有效 thread 已儲存的 observational Memory 進度,並發出 om_status event。
await controller.loadOMProgress(session)
getObservationalMemoryRecord(session)「getobservationalmemoryrecordsession」的直接連結
傳回有效 thread 的 observational Memory 記錄。
const record = await controller.getObservationalMemoryRecord(session)
傳回:Promise<ObservationalMemoryRecord | null>
getToolCategory({ toolName })「gettoolcategory-toolname-」的直接連結
解析 Tool 的權限 category。
const category = controller.getToolCategory({ toolName: 'execute_command' })
傳回:ToolCategory | null
Interval「Interval」的直接連結
registerInterval(handler)「registerintervalhandler」的直接連結
啟動或取代週期性 handler。
controller.registerInterval({
id: 'refresh',
intervalMs: 60_000,
handler: async () => refreshData(),
})
removeInterval({ id })「removeinterval-id-」的直接連結
停止一個 interval,並執行其選填的 shutdown callback。
await controller.removeInterval({ id: 'refresh' })
stopIntervals()「stopintervals」的直接連結
停止所有 interval,並執行其選填的 shutdown callback。
await controller.stopIntervals()