Classe Workspace
Ajouté dans : @mastra/core@1.1.0
La classe Workspace combine un système de fichiers et une Sandbox afin de fournir aux Agents des fonctionnalités de stockage de fichiers et d'exécution de commandes. Elle prend également en charge la recherche BM25 et vectorielle dans le contenu indexé.
Exemple d'utilisationLien direct vers Exemple d'utilisation
import { Workspace, LocalFilesystem, LocalSandbox } from '@mastra/core/workspace'
const workspace = new Workspace({
id: 'my-workspace',
name: 'My Workspace',
filesystem: new LocalFilesystem({
basePath: './workspace',
}),
sandbox: new LocalSandbox({
workingDirectory: './workspace',
}),
bm25: true,
autoIndexPaths: ['docs'],
})
Paramètres du constructeurLien direct vers Paramètres du constructeur
id?:
name?:
filesystem?:
requestContext et renvoie un système de fichiers par requête. Consultez la section Système de fichiers dynamique.sandbox?:
requestContext et renvoie une Sandbox par requête. Consultez la section Sandbox dynamique.instructions.dynamicSandbox?:
sandbox fondée sur une fonction de résolution contribue aux instructions du Workspace. 'placeholder' (par défaut) émet un texte stable sans appeler la fonction. 'resolve' l'appelle et utilise les propres instructions de la Sandbox. Une fonction renvoie un texte personnalisé sans effectuer de résolution. Sans effet sur une Sandbox statique.sandboxCacheKey?:
sandbox fondée sur une fonction de résolution. Lorsqu'elle est définie, les Sandboxes résolues sont mémorisées par clé plutôt que par instance de RequestContext, afin que les Tools de processus en arrière-plan accèdent à la même Sandbox lors des requêtes suivantes. Sans effet sur une Sandbox statique.bm25?:
vectorStore?:
embedder?:
vectorStore est défini. Accepte une fonction pour un texte unique (text: string) => Promise<number[]> ou une fonction compatible avec les lots (texts: string[]) => Promise<number[][]> dotée d'une propriété batch: true et d'un maxBatchSize facultatif. Consultez la section Embedding par lots.autoIndexPaths?:
skills?:
skillSource?:
onMount?:
searchIndexName?:
tools?:
enabled?:
requireApproval?:
name?:
mastra_workspace_*. La clé de configuration doit toujours utiliser la constante WORKSPACE_TOOLS d’origine.requireReadBeforeWrite?:
maxOutputTokens?:
writeLockTimeoutMs?:
hooks?:
operationTimeout?:
Configuration des ToolsLien direct vers Configuration des Tools
L'option tools accepte un objet WorkspaceToolsConfig qui contrôle les Tools du Workspace activés et leurs paramètres de sécurité.
import { Workspace } from '@mastra/core/workspace'
import { WORKSPACE_TOOLS } from '@mastra/core/workspace'
const workspace = new Workspace({
id: 'my-workspace',
name: 'My Workspace',
tools: {
// Global defaults (apply to all tools)
enabled: true,
requireApproval: false,
// Per-tool overrides using WORKSPACE_TOOLS constants
[WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE]: {
requireApproval: true,
},
},
})
L'objet de configuration comporte deux parties :
- Valeurs globales par défaut (
enabled,requireApproval) : s'appliquent à tous les Tools sauf remplacement - Remplacements propres aux Tools - Utilisez les constantes
WORKSPACE_TOOLScomme clés pour configurer chaque Tool
Consultez la présentation de Workspace pour découvrir d'autres exemples.
Remappage des noms de ToolsLien direct vers Remappage des noms de Tools
Renommez les Tools du Workspace en définissant la propriété name dans leur configuration individuelle. La clé de configuration reste la constante d'origine : seul le nom exposé à l'Agent change.
import { Workspace } from '@mastra/core/workspace'
import { WORKSPACE_TOOLS } from '@mastra/core/workspace'
const workspace = new Workspace({
id: 'my-workspace',
name: 'My Workspace',
tools: {
[WORKSPACE_TOOLS.FILESYSTEM.READ_FILE]: { name: 'view' },
[WORKSPACE_TOOLS.FILESYSTEM.GREP]: { name: 'search_content' },
},
})
Les noms doivent être uniques parmi tous les Tools du Workspace. Définir un nom personnalisé qui entre en conflit avec le nom par défaut ou personnalisé d'un autre Tool lève une erreur.
Hooks des ToolsLien direct vers Hooks des Tools
Définissez tools.hooks pour exécuter une logique avant et après chaque appel de Tool activé du Workspace. Les hooks sont exécutés après le remappage des noms ; le contexte inclut donc le toolName exposé et le workspaceToolName d'origine.
import { Workspace } from '@mastra/core/workspace'
const workspace = new Workspace({
id: 'my-workspace',
tools: {
hooks: {
beforeToolCall: ({ toolName, workspaceToolName, input }) => {
console.log(`Running ${toolName} (${workspaceToolName})`, input)
},
afterToolCall: ({ toolName, output, error }) => {
console.log(`Finished ${toolName}`, { output, error })
},
},
},
})
beforeToolCall?:
{ toolName, workspaceToolName, input, context }. Renvoyez { proceed: false, output } pour ignorer l'appel du Tool et utiliser output comme résultat.afterToolCall?:
{ toolName, workspaceToolName, input, context, output, error }. Lorsque le Tool lève une erreur, output vaut undefined et error est défini à la place.Si l'Agent propriétaire définit également des hooks de Tool, les hooks du Workspace s'exécutent dans le wrapper de hooks de l'Agent. L'ordre est le suivant : beforeToolCall de l'Agent → beforeToolCall du Workspace → Tool → afterToolCall du Workspace → afterToolCall de l'Agent.
PropriétésLien direct vers Propriétés
id:
name:
status:
filesystem:
undefined lorsqu’une fonction de résolution est configurée — utilisez hasFilesystemConfig() pour vérifier sa disponibilité.sandbox:
undefined lorsqu’une fonction de résolution est configurée — utilisez hasSandboxConfig() pour vérifier sa disponibilité.skills:
canBM25:
canVector:
canHybrid:
MéthodesLien direct vers Méthodes
Cycle de vieLien direct vers Cycle de vie
init()Lien direct vers init
Initialise le Workspace et prépare les ressources.
await workspace.init()
Dans la plupart des cas, l'appel à init() est facultatif :
- Sandbox : démarre automatiquement lors du premier appel à
executeCommand(). Utilisezinit()pour éviter la latence de la première commande. - Système de fichiers : crée le répertoire de base et exécute toute configuration propre au Provider. Certains Providers créent automatiquement le répertoire lors de la première opération.
- Recherche : obligatoire uniquement si vous utilisez
autoIndexPathspour l'indexation automatique.
L'initialisation effectue les opérations suivantes :
- Démarre le Provider du système de fichiers (crée le répertoire de base si nécessaire)
- Démarre le Provider de la Sandbox (crée le répertoire de travail et configure l'isolation, le cas échéant)
- Indexe les fichiers de
autoIndexPathspour la recherche
destroy()Lien direct vers destroy
Détruit le Workspace et libère les ressources.
await workspace.destroy()
destroy() ferme dans l'ordre les ressources appartenant au Workspace : serveurs de langage, Browsers, Providers de Sandbox et Providers de système de fichiers. Elle efface également les références de Sandbox mises en cache.
Appelez destroy() lorsque votre application a terminé d'utiliser un Workspace. mastra.shutdown() l'appelle pour les Workspaces enregistrés lors de l'arrêt. Pour retirer un Workspace du registre Mastra, utilisez mastra.removeWorkspace().
LocalFilesystem.destroy() ne supprime pas les fichiers du disque. Les Providers de système de fichiers et de Sandbox fondés sur une fonction de résolution appartiennent à votre application, qui doit les nettoyer.
Opérations de rechercheLien direct vers Opérations de recherche
index(path, content, options?)Lien direct vers indexpath-content-options
Indexe le contenu pour la recherche.
await workspace.index('/docs/guide.md', 'Guide content...')
search(query, options?)Lien direct vers searchquery-options
Recherche dans le contenu indexé.
const results = await workspace.search('password reset', {
topK: 10,
mode: 'hybrid',
})
UtilitairesLien direct vers Utilitaires
getInfo()Lien direct vers getinfo
Récupère les informations du Workspace.
const info = await workspace.getInfo()
// { id, name, status, createdAt, lastAccessedAt, filesystem?, sandbox? }
Transmettez resolveDynamicProviders: false pour signaler les Providers fondés sur une fonction de résolution comme définis à l'exécution, sans invoquer celle-ci.
const info = await workspace.getInfo({ resolveDynamicProviders: false })
Paramètres :
options.includeFileCount?:
options.requestContext?:
resolveDynamicProviders est activé.options.resolveDynamicProviders?:
false si vous avez uniquement besoin des métadonnées et souhaitez que les Providers fondés sur une fonction soient signalés comme dynamic.getInstructions(opts?)Lien direct vers getinstructionsopts
Renvoie les instructions combinées des Providers du système de fichiers et de la Sandbox. Elles sont injectées dans le message système de l'Agent afin de l'aider à comprendre le contexte d'exécution.
const instructions = workspace.getInstructions()
Transmettez requestContext afin d'activer la personnalisation par requête lorsque l'option instructions d'un Provider est une fonction :
const instructions = workspace.getInstructions({ requestContext })
Paramètres :
opts.requestContext?:
instructions du Provider de système de fichiers ou de Sandbox, si elle est configurée.Renvoie : string
getInstructionsAsync(opts?)Lien direct vers getinstructionsasyncopts
Renvoie les instructions combinées du Workspace. Utilisez cette méthode lorsque le Workspace emploie des Providers fondés sur une fonction de résolution. Un système de fichiers défini à l'exécution est résolu par requête ; une Sandbox définie à l'exécution fournit un texte d'espace réservé stable, sauf si instructions.dynamicSandbox vaut 'resolve'.
const instructions = await workspace.getInstructionsAsync({ requestContext })
Paramètres :
opts.requestContext?:
instructions.dynamicSandbox vaut 'resolve'.Renvoie : Promise<string>
Pour remplacer la sortie par défaut, transmettez une option instructions à LocalFilesystem ou LocalSandbox.
getToolsConfig()Lien direct vers gettoolsconfig
Récupère la configuration actuelle des Tools.
const config = workspace.getToolsConfig()
Renvoie : WorkspaceToolsConfig | undefined
setToolsConfig(config?)Lien direct vers settoolsconfigconfig
Remplace à l'exécution la configuration propre aux Tools. Il s'agit d'un remplacement complet : elle n'est pas fusionnée avec la configuration précédente. Transmettez undefined pour rétablir les valeurs par défaut. Les modifications prennent effet lors de l'interaction suivante avec l'Agent, c'est-à-dire au prochain appel à createWorkspaceTools().
import { WORKSPACE_TOOLS } from '@mastra/core/workspace'
// Disable write tools for read-only mode
workspace.setToolsConfig({
[WORKSPACE_TOOLS.FILESYSTEM.WRITE_FILE]: { enabled: false },
[WORKSPACE_TOOLS.FILESYSTEM.EDIT_FILE]: { enabled: false },
})
// Reset to defaults
workspace.setToolsConfig(undefined)
Paramètres :
config?:
Système de fichiers dynamiqueLien direct vers Système de fichiers dynamique
hasFilesystemConfig()Lien direct vers hasfilesystemconfig
Vérifie si un système de fichiers est configuré, comme instance statique ou fonction de résolution. Utilisez cette méthode plutôt que de vérifier directement workspace.filesystem, car un Workspace fondé sur une fonction de résolution renvoie undefined depuis la propriété filesystem.
if (workspace.hasFilesystemConfig()) {
// Filesystem tools are available
}
Renvoie : boolean
resolveFilesystem({ requestContext })Lien direct vers resolvefilesystem-requestcontext-
Résout le système de fichiers pour un contexte de requête. Lorsqu'une fonction de résolution est configurée, l'appelle avec le requestContext fourni. Lorsqu'un système de fichiers statique est configuré, le renvoie directement. Renvoie undefined si aucun système de fichiers n'est configuré.
import { RequestContext } from '@mastra/core/request-context'
const ctx = new RequestContext([['agent-role', 'admin']])
const fs = await workspace.resolveFilesystem({ requestContext: ctx })
Paramètres :
requestContext:
Renvoie : Promise<WorkspaceFilesystem | undefined>
Sandbox dynamiqueLien direct vers Sandbox dynamique
hasSandboxConfig()Lien direct vers hassandboxconfig
Vérifie si une Sandbox est configurée, comme instance statique ou fonction de résolution. Utilisez cette méthode plutôt que de vérifier directement workspace.sandbox, car un Workspace fondé sur une fonction de résolution renvoie undefined depuis la propriété sandbox.
if (workspace.hasSandboxConfig()) {
// Sandbox tools are available
}
Renvoie : boolean
resolveSandbox({ requestContext })Lien direct vers resolvesandbox-requestcontext-
Résout la Sandbox pour un contexte de requête. Lorsqu'une fonction de résolution est configurée, l'appelle avec le requestContext fourni. Lorsqu'une Sandbox statique est configurée, la renvoie directement. Renvoie undefined si aucune Sandbox n'est configurée.
import { RequestContext } from '@mastra/core/request-context'
const ctx = new RequestContext([['user-id', 'alice']])
const sandbox = await workspace.resolveSandbox({ requestContext: ctx })
Paramètres :
requestContext:
Renvoie : Promise<WorkspaceSandbox | undefined>
clearSandboxCache(cacheKey?)Lien direct vers clearsandboxcachecachekey
Efface les Sandboxes fondées sur une fonction de résolution mises en cache par sandboxCacheKey. Transmettez une clé de cache pour effacer une entrée, ou omettez-la pour effacer toutes les entrées de Sandbox associées à une clé.
Cette méthode n'efface pas le cache faible propre à chaque RequestContext. Ces entrées sont gérées par le garbage collector.
Le Workspace ne possède pas les Sandboxes renvoyées par une fonction de résolution. Cette méthode supprime uniquement les références du Workspace. Détruisez la Sandbox dans votre propre code de cycle de vie.
workspace.clearSandboxCache('thread-123')
workspace.clearSandboxCache()
Paramètres :
cacheKey?:
Renvoie : void
Tools des AgentsLien direct vers Tools des Agents
Un Workspace fournit des Tools aux Agents selon sa configuration.
Tools du système de fichiersLien direct vers Tools du système de fichiers
Ajoutés lorsqu'un système de fichiers est configuré :
| Tool | Description |
|---|---|
mastra_workspace_read_file | Lit le contenu d'un fichier. Les fichiers texte sont renvoyés comme texte (avec une plage de lignes facultative). Les images et PDF sont renvoyés comme éléments multimédias natifs que le modèle peut consulter directement. Les autres fichiers binaires renvoient uniquement leurs métadonnées, sauf si un encoding explicite est transmis. |
mastra_workspace_write_file | Crée ou écrase un fichier avec un nouveau contenu. Crée automatiquement les répertoires parents. |
mastra_workspace_edit_file | Modifie un fichier existant en recherchant et en remplaçant du texte. Utile pour des modifications ciblées sans réécrire tout le fichier. |
mastra_workspace_list_files | Répertorie le contenu d'un répertoire sous forme d'arborescence. Prend en charge la liste récursive avec limites de profondeur, les motifs glob et le filtrage .gitignore (activé par défaut). |
mastra_workspace_delete | Supprime un fichier ou un répertoire. Prend en charge la suppression récursive des répertoires. |
mastra_workspace_file_stat | Récupère les métadonnées d'un fichier ou d'un répertoire, notamment sa taille, son type et sa date de modification. |
mastra_workspace_mkdir | Crée un répertoire. Crée automatiquement les répertoires parents s'ils n'existent pas. |
mastra_workspace_grep | Recherche dans le contenu des fichiers au moyen de motifs regex. Prend en charge le filtrage glob, les lignes de contexte et la recherche insensible à la casse. |
Avec un système de fichiers statique, les Tools d'écriture (write_file, edit_file, delete, mkdir) sont exclus lorsque celui-ci est en lecture seule. Avec un système de fichiers défini à l'exécution, ils sont toujours inclus et la lecture seule est appliquée à l'exécution.
Le Tool read_file accepte les options mediaTypes et maxMediaBytes afin de contrôler les types MIME exposés au modèle comme éléments multimédias natifs et la taille maximale de ces fichiers :
mediaTypes?:
['image/*'], une fonction de prédicat personnalisée ou false pour désactiver la détection des médias. Utilise par défaut l'intersection des formats d'image sûrs pour tous les Providers, ainsi que PDF. S'applique uniquement lorsque l'appelant ne transmet pas d'encoding explicite.maxMediaBytes?:
const workspace = new Workspace({
filesystem: new LocalFilesystem({ basePath: './workspace' }),
tools: {
[WORKSPACE_TOOLS.FILESYSTEM.READ_FILE]: {
// Broaden to any image (including SVG, BMP, HEIC) — may fail on some providers
mediaTypes: ['image/*'],
// Raise the inline-media cap to 25 MiB
maxMediaBytes: 25 * 1024 * 1024,
},
},
})
Tools de la SandboxLien direct vers Tools de la Sandbox
Ajoutés lorsqu'une Sandbox est configurée :
| Tool | Description |
|---|---|
mastra_workspace_execute_command | Exécute une commande shell. Renvoie stdout, stderr et le code de sortie. Lorsque la Sandbox possède un gestionnaire de processus, accepte background: true pour lancer un processus de longue durée et renvoyer un PID. |
mastra_workspace_get_process_output | Récupère stdout, stderr et l'état d'un processus en arrière-plan à partir de son PID. Accepte tail pour limiter les lignes de sortie et wait: true pour bloquer jusqu'à la fin. Disponible uniquement lorsque la Sandbox possède un gestionnaire de processus. |
mastra_workspace_kill_process | Arrête un processus en arrière-plan à partir de son PID. Renvoie les 50 dernières lignes de sortie. Disponible uniquement lorsque la Sandbox possède un gestionnaire de processus. |
Avec une Sandbox statique, les vérifications de fonctionnalités (executeCommand, processes) déterminent les variantes de Tools exposées. Avec une Sandbox définie à l'exécution, tous les Tools de Sandbox sont enregistrés et l'exécution lève une erreur explicite si la Sandbox résolue n'implémente pas la fonctionnalité demandée.
Le Tool execute_command accepte une option backgroundProcesses pour les callbacks de cycle de vie des processus en arrière-plan :
backgroundProcesses?:
onStdout?:
onStderr?:
onExit?:
abortSignal?:
Consultez les callbacks des processus en arrière-plan pour découvrir des exemples d'utilisation.
Tools de rechercheLien direct vers Tools de recherche
Ajoutés lorsque la recherche BM25 ou vectorielle est configurée :
| Tool | Description |
|---|---|
mastra_workspace_search | Recherche dans le contenu indexé au moyen d'une recherche par mots-clés (BM25), sémantique (vectorielle) ou hybride. Renvoie des résultats classés avec leurs scores. |
mastra_workspace_index | Indexe le contenu pour la recherche. Associe le contenu à un chemin pour une récupération ultérieure. |
Le Tool index est exclu lorsque le système de fichiers est en lecture seule.
Tools des SkillsLien direct vers Tools des Skills
Ajoutés lorsque des Skills sont configurés :
| Tool | Description |
|---|---|
skill | Active un Skill à partir de son nom ou de son chemin. Renvoie toutes les instructions, références, scripts et ressources du Skill. |
skill_search | Recherche dans le contenu des Skills. Accepte une liste facultative de noms de Skills à filtrer et un paramètre topK. |
skill_read | Lit un fichier précis (référence, script ou ressource) dans le répertoire d'un Skill. |
Lorsque plusieurs Skills portent le même nom, list() les renvoie tous. get() avec un nom applique un départage (local > géré > externe). Si deux Skills partagent le même nom et le même type de source, get() lève une erreur. Transmettez le chemin complet d'un Skill à get() pour contourner le départage. Consultez la section Skills portant le même nom pour plus de détails.