MesaFilesystem
Stocke les fichiers du Workspace dans des dépôts Mesa au moyen de l’interface Mastra standard WorkspaceFilesystem.
Utilisez MesaFilesystem lorsque des Agents ont besoin d’un stockage de fichiers versionné. Pour un répertoire local, utilisez LocalFilesystem. Pour le stockage d’objets, utilisez S3Filesystem, GCSFilesystem ou AzureBlobFilesystem.
MesaFilesystem s’exécute dans le processus Mastra.
Le montage POSIX de Mesa (permettant d’utiliser un système de fichiers Mesa dans un Sandbox) ne fait pas encore partie du package @mastra/mesa. Sa prise en charge sera bientôt disponible.
InstallationLien direct vers Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/mesa
pnpm add @mastra/mesa
yarn add @mastra/mesa
bun add @mastra/mesa
Exemple d’utilisationLien direct vers Exemple d’utilisation
Montez un dépôt Mesa et transmettez le système de fichiers à un Workspace :
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { MesaFilesystem } from '@mastra/mesa'
const workspace = new Workspace({
filesystem: new MesaFilesystem({
apiKey: process.env.MESA_API_KEY,
org: 'acme',
repos: [{ name: 'docs', bookmark: 'main' }],
}),
})
const agent = new Agent({
id: 'file-agent',
name: 'file-agent',
model: 'anthropic/claude-opus-4-7',
workspace,
})
Lorsque apiKey est omis, MESA_API_KEY est utilisée comme valeur de repli.
Paramètres du constructeurLien direct vers Paramètres du constructeur
apiKey?:
MESA_API_KEY est utilisée comme valeur de repli.org?:
repos:
cache?:
ttl?:
readOnly?:
PropriétésLien direct vers Propriétés
id:
name:
'MesaFilesystem').provider:
'mesa').readOnly:
client:
filesystem:
change:
bookmark:
MéthodesLien direct vers Méthodes
MesaFilesystem implémente l’interface WorkspaceFilesystem.
Opérations sur les fichiersLien direct vers Opérations sur les fichiers
readFile(path, options?)Lien direct vers readfilepath-options
Lit un fichier depuis Mesa.
const content = await filesystem.readFile('/acme/docs/README.md', {
encoding: 'utf-8',
})
Renvoie : Promise<string | Buffer>
writeFile(path, content, options?)Lien direct vers writefilepath-content-options
Écrit un fichier dans Mesa.
await filesystem.writeFile('/acme/docs/report.md', '# Report')
Renvoie : Promise<void>
appendFile(path, content)Lien direct vers appendfilepath-content
Ajoute du contenu à la fin d’un fichier.
await filesystem.appendFile('/acme/docs/log.txt', 'new line\n')
Renvoie : Promise<void>
deleteFile(path, options?)Lien direct vers deletefilepath-options
Supprime un fichier.
await filesystem.deleteFile('/acme/docs/old-report.md')
Renvoie : Promise<void>
copyFile(src, dest, options?)Lien direct vers copyfilesrc-dest-options
Copie un fichier.
await filesystem.copyFile('/acme/docs/report.md', '/acme/docs/archive/report.md')
Renvoie : Promise<void>
moveFile(src, dest, options?)Lien direct vers movefilesrc-dest-options
Déplace ou renomme un fichier.
await filesystem.moveFile('/acme/docs/draft.md', '/acme/docs/final.md')
Renvoie : Promise<void>
Opérations sur les répertoiresLien direct vers Opérations sur les répertoires
mkdir(path, options?)Lien direct vers mkdirpath-options
Crée un répertoire.
await filesystem.mkdir('/acme/docs/reports', { recursive: true })
Renvoie : Promise<void>
rmdir(path, options?)Lien direct vers rmdirpath-options
Supprime un répertoire.
await filesystem.rmdir('/acme/docs/reports', { recursive: true })
Renvoie : Promise<void>
readdir(path, options?)Lien direct vers readdirpath-options
Répertorie les entrées d’un répertoire.
const entries = await filesystem.readdir('/acme/docs', {
recursive: true,
extension: '.md',
})
Renvoie : Promise<FileEntry[]>
Opérations sur les cheminsLien direct vers Opérations sur les chemins
exists(path)Lien direct vers existspath
Vérifie si un chemin existe.
const exists = await filesystem.exists('/acme/docs/README.md')
Renvoie : Promise<boolean>
stat(path)Lien direct vers statpath
Renvoie les métadonnées d’un fichier ou d’un répertoire.
const stat = await filesystem.stat('/acme/docs/README.md')
Renvoie : Promise<FileStat>
realpath(path)Lien direct vers realpathpath
Renvoie le chemin canonique fourni par Mesa.
const realPath = await filesystem.realpath('/acme/docs/README.md')
Renvoie : Promise<string>
Opérations MesaLien direct vers Opérations Mesa
bash(options?)Lien direct vers bashoptions
Crée un environnement d’exécution Bash reposant sur Mesa pour ce système de fichiers.
const bash = await filesystem.bash({
cwd: '/acme/docs',
})
Renvoie : Promise<Bash>
Sémantique des cheminsLien direct vers Sémantique des chemins
Les méthodes attendent des chemins absolus. Pour MesaFilesystem, les chemins ont pour racine le montage Mesa et doivent inclure le slug de l’organisation ainsi que le nom du dépôt :
await filesystem.readFile('/acme/docs/README.md')
N’omettez pas la barre oblique initiale :
await filesystem.readFile('acme/docs/README.md') // Incorrect
await filesystem.readFile('/acme/docs/README.md') // Correct
L’organisation provient de org dans le constructeur ou, lorsque org est omis, de l’inférence de l’organisation par défaut du SDK Mesa. Elle reste le premier segment du chemin.
Lorsque vous montez plusieurs dépôts, chacun d’eux est disponible sous le segment de l’organisation :
const filesystem = new MesaFilesystem({
org: 'acme',
repos: [
{ name: 'docs', bookmark: 'main' },
{ name: 'website', bookmark: 'main' },
],
})
await filesystem.readFile('/acme/docs/README.md')
await filesystem.readFile('/acme/website/package.json')
API de versionnement MesaLien direct vers API de versionnement Mesa
Accédez au système de fichiers Mesa sous-jacent pour effectuer les opérations de changement et de signet propres à Mesa :
await filesystem.writeFile('/acme/docs/draft.md', 'Draft')
const current = await filesystem.change.current({
repo: 'docs',
})
await filesystem.bookmark.move({
repo: 'docs',
name: 'main',
changeId: current.changeId,
})
Pour en savoir plus sur la sémantique du versionnement, consultez la documentation de Mesa.
Mode lecture seuleLien direct vers Mode lecture seule
Définissez readOnly: true pour bloquer les opérations d’écriture via Mastra :
const filesystem = new MesaFilesystem({
repos: [{ name: 'docs', bookmark: 'main' }],
readOnly: true,
})
Les opérations de lecture continuent de fonctionner. Les opérations d’écriture déclenchent WorkspaceReadOnlyError.
Accès concurrentLien direct vers Accès concurrent
overwrite: false et expectedMtime utilisent des vérifications préalables avant l’écriture. Ces vérifications ne sont pas atomiques, sauf si Mesa ajoute des écritures conditionnelles natives pour les montages d’application.