PlatformFilesystem
Stocke des fichiers dans le bucket d'un Workspace Mastra Platform. Chaque environnement Mastra Platform peut posséder un bucket, et PlatformFilesystem fournit aux Agents les opérations read, write, list, delete et move sur celui-ci.
Providers associés : S3Filesystem pour un accès direct à S3, LocalFilesystem pour les répertoires locaux.
Pour en savoir plus sur l'interface, consultez l'interface WorkspaceFilesystem.
InstallationLien direct vers Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/platform-workspace
pnpm add @mastra/platform-workspace
yarn add @mastra/platform-workspace
bun add @mastra/platform-workspace
Configurez les identifiants de la plateforme. Le token d'accès, l'identifiant du projet et le nom du bucket utilisent par défaut des variables d'environnement. Un déploiement Mastra Platform peut donc n'utiliser aucune option du constructeur.
- Fichier .env
- Constructeur
MASTRA_PLATFORM_ACCESS_TOKEN=your-platform-access-token
MASTRA_PROJECT_ID=your-project-id
MASTRA_PLATFORM_BUCKET_NAME=your-bucket-name
new PlatformFilesystem({
accessToken: 'your-platform-access-token',
projectId: 'your-project-id',
bucketName: 'your-bucket-name',
})
Dans un déploiement Mastra Platform, MASTRA_PLATFORM_ACCESS_TOKEN, MASTRA_PROJECT_ID et MASTRA_PLATFORM_BUCKET_NAME sont injectés automatiquement ; le constructeur peut donc être appelé sans options. Pour le développement local, MASTRA_PLATFORM_ACCESS_TOKEN peut contenir un token d'API sk_ provenant de la section Tokens d'API de la page des paramètres de votre organisation.
UtilisationLien direct vers Utilisation
Ajoutez un PlatformFilesystem à un Workspace et attribuez-le à un Agent :
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { PlatformFilesystem } from '@mastra/platform-workspace'
const workspace = new Workspace({
filesystem: new PlatformFilesystem({
// accessToken, projectId, bucketName all fall back to env vars
}),
})
const agent = new Agent({
id: 'file-agent',
name: 'File Agent',
instructions: 'You are a research assistant that reads and writes reports.',
model: 'anthropic/claude-sonnet-4-6',
workspace,
})
Lecture et écriture de fichiersLien direct vers Lecture et écriture de fichiers
Les clés des objets sont encodées en pourcentage par segment. Les noms de fichiers contenant ?, #, %, &, + ou des espaces sont donc préservés de bout en bout :
const fs = new PlatformFilesystem()
await fs.writeFile('/analyses/repo.md', markdown)
const content = await fs.readFile('/analyses/repo.md')
const entries = await fs.readdir('/analyses')
await fs.moveFile('/analyses/repo.md', '/analyses/repo-final.md')
Mode lecture seuleLien direct vers Mode lecture seule
Transmettez readOnly: true pour monter le bucket en lecture seule. Tout appel de modification lève WorkspaceReadOnlyError :
const fs = new PlatformFilesystem({ readOnly: true })
await fs.readFile('/analyses/repo.md') // ok
await fs.writeFile('/analyses/repo.md', 'x') // throws WorkspaceReadOnlyError
Sémantique de remplacementLien direct vers Sémantique de remplacement
writeFile prend en charge overwrite: false et lève FileExistsError lorsque la destination existe déjà.
copyFile et moveFile remplacent toujours la destination. La transmission de overwrite: false à l'une de ces méthodes lève une erreur au lieu de remplacer silencieusement la destination.
Ajout à des fichiersLien direct vers Ajout à des fichiers
appendFile est une opération de lecture-modification-écriture qui n'est pas atomique. Des ajouts simultanés au même chemin peuvent s'écraser mutuellement. Pour les écritures simultanées, utilisez writeFile avec des clés distinctes.
Paramètres du constructeurLien direct vers Paramètres du constructeur
accessToken?:
projectId?:
bucketName?:
readOnly?:
displayName?:
description?:
icon?:
instructions?:
id?:
fetch?:
PropriétésLien direct vers Propriétés
id:
name:
provider:
readOnly:
ErreursLien direct vers Erreurs
Les erreurs propres au système de fichiers correspondent aux types d'erreurs standard du Workspace :
FileNotFoundError: le chemin n'existe pas. Levée parreadFile,statetdeleteFile(sauf siforce: trueest défini).FileExistsError:writeFilea été appelé avecoverwrite: falsealors que la destination existe déjà.WorkspaceReadOnlyError: un appel de modification a été effectué sur un système de fichiers en lecture seule.
Les autres échecs de l'API Platform lèvent PlatformApiError. Les réponses structurées { error: { message, type } } sont analysées dans .code (type lisible par une machine) et .proxyMessage (chaîne lisible par les utilisateurs) :
import { FileNotFoundError } from '@mastra/core/workspace'
import { PlatformApiError } from '@mastra/platform-workspace'
try {
await fs.readFile('/missing.txt')
} catch (err) {
if (err instanceof FileNotFoundError) {
// handle missing file
} else if (err instanceof PlatformApiError) {
if (err.code === 'authentication_error') {
// refresh token
}
console.error(err.status, err.code, err.proxyMessage)
}
}
FileNotFoundError, FileExistsError et WorkspaceReadOnlyError sont des réexportations des types d'erreurs standard du Workspace provenant de @mastra/core/workspace. PlatformApiError est propre à @mastra/platform-workspace.
code et proxyMessage valent undefined lorsque le corps de la réponse n'est pas au format JSON, par exemple pour une réponse HTML 502 provenant d'un répartiteur de charge.