AgentController
:::실험적
AgentController 기능은 베타 단계이며, 베타 상태를 벗어나기 전까지 마이너 버전에서 호환성을 깨뜨리는 변경이 발생할 수 있습니다.
:::
AgentController 클래스는 하나 이상의 Session 인스턴스를 위한 공유 호스트입니다. 컨트롤러를 초기화하고 세션을 생성한 다음 session.* API를 사용하여 대화 상태와 실행을 제어하세요.
안내된 소개는 다음을 참조하세요.AgentController overview.
사용예사용예에 대한 직접 링크
다음 예에서는 컨트롤러를 초기화하고 세션을 생성합니다. 메시지를 보내기 전에 세션 이벤트를 구독합니다.
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 업데이트의 유효성을 검사하는 데 사용되는 스키마입니다.initialState?:
memory?:
defaultModeId?:
instructions?:
tools?:
workspace?:
browser?:
channels?:
intervalHandlers?:
init()에서 시작되고 stopIntervals() 또는 destroy()에서 중지되는 주기적 핸들러입니다.idGenerator?:
modelUseCountProvider?:
modelUseCountTracker?:
session.model.switch() 후 Model 선택을 기록합니다.subagents?:
subagent Tool을 통해 노출되는 하위 Agent 유형입니다.id:
name:
description:
instructions:
tools?:
allowedControllerTools?:
allowedWorkspaceTools?:
defaultModelId?:
maxSteps?:
stopWhen?:
forked?:
gateways?:
omConfig?:
disableBuiltinTools?:
toolCategoryResolver?:
pubsub?:
threadLock?:
observability?:
속성속성에 대한 직접 링크
id:
행동 양식행동 양식에 대한 직접 링크
세션세션에 대한 직접 링크
createSession(options)createsessionoptions에 대한 직접 링크
(resourceId, scope) 쌍에 등록된 라이브 세션을 가져오거나 생성합니다. 이 메서드보다 먼저 init()을 호출하세요.
const session = await controller.createSession({
resourceId: 'project-42',
scope: 'editor-window-1',
threadId: 'thread-7',
})
동일한 resourceId와 scope는 동일한 Session 인스턴스를 반환합니다. 범위가 다르면 같은 리소스에 대해 격리된 세션을 생성합니다. threadId를 제공하면 이 메서드는 캐시된 세션을 해당 스레드로 전환하거나, 스레드가 없으면 생성합니다.
resourceId?:
resourceId 또는 컨트롤러 id입니다.scope?:
threadId?:
id?:
id입니다.ownerId?:
id입니다.workspace?:
browser?:
requestContext?:
보고:Promise<Session<TState>>
getSessionByResource(resourceId, scope?)getsessionbyresourceresourceid-scope에 대한 직접 링크
리소스 및 선택적 범위에 등록된 라이브 세션을 반환합니다.
const session = await controller.getSessionByResource('project-42', 'editor-window-1')
보고:Promise<Session<TState> | undefined>
setResourceId(session, { resourceId })setresourceidsession--resourceid-에 대한 직접 링크
라이브 세션을 다른 리소스로 이동하고 활성 스레드 바인딩을 지웁니다.
await controller.setResourceId(session, { resourceId: 'project-43' })
getKnownResourceIds(session)getknownresourceidssession에 대한 직접 링크
저장된 스레드에 있는 리소스 식별자를 나열합니다.
const resourceIds = await controller.getKnownResourceIds(session)
보고:Promise<string[]>
수명주기수명주기에 대한 직접 링크
init()init에 대한 직접 링크
공유 스토리지, 작업 공간 서비스 및 구성된 간격 핸들러를 초기화합니다. 반복 호출은 동일한 초기화 약속을 재사용합니다.
await controller.init()
destroy()destroy에 대한 직접 링크
컨트롤러 소유 간격 핸들러를 중지합니다. 컨트롤러가 생성한 세션은 삭제되지 않습니다.
await controller.destroy()
모드 및 Agent모드 및 Agent에 대한 직접 링크
listModes()listmodes에 대한 직접 링크
구성된 모드 정의를 반환합니다.
const modes = controller.listModes()
보고:AgentControllerMode[]
getCurrentAgent(session)getcurrentagentsession에 대한 직접 링크
세션의 활성 모드에 대한 지원 Agent를 반환합니다.
const agent = controller.getCurrentAgent(session)
보고:Agent
작업공간 및 브라우저작업공간 및 브라우저에 대한 직접 링크
hasWorkspace()hasworkspace에 대한 직접 링크
컨트롤러에 정적, 동적 또는 개체 기반 작업 공간 구성이 있는지 보고합니다.
if (controller.hasWorkspace()) {
console.log('Workspace configured')
}
보고:boolean
isWorkspaceReady()isworkspaceready에 대한 직접 링크
컨트롤러 수준 작업공간이 준비되었는지 보고합니다.
const ready = controller.isWorkspaceReady()
보고:boolean
getWorkspace()getworkspace에 대한 직접 링크
정적 컨트롤러 작업 공간을 반환합니다. 동적 작업 공간 공장 반환undefined until resolved.
const workspace = controller.getWorkspace()
보고:Workspace | undefined
resolveWorkspace({ session, requestContext? })resolveworkspace-session-requestcontext-에 대한 직접 링크
세션에 대한 동적 작업 공간을 확인하고 컨트롤러에서 결과를 캐시합니다.
const workspace = await controller.resolveWorkspace({ session, requestContext })
보고:Promise<Workspace | undefined>
setBrowser(browser)setbrowserbrowser에 대한 직접 링크
컨트롤러 브라우저를 교체하고 이를 지원 Agent에 전파합니다.
controller.setBrowser(browser)
마스트라와 채널마스트라와 채널에 대한 직접 링크
getMastra()getmastra에 대한 직접 링크
부모 Mastra 인스턴스 또는 다음에 의해 생성된 내부 인스턴스를 반환합니다.init().
const mastra = controller.getMastra()
보고:Mastra | undefined
getChannels()getchannels에 대한 직접 링크
구성된 채팅 채널 통합을 반환합니다.
const channels = controller.getChannels()
보고:AgentControllerChannels | null
ModelModel에 대한 직접 링크
getCurrentModelAuthStatus(session)getcurrentmodelauthstatussession에 대한 직접 링크
세션에서 선택한 Model에 대한 인증 상태를 반환합니다.
const status = await controller.getCurrentModelAuthStatus(session)
보고:Promise<ModelAuthStatus>
listAvailableModels()listavailablemodels에 대한 직접 링크
구성된 게이트웨이와 기본 제공 게이트웨이의 Model을 나열합니다. 결과는 잠시 캐시되며 modelUseCountProvider가 구성되어 있으면 사용량 데이터에 따라 정렬됩니다.
const models = await controller.listAvailableModels()
보고:Promise<AvailableModel[]>
invalidateAvailableModelsCache()invalidateavailablemodelscache에 대한 직접 링크
사용 가능한 Model 캐시를 지웁니다.
controller.invalidateAvailableModelsCache()
관찰 Memory 및 권한관찰 Memory 및 권한에 대한 직접 링크
loadOMProgress(session)loadomprogresssession에 대한 직접 링크
활성 스레드에 대해 저장된 관찰 Memory 진행 상황을 로드하고om_status event.
await controller.loadOMProgress(session)
getObservationalMemoryRecord(session)getobservationalmemoryrecordsession에 대한 직접 링크
활성 스레드에 대한 관찰 Memory 레코드를 반환합니다.
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()