AgentController
La fonctionnalité AgentController est en phase bêta et peut subir des changements incompatibles dans les versions mineures jusqu’à sa sortie de la phase bêta.
La classe AgentController est un hôte partagé pour une ou plusieurs instances de Session. Initialisez le contrôleur, créez une session, puis utilisez les API session.* pour gérer l’état de la conversation et contrôler l’exécution.
Pour une introduction guidée, consultez la présentation d’AgentController.
Exemple d’utilisationLien direct vers Exemple d’utilisation
L’exemple suivant initialise un contrôleur et crée une session. Il s’abonne aux événements de la session avant d’envoyer un message.
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()
Paramètres du constructeurLien direct vers Paramètres du constructeur
id:
modes:
id:
name?:
defaultModelId?:
description?:
instructions?:
transitionsTo?:
submit_plan approuvée.availableTools?:
metadata?:
metadata.default: true désigne le mode par défaut.tools?:
additionalTools.additionalTools?:
tools.agent?:
agent de premier niveau.default?:
metadata.default ou defaultModeId.agent?:
resourceId?:
id.storage?:
stateSchema?:
session.state.initialState?:
memory?:
defaultModeId?:
instructions?:
tools?:
workspace?:
browser?:
channels?:
intervalHandlers?:
init() et arrêtés par stopIntervals() ou destroy().idGenerator?:
modelUseCountProvider?:
modelUseCountTracker?:
session.model.switch().subagents?:
subagent intégré.id:
name:
description:
instructions:
tools?:
allowedControllerTools?:
allowedWorkspaceTools?:
defaultModelId?:
maxSteps?:
stopWhen?:
forked?:
gateways?:
omConfig?:
disableBuiltinTools?:
toolCategoryResolver?:
pubsub?:
threadLock?:
observability?:
PropriétésLien direct vers Propriétés
id:
MéthodesLien direct vers Méthodes
SessionsLien direct vers Sessions
createSession(options)Lien direct vers createsessionoptions
Obtient ou crée la session active enregistrée pour la paire (resourceId, scope). Appelez init() avant cette méthode.
const session = await controller.createSession({
resourceId: 'project-42',
scope: 'editor-window-1',
threadId: 'thread-7',
})
Les mêmes resourceId et scope renvoient la même instance de Session. Un scope différent crée une session isolée pour la même ressource. Lorsque threadId est fourni, la méthode bascule une session mise en cache vers ce thread ou crée le thread s’il n’existe pas.
resourceId?:
resourceId configuré ou l’id du contrôleur.scope?:
threadId?:
id?:
id du contrôleur.ownerId?:
id.workspace?:
browser?:
requestContext?:
Renvoie : Promise<Session<TState>>
getSessionByResource(resourceId, scope?)Lien direct vers getsessionbyresourceresourceid-scope
Renvoie la session active enregistrée pour une ressource et, facultativement, un scope.
const session = await controller.getSessionByResource('project-42', 'editor-window-1')
Renvoie : Promise<Session<TState> | undefined>
setResourceId(session, { resourceId })Lien direct vers setresourceidsession--resourceid-
Déplace une session active vers une autre ressource et supprime son association au thread actif.
await controller.setResourceId(session, { resourceId: 'project-43' })
getKnownResourceIds(session)Lien direct vers getknownresourceidssession
Répertorie les identifiants de ressources présents dans les threads stockés.
const resourceIds = await controller.getKnownResourceIds(session)
Renvoie : Promise<string[]>
Cycle de vieLien direct vers Cycle de vie
init()Lien direct vers init
Initialise le stockage partagé, les services du Workspace et les gestionnaires périodiques configurés. Les appels répétés réutilisent la même promesse d’initialisation.
await controller.init()
destroy()Lien direct vers destroy
Arrête les gestionnaires périodiques appartenant au contrôleur. Cette opération ne détruit pas les Sessions créées par le contrôleur.
await controller.destroy()
Modes et AgentsLien direct vers Modes et Agents
listModes()Lien direct vers listmodes
Renvoie les définitions des modes configurés.
const modes = controller.listModes()
Renvoie : AgentControllerMode[]
getCurrentAgent(session)Lien direct vers getcurrentagentsession
Renvoie l’Agent sous-jacent du mode actif de la session.
const agent = controller.getCurrentAgent(session)
Renvoie : Agent
Workspace et navigateurLien direct vers Workspace et navigateur
hasWorkspace()Lien direct vers hasworkspace
Indique si le contrôleur possède une configuration de Workspace statique, dynamique ou fondée sur un objet.
if (controller.hasWorkspace()) {
console.log('Workspace configured')
}
Renvoie : boolean
isWorkspaceReady()Lien direct vers isworkspaceready
Indique si le Workspace au niveau du contrôleur est prêt.
const ready = controller.isWorkspaceReady()
Renvoie : boolean
getWorkspace()Lien direct vers getworkspace
Renvoie un Workspace statique du contrôleur. Les fabriques dynamiques de Workspace renvoient undefined jusqu’à leur résolution.
const workspace = controller.getWorkspace()
Renvoie : Workspace | undefined
resolveWorkspace({ session, requestContext? })Lien direct vers resolveworkspace-session-requestcontext-
Résout un Workspace dynamique pour une session et met le résultat en cache dans le contrôleur.
const workspace = await controller.resolveWorkspace({ session, requestContext })
Renvoie : Promise<Workspace | undefined>
setBrowser(browser)Lien direct vers setbrowserbrowser
Remplace le navigateur du contrôleur et le propage aux Agents sous-jacents.
controller.setBrowser(browser)
Mastra et canauxLien direct vers Mastra et canaux
getMastra()Lien direct vers getmastra
Renvoie l’instance Mastra parente ou l’instance interne créée par init().
const mastra = controller.getMastra()
Renvoie : Mastra | undefined
getChannels()Lien direct vers getchannels
Renvoie l’intégration configurée des canaux de chat.
const channels = controller.getChannels()
Renvoie : AgentControllerChannels | null
ModèlesLien direct vers Modèles
getCurrentModelAuthStatus(session)Lien direct vers getcurrentmodelauthstatussession
Renvoie l’état d’authentification du modèle sélectionné pour la session.
const status = await controller.getCurrentModelAuthStatus(session)
Renvoie : Promise<ModelAuthStatus>
listAvailableModels()Lien direct vers listavailablemodels
Répertorie les modèles issus des passerelles configurées et intégrées. Les résultats sont brièvement mis en cache et triés selon les données d’utilisation lorsque modelUseCountProvider est configuré.
const models = await controller.listAvailableModels()
Renvoie : Promise<AvailableModel[]>
invalidateAvailableModelsCache()Lien direct vers invalidateavailablemodelscache
Vide le cache des modèles disponibles.
controller.invalidateAvailableModelsCache()
Mémoire observationnelle et autorisationsLien direct vers Mémoire observationnelle et autorisations
loadOMProgress(session)Lien direct vers loadomprogresssession
Charge la progression stockée de la mémoire observationnelle pour le thread actif et émet un événement om_status.
await controller.loadOMProgress(session)
getObservationalMemoryRecord(session)Lien direct vers getobservationalmemoryrecordsession
Renvoie l’enregistrement de mémoire observationnelle du thread actif.
const record = await controller.getObservationalMemoryRecord(session)
Renvoie : Promise<ObservationalMemoryRecord | null>
getToolCategory({ toolName })Lien direct vers gettoolcategory-toolname-
Résout la catégorie d’autorisation d’un outil.
const category = controller.getToolCategory({ toolName: 'execute_command' })
Renvoie : ToolCategory | null
IntervallesLien direct vers Intervalles
registerInterval(handler)Lien direct vers registerintervalhandler
Démarre ou remplace un gestionnaire périodique.
controller.registerInterval({
id: 'refresh',
intervalMs: 60_000,
handler: async () => refreshData(),
})
removeInterval({ id })Lien direct vers removeinterval-id-
Arrête un intervalle et exécute sa fonction de rappel d’arrêt facultative.
await controller.removeInterval({ id: 'refresh' })
stopIntervals()Lien direct vers stopintervals
Arrête tous les intervalles et exécute leurs fonctions de rappel d’arrêt facultatives.
await controller.stopIntervals()