GoogleDriveFilesystem
Stocke les fichiers dans un seul dossier Google Drive. Chaque répertoire correspond à un dossier Drive sous la racine configurée, et les chemins respectent la sémantique POSIX, par exemple /notes/todo.txt. Pour en savoir plus sur l’interface, consultez l’interface WorkspaceFilesystem.
InstallationLien direct vers Installation
- npm
- pnpm
- Yarn
- Bun
npm install @mastra/google-drive
pnpm add @mastra/google-drive
yarn add @mastra/google-drive
bun add @mastra/google-drive
UtilisationLien direct vers Utilisation
Ajoutez un GoogleDriveFilesystem à un Workspace et attribuez-le à un Agent :
import { Agent } from '@mastra/core/agent'
import { Workspace } from '@mastra/core/workspace'
import { GoogleDriveFilesystem } from '@mastra/google-drive'
const workspace = new Workspace({
filesystem: new GoogleDriveFilesystem({
folderId: process.env.GOOGLE_DRIVE_FOLDER_ID!,
accessToken: process.env.GOOGLE_DRIVE_ACCESS_TOKEN!,
}),
})
const agent = new Agent({
id: 'drive-agent',
name: 'Drive Agent',
model: 'openai/gpt-5-mini',
workspace,
})
AuthentificationLien direct vers Authentification
Fournissez l’une des options d’authentification suivantes :
accessToken: token d’accès OAuth obtenu au préalable. Utilisez la portéehttps://www.googleapis.com/auth/driveafin que le token puisse voir les dossiers partagés avec l’identité authentifiée.getAccessToken: callback qui renvoie un token. Utile lorsque les tokens sont actualisés par un système externe.serviceAccount: compte de service Google. Partagez le dossier cible avec l’adresse e-mail du compte de service.
Compte de serviceLien direct vers Compte de service
L’authentification par compte de service est l’option recommandée pour les Agents backend. Elle ne nécessite ni flux de consentement de l’utilisateur ni gestion de l’actualisation des tokens. Vous avez uniquement besoin de deux valeurs du fichier de clé JSON du compte de service : client_email et private_key.
Configurer le compte de serviceLien direct vers Configurer le compte de service
- Ouvrez la Google Cloud Console, puis sélectionnez ou créez un projet.
- Accédez à APIs & Services > Library, recherchez Google Drive API, puis sélectionnez Enable.
- Accédez à APIs & Services > Credentials, sélectionnez Create credentials > Service account, puis remplissez le formulaire. Le rôle peut rester vide : les permissions Drive sont accordées par le partage des dossiers, et non par les rôles IAM.
- Ouvrez le nouveau compte de service, accédez à l’onglet Keys, puis sélectionnez Add key > Create new key > JSON. Le navigateur télécharge un fichier de clé JSON.
- Copiez la valeur
client_emaildu fichier JSON. Il s’agit de l’adresse avec laquelle vous partagez les dossiers Drive.
Partager le dossier Drive avec le compte de serviceLien direct vers Partager le dossier Drive avec le compte de service
Le compte de service possède sa propre identité Google. Il ne peut rien voir dans Drive tant que vous ne partagez pas explicitement du contenu avec lui.
- Ouvrez le dossier cible dans Google Drive.
- Sélectionnez Share.
- Collez l’adresse
client_emaildu compte de service. - Définissez le rôle sur Editor pour la lecture et l’écriture, ou sur Viewer pour un accès en lecture seule. Sélectionnez Send.
- Copiez l’ID du dossier depuis l’URL. Il s’agit du segment qui suit
/folders/danshttps://drive.google.com/drive/folders/<folderId>.
Les comptes de service ne peuvent pas créer de fichiers dans les dossiers standards "My Drive". Un compte de service ne possède aucun quota de stockage Drive personnel ; chaque fichier qu’il crée doit donc appartenir à une entité disposant d’un quota. Si vous partagez uniquement un dossier Drive personnel, les opérations de lecture fonctionnent, mais les écritures échouent avec une erreur de quota.
Pour autoriser l’écriture, placez le dossier dans un shared drive, anciennement appelé Team Drive, puis ajoutez le compte de service comme membre de ce shared drive. Les shared drives fournissent le quota de stockage nécessaire aux fichiers créés par le compte de service.
Les charges de travail en lecture seule sur un dossier Drive personnel ne sont pas soumises à cette restriction.
Configurer le système de fichiersLien direct vers Configurer le système de fichiers
Copiez client_email et private_key depuis le fichier JSON dans votre environnement :
GOOGLE_DRIVE_FOLDER_ID=1AbCdEfGhIjKlMnOpQrStUvWxYz
GOOGLE_DRIVE_CLIENT_EMAIL=my-bot@my-project.iam.gserviceaccount.com
# Wrap the value in quotes — the key contains newlines that must be preserved.
GOOGLE_DRIVE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkq...\n-----END PRIVATE KEY-----\n"
import { GoogleDriveFilesystem } from '@mastra/google-drive'
const filesystem = new GoogleDriveFilesystem({
folderId: process.env.GOOGLE_DRIVE_FOLDER_ID!,
serviceAccount: {
clientEmail: process.env.GOOGLE_DRIVE_CLIENT_EMAIL!,
privateKey: process.env.GOOGLE_DRIVE_PRIVATE_KEY!,
},
})
Vous ne devez pas copier l’intégralité du fichier JSON ni transmettre d’autres champs tels que project_id, client_id, private_key_id ou token_uri, car ils ne sont pas utilisés. Seuls clientEmail et privateKey sont requis. privateKeyId, scopes et subject sont facultatifs. Par défaut, scopes vaut ['https://www.googleapis.com/auth/drive'], la portée nécessaire pour que le compte de service voie les dossiers partagés avec lui. La portée plus restreinte drive.file donne uniquement accès aux fichiers créés par l’application elle-même ; un dossier partagé avec le compte de service renverrait donc 404 Not Found.
GoogleDriveFilesystem normalise automatiquement la chaîne privateKey avant la signature. Il supprime les guillemets qui l’entourent, y compris ceux échappés dans les valeurs encapsulées en JSON, et convertit les séquences littérales \n en véritables sauts de ligne. Il normalise également les fins de ligne \r\n et supprime toute virgule finale. La clé fonctionne quelle que soit la manière dont votre chargeur .env traite la valeur.
Résolution des problèmesLien direct vers Résolution des problèmes
404 File not found: <folderId>: le compte de service n’a pas accès au dossier. Vérifiez que le dossier est partagé avec l’adresseclient_emailexacte et que son ID correspond à l’URL.storageQuotaExceededlors de l’écriture : le dossier se trouve dans un espace "My Drive" personnel. Déplacez-le vers un shared drive et ajoutez le compte de service comme membre.error:1E08010C:DECODER routines::unsupported: la valeurprivateKeyest mal formée. Vérifiez qu’elle contient l’intégralité du bloc PEM et que les sauts de ligne sont conservés (les séquences littérales\nconviennent).
Mode lecture seuleLien direct vers Mode lecture seule
Transmettez readOnly: true pour bloquer les opérations d’écriture (writeFile, appendFile, deleteFile, copyFile, moveFile, mkdir, rmdir).
const filesystem = new GoogleDriveFilesystem({
folderId,
accessToken,
readOnly: true,
})
Paramètres du constructeurLien direct vers Paramètres du constructeur
folderId:
accessToken?:
getAccessToken?:
serviceAccount?:
id?:
readOnly?:
instructions?:
PropriétésLien direct vers Propriétés
id:
name:
provider:
readOnly:
MéthodesLien direct vers Méthodes
GoogleDriveFilesystem implémente l’interface WorkspaceFilesystem et fournit toutes les méthodes standard d’un système de fichiers :
readFile(path, options?)- Télécharge le contenu d’un fichierwriteFile(path, content, options?)- Charge ou remplace un fichierappendFile(path, content)- Ajoute du contenu en lisant puis en rechargeant le fichierdeleteFile(path, options?)- Supprime un fichiercopyFile(src, dest, options?)- Copie un fichier à l’aide de l’API Drivefiles.copymoveFile(src, dest, options?)- Déplace un fichier entre des dossiers en échangeant ses parentsmkdir(path, options?)- Crée un dossierrmdir(path, options?)- Supprime un dossierreaddir(path, options?)- Répertorie le contenu d’un dossier (prend en charge le filtragerecursiveetextension)stat(path)- Renvoie les métadonnées Drive d’un fichier ou d’un dossierexists(path)- Vérifie si un fichier ou un dossier existe
RemarquesLien direct vers Remarques
- Google Drive autorise plusieurs fichiers portant le même nom dans un dossier.
GoogleDriveFilesystemrésout les chemins en sélectionnant la première correspondance ; utilisez donc des noms uniques dans chaque dossier lorsque vous dépendez de la recherche par chemin. writeFilecrée automatiquement les dossiers parents lorsquerecursiven’est pas défini, ce qui est le comportement par défaut, ou vauttrue. Définissezrecursive: falsepour exiger que le dossier parent existe déjà.- La valeur
expectedMtimedeWriteOptionsest respectée. Lorsque la valeurmodifiedTimestockée diffère, l’écriture est rejetée avecStaleFileErrorafin de prendre en charge la concurrence optimiste. - Le Provider utilise uniquement les endpoints REST de Drive (
https://www.googleapis.com/drive/v3ethttps://www.googleapis.com/upload/drive/v3) au moyen dufetchintégré. Aucune dépendance supplémentaire n’est requise.