Documentation Index
Fetch the complete documentation index at: https://docs.meshagent.com/llms.txt
Use this file to discover all available pages before exploring further.
Overview
TheStorageClient is the Room API for room-scoped files and folders. Use it to store shared inputs, outputs, artifacts, and attachments that humans, agents, and services in the same room need to read or write.
CLI commands
Start with the CLI help, then use a few common commands:bash
Why use the Storage API?
- Share files between people, agents, and deployed services without wiring separate object storage access.
- Store outputs such as reports, logs, generated media, or intermediate artifacts.
- Download file contents directly or get a downloadable URL when you need to hand a file to another system.
How it works
Paths are relative to the room storage root. Useupload or uploadStream to write files, download or downloadStream to read them back, and download_url / downloadUrl when you need a fetchable URL for another system. The API also emits file.updated, file.deleted, and file.moved events so other participants can react to changes.
Permissions and grants
upload / uploadStream and download / downloadStream / download_url require a storage grant on the participant token for the target path. Storage grants are path-based, which lets you give a service access to only part of room storage. In the current server implementation, list, exists, stat, and delete are not gated by storage grants.
Use API Scopes and Service YAML for the full scope model.
Events
The storage system emits three types of events:file.updated
Triggered when a file is created or updated. Python and .NET handlers receivepathandparticipant_id. JS/TS and Dart handlers receive aFileUpdatedEventwith.path.
file.deleted
Triggered when a file is deleted. Python and .NET handlers receivepathandparticipant_id. JS/TS and Dart handlers receive aFileDeletedEventwith.path.
file.movedTriggered when a file or folder is moved. Python and .NET handlers receivesource_path,destination_path, andparticipant_id. JS/TS and Dart handlers receive aFileMovedEventwith.sourcePathand.destinationPath.
API reference
Use the methods below to inspect room storage, upload and download files, and clean up stored artifacts. Each method is asynchronous, so you shouldawait the call.
exists(path)
DescriptionChecks if a file or folder exists at the given path. Parameters
path(str): The path to check.
- (bool):
Trueif the file or folder exists;Falseotherwise.
stat(path)
DescriptionFetch basic metadata (exists, folder flag, created/updated timestamps) for a file or folder. Parameters
path(str): The path to inspect.
StorageEntry | None: Entry when present;Noneif not found.
name, is_folder, created_at, and updated_at fields. SDKs that expose stat parse timestamps into native datetime types.
Example:
- Availability: Python SDK exposes
stat; other SDKs can call the same endpoint via a custom request until a helper is added.
upload(path, data, overwrite=False)
DescriptionUploads a complete file payload in one call. Use this when you already have the bytes in memory. Parameters
path(str): The destination file path.data(bytes / Uint8Array / byte[]): The file contents to write.overwrite(bool, optional): Whether to replace an existing file at that path.
None
upload_stream(path, chunks, ...)
DescriptionStreams file contents chunk-by-chunk. Use this when you do not want to materialize the whole file in memory at once. Parameters
path(str): The destination file path.chunks: An async iterable / stream /IAsyncEnumerable<byte[]>of file chunks.overwrite(optional): Replace an existing file at that path.size(optional): Total byte size when you already know it.chunk_size/chunkSize(optional): Pull size for streamed uploads.
None
download_stream(path, chunk_size=...)
DescriptionStreams a file back as metadata plus data chunks. Use this for larger files or when you want to process the response incrementally. Parameters
path(str): The file path to download.chunk_size/chunkSize(optional): Requested chunk size for streamed downloads.
- A stream / async iterator of binary chunks. The first chunk carries metadata such as file name, MIME type, and size.
download(path)
DescriptionRetrieves the content of a file from the remote storage. This loads the entire file into memory; use
download_url for large files or streaming.
Parameters
path(str): The file path to download.
- File-like Response: Contains the file’s raw data, typically accessible through a
.dataproperty.
download_url(path)
DescriptionRequests a downloadable URL for the specified file path, which can be used to fetch the file directly (e.g., via HTTP). The exact protocol or format of the returned URL may vary, and may be a signed URL if the backing storage provider supports it. Parameters
path(str): The file path to retrieve a download URL for.
- (str): A URL string you can fetch with your own HTTP or other suitable client.
list(path)
DescriptionLists the contents of a folder, returning file and subfolder names along with a flag indicating if each entry is a folder. The server also returns
created_at and updated_at timestamps; the Python SDK exposes them on StorageEntry.
Parameters
path(str): The folder path to list.
- (list): A list of entries, each containing a
nameandis_folderproperty. Timestamps are available in SDKs that surface them.
delete(path)
DescriptionDeletes a file or folder at the given path. A
file.deleted event is typically emitted afterward. To delete a folder, pass recursive=True (Python) or call the raw storage.delete request with the recursive flag.
Parameters
path(str): The file path to delete.recursive(bool, optional): SetTrueto delete folders recursively (Python helper or raw request).
None
Example Workflow
A common use case:- Check if a file exists.
- Upload data if it doesn’t exist.
- Later, download the file to verify or use the data.
- Delete the file when it’s no longer needed, reacting to the
file.deletedevent.