LocalFilesystem
新增於: @mastra/core@1.1.0
將檔案儲存在本機檔案系統的目錄中。介面詳情請參閱 WorkspaceFilesystem 介面。
使用方式使用方式 的直接連結
將 LocalFilesystem 加入 Workspace 並指派給 Agent。Agent 隨後便可在執行工作期間讀取、寫入及管理檔案:
import { Agent } from '@mastra/core/agent'
import { Workspace, LocalFilesystem } from '@mastra/core/workspace'
const workspace = new Workspace({
filesystem: new LocalFilesystem({
basePath: './workspace',
}),
})
const agent = new Agent({
id: 'file-agent',
model: 'openai/gpt-5.6-sol',
workspace,
})
// The agent now has filesystem tools available
const response = await agent.generate('List all files in the workspace')
建構函式參數建構函式參數 的直接連結
basePath:
id?:
contained?:
allowedPaths?:
basePath 以外存取的其他目錄。instructions?:
readOnly?:
屬性屬性 的直接連結
id:
name:
provider:
basePath:
readOnly:
allowedPaths:
方法方法 的直接連結
init()init 的直接連結
初始化檔案系統。如果基礎目錄不存在,便會建立該目錄。
await filesystem.init()
由 workspace.init() 呼叫。
延遲初始化延遲初始化 的直接連結
如果尚未初始化,LocalFilesystem 會在第一次操作時初始化,並自動建立基礎目錄。你可選擇明確呼叫 init(),以便在第一次操作前預先建立目錄。
destroy()destroy 的直接連結
清理檔案系統資源。
await filesystem.destroy()
由 workspace.destroy() 呼叫。
setAllowedPaths(pathsOrUpdater)setallowedpathspathsorupdater 的直接連結
在執行階段更新允許的路徑。可接受新的路徑陣列(取代目前陣列),或接受更新器回呼函式;該函式會接收目前路徑並傳回新集合。
// Set directly
filesystem.setAllowedPaths(['/home/user/.config'])
// Update with callback
filesystem.setAllowedPaths(prev => [...prev, '/home/user/documents'])
// Clear all allowed paths
filesystem.setAllowedPaths([])
參數:
pathsOrUpdater:
readFile(path, options?)readfilepath-options 的直接連結
讀取檔案內容。
const content = await filesystem.readFile('/docs/guide.md')
const buffer = await filesystem.readFile('/image.png', { encoding: 'binary' })
參數:
path:
options?:
encoding?:
writeFile(path, content, options?)writefilepath-content-options 的直接連結
將內容寫入檔案。
await filesystem.writeFile('/docs/new.md', '# New Document')
await filesystem.writeFile('/nested/path/file.md', content, { recursive: true })
參數:
path:
content:
options?:
recursive?:
overwrite?:
expectedMtime?:
appendFile(path, content)appendfilepath-content 的直接連結
將內容附加至現有檔案。
await filesystem.appendFile('/logs/app.log', 'New log entry\n')
參數:
path:
content:
deleteFile(path, options?)deletefilepath-options 的直接連結
刪除檔案。
await filesystem.deleteFile('/docs/old.md')
await filesystem.deleteFile('/docs/maybe.md', { force: true }) // Don't throw if missing
參數:
path:
options?:
force?:
copyFile(src, dest, options?)copyfilesrc-dest-options 的直接連結
將檔案複製到新位置。
await filesystem.copyFile('/docs/template.md', '/docs/new-doc.md')
await filesystem.copyFile('/src/config.json', '/backup/config.json', { overwrite: false })
參數:
src:
dest:
options?:
overwrite?:
moveFile(src, dest, options?)movefilesrc-dest-options 的直接連結
移動檔案或重新命名。
await filesystem.moveFile('/docs/draft.md', '/docs/final.md')
await filesystem.moveFile('/temp/upload.txt', '/files/document.txt')
參數:
src:
dest:
options?:
overwrite?:
mkdir(path, options?)mkdirpath-options 的直接連結
建立目錄。
await filesystem.mkdir('/docs/api')
await filesystem.mkdir('/deeply/nested/path', { recursive: true })
參數:
path:
options?:
recursive?:
rmdir(path, options?)rmdirpath-options 的直接連結
移除目錄。
await filesystem.rmdir('/docs/old')
await filesystem.rmdir('/docs/nested', { recursive: true })
參數:
path:
options?:
recursive?:
force?:
readdir(path, options?)readdirpath-options 的直接連結
列出目錄內容。
const entries = await filesystem.readdir('/docs')
// [{ name: 'guide.md', type: 'file' }, { name: 'api', type: 'directory' }]
exists(path)existspath 的直接連結
檢查路徑是否存在。
const exists = await filesystem.exists('/docs/guide.md')
stat(path)statpath 的直接連結
取得檔案或目錄的中繼資料。
const stat = await filesystem.stat('/docs/guide.md')
// { type: 'file', size: 1234, modifiedAt: Date, createdAt: Date, path: '/docs/guide.md' }
getInfo()getinfo 的直接連結
傳回此檔案系統實例的中繼資料。
const info = filesystem.getInfo()
// { id: '...', name: 'LocalFilesystem', provider: 'local', basePath: '/workspace', readOnly: false }
getInstructions(opts?)getinstructionsopts 的直接連結
傳回此檔案系統中路徑運作方式的說明。指派給 Agent 後,此內容會注入 Agent 的系統訊息。
const instructions = filesystem.getInstructions()
// 'Local filesystem at "/workspace". Files at workspace path "/foo" are stored at "/workspace/foo" on disk.'
當建構函式的 instructions 選項是函式時,傳入 requestContext 即可為每個請求啟用自訂設定:
const instructions = filesystem.getInstructions({ requestContext })
參數:
opts.requestContext?:
instructions 函式,便會轉交給該函式。傳回: string
如要覆寫預設輸出,請將 instructions 選項傳入建構函式。請參閱建構函式參數。
路徑解析路徑解析 的直接連結
basePath 的運作方式how-basepath-works 的直接連結
basePath 選項會設定所有檔案操作的根目錄。傳入 readFile() 等方法的檔案路徑,會相對於此基礎目錄解析:
- 移除開頭的斜線:
/docs/guide.md→docs/guide.md - 將路徑正規化,並與 basePath 合併
- 結果:
./workspace+docs/guide.md→./workspace/docs/guide.md
const filesystem = new LocalFilesystem({
basePath: './workspace',
})
// These all resolve to ./workspace/docs/guide.md
await filesystem.readFile('/docs/guide.md')
await filesystem.readFile('docs/guide.md')
相對路徑與執行內容相對路徑與執行內容 的直接連結
當 basePath 使用相對路徑時,會由 process.cwd() 開始解析。在 Mastra 項目中,cwd 會因程式碼的執行方式而有所不同:
| 執行內容 | 工作目錄 | ./workspace 解析為 |
|---|---|---|
mastra dev | ./src/mastra/public/ | ./src/mastra/public/workspace |
mastra start | ./.mastra/output/ | ./.mastra/output/workspace |
| 直接執行指令碼 | 你執行指令的所在位置 | 相對於該位置 |
同一個相對路徑可能會解析至不同位置,因而造成混淆。
建議:使用絕對路徑建議:使用絕對路徑 的直接連結
為確保所有執行內容中的路徑一致,請使用包含絕對路徑的環境變數:
import { LocalFilesystem } from '@mastra/core/workspace'
const filesystem = new LocalFilesystem({
basePath: process.env.WORKSPACE_PATH!,
})
在環境中將 WORKSPACE_PATH 設為 /home/user/my-project/workspace 之類的絕對路徑。這可確保無論以何種方式執行程式碼,Workspace 路徑都保持一致。