From f85274a19a24551455282c911b652a5c7c186507 Mon Sep 17 00:00:00 2001 From: AJ Emerich Date: Tue, 10 Feb 2026 16:06:26 +0100 Subject: [PATCH] docs(fs): update descriptions --- .../java/io/kestra/plugin/fs/ftp/Delete.java | 3 +- .../io/kestra/plugin/fs/ftp/Download.java | 3 +- .../io/kestra/plugin/fs/ftp/Downloads.java | 3 +- .../io/kestra/plugin/fs/ftp/FtpInterface.java | 28 +++++++++++-------- .../java/io/kestra/plugin/fs/ftp/List.java | 3 +- .../java/io/kestra/plugin/fs/ftp/Move.java | 4 +-- .../java/io/kestra/plugin/fs/ftp/Trigger.java | 3 +- .../java/io/kestra/plugin/fs/ftp/Upload.java | 3 +- .../java/io/kestra/plugin/fs/ftp/Uploads.java | 3 +- .../java/io/kestra/plugin/fs/ftps/Delete.java | 3 +- .../io/kestra/plugin/fs/ftps/Download.java | 3 +- .../io/kestra/plugin/fs/ftps/Downloads.java | 3 +- .../kestra/plugin/fs/ftps/FtpsInterface.java | 10 ++++--- .../java/io/kestra/plugin/fs/ftps/List.java | 3 +- .../java/io/kestra/plugin/fs/ftps/Move.java | 4 +-- .../io/kestra/plugin/fs/ftps/Trigger.java | 3 +- .../java/io/kestra/plugin/fs/ftps/Upload.java | 3 +- .../io/kestra/plugin/fs/ftps/Uploads.java | 3 +- .../java/io/kestra/plugin/fs/local/Copy.java | 14 +++++----- .../io/kestra/plugin/fs/local/Delete.java | 16 +++++------ .../io/kestra/plugin/fs/local/Download.java | 12 ++++---- .../io/kestra/plugin/fs/local/Downloads.java | 16 +++++------ .../java/io/kestra/plugin/fs/local/List.java | 18 ++++++------ .../java/io/kestra/plugin/fs/local/Move.java | 17 +++++------ .../io/kestra/plugin/fs/local/Trigger.java | 16 +++++------ .../io/kestra/plugin/fs/local/Upload.java | 17 +++++------ .../io/kestra/plugin/fs/nfs/CheckMount.java | 5 ++-- .../java/io/kestra/plugin/fs/nfs/Copy.java | 7 +++-- .../java/io/kestra/plugin/fs/nfs/Delete.java | 7 +++-- .../java/io/kestra/plugin/fs/nfs/List.java | 9 +++--- .../java/io/kestra/plugin/fs/nfs/Move.java | 7 +++-- .../java/io/kestra/plugin/fs/nfs/Trigger.java | 17 +++++------ .../java/io/kestra/plugin/fs/sftp/Delete.java | 3 +- .../io/kestra/plugin/fs/sftp/Download.java | 3 +- .../io/kestra/plugin/fs/sftp/Downloads.java | 3 +- .../java/io/kestra/plugin/fs/sftp/List.java | 3 +- .../java/io/kestra/plugin/fs/sftp/Move.java | 4 +-- .../kestra/plugin/fs/sftp/SftpInterface.java | 21 ++++++++------ .../io/kestra/plugin/fs/sftp/Trigger.java | 3 +- .../java/io/kestra/plugin/fs/sftp/Upload.java | 3 +- .../io/kestra/plugin/fs/sftp/Uploads.java | 3 +- .../java/io/kestra/plugin/fs/smb/Delete.java | 3 +- .../io/kestra/plugin/fs/smb/Download.java | 3 +- .../io/kestra/plugin/fs/smb/Downloads.java | 3 +- .../java/io/kestra/plugin/fs/smb/List.java | 3 +- .../java/io/kestra/plugin/fs/smb/Move.java | 4 +-- .../java/io/kestra/plugin/fs/smb/Trigger.java | 3 +- .../java/io/kestra/plugin/fs/smb/Upload.java | 3 +- .../java/io/kestra/plugin/fs/smb/Uploads.java | 3 +- .../java/io/kestra/plugin/fs/ssh/Command.java | 20 ++++++------- .../io/kestra/plugin/fs/ssh/SshInterface.java | 16 +++++++---- .../kestra/plugin/fs/tcp/RealtimeTrigger.java | 9 +++--- .../java/io/kestra/plugin/fs/tcp/Send.java | 13 +++++---- .../kestra/plugin/fs/udp/RealtimeTrigger.java | 11 ++++---- .../java/io/kestra/plugin/fs/udp/Send.java | 11 ++++---- .../plugin/fs/vfs/AbstractVfsInterface.java | 8 +++--- .../java/io/kestra/plugin/fs/vfs/Delete.java | 4 +-- .../io/kestra/plugin/fs/vfs/Download.java | 2 +- .../io/kestra/plugin/fs/vfs/Downloads.java | 10 +++---- .../java/io/kestra/plugin/fs/vfs/List.java | 6 ++-- .../java/io/kestra/plugin/fs/vfs/Move.java | 12 ++++---- .../java/io/kestra/plugin/fs/vfs/Trigger.java | 14 +++++----- .../java/io/kestra/plugin/fs/vfs/Upload.java | 9 +++--- .../java/io/kestra/plugin/fs/vfs/Uploads.java | 8 +++--- 64 files changed, 271 insertions(+), 219 deletions(-) diff --git a/src/main/java/io/kestra/plugin/fs/ftp/Delete.java b/src/main/java/io/kestra/plugin/fs/ftp/Delete.java index 0f0023b8..b8d1a1ac 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/Delete.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/Delete.java @@ -19,7 +19,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Delete a file from an FTP server." + title = "Delete a remote FTP file", + description = "Removes the specified file on the server. Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftp/Download.java b/src/main/java/io/kestra/plugin/fs/ftp/Download.java index 9c6a8615..736b34aa 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/Download.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/Download.java @@ -20,7 +20,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download file from an FTP server." + title = "Download a file from FTP", + description = "Fetches a single remote file to internal storage. Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftp/Downloads.java b/src/main/java/io/kestra/plugin/fs/ftp/Downloads.java index 61b70a10..fc590db5 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/Downloads.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/Downloads.java @@ -19,7 +19,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download multiple files from an FTP server." + title = "Download multiple files from FTP", + description = "Lists matching files then downloads them to internal storage. Respects `maxFiles` (default 25) and optional post-download action (MOVE/DELETE). Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftp/FtpInterface.java b/src/main/java/io/kestra/plugin/fs/ftp/FtpInterface.java index 93007f05..382dcb9a 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/FtpInterface.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/FtpInterface.java @@ -11,7 +11,7 @@ public interface FtpInterface { @Schema( - title = "FTP proxy host" + title = "FTP proxy hostname" ) Property getProxyHost(); @@ -26,17 +26,20 @@ public interface FtpInterface { Property getProxyType(); @Schema( - title = "Is the path relative to the user's home directory" + title = "Treat path as user home root", + description = "If true (default), remote paths are resolved relative to the authenticated user's home directory." ) Property getRootDir(); @Schema( - title = "Whether to use a [passive mode](https://www.jscape.com/blog/active-v-s-passive-ftp-simplified). Passive mode is generally considered more secure as it's less likely to encounter issues with NAT and firewalls. Therefore, this property is by default set to `true`. To use active mode instead, set the property to `false`." + title = "Use passive data connections", + description = "Passive mode avoids most firewall and NAT issues and is enabled by default (`true`). Set to `false` to force active mode." ) Property getPassiveMode(); @Schema( - title = "Ensure the server IP responding matches the one that received the request." + title = "Verify data channel IP", + description = "Ensures the responding server IP matches the control connection to prevent spoofed data channels." ) Property getRemoteIpVerification(); @@ -47,33 +50,36 @@ public interface FtpInterface { @Jacksonized class Options { @Schema( - title = "The timeout for the initial control connection." + title = "Control connection timeout", + description = "Maximum time to open the control channel. Default 30s." ) @Builder.Default Property connectionTimeout = Property.ofValue(Duration.ofSeconds(30)); @Schema( - title = "The timeout for opening the data channel." + title = "Data channel timeout", + description = "Maximum time to open the data socket. Default 30s." ) @Builder.Default Property dataTimeout = Property.ofValue(Duration.ofSeconds(30)); @Schema( - title = "The socket timeout." + title = "Socket read timeout", + description = "Timeout for socket reads and writes once connected. Default 30s." ) @Builder.Default Property socketTimeout = Property.ofValue(Duration.ofSeconds(30)); @Schema( - title = "The control keep-alive timeout.", - description = "Ensures the socket stays alive after downloading a large file." + title = "Control keep-alive interval", + description = "Sends keep-alive commands during long transfers. Default 30s." ) @Builder.Default Property controlKeepAliveTimeout = Property.ofValue(Duration.ofSeconds(30)); @Schema( - title = "The control keep-alive reply timeout.", - description = "Ensures the socket stays alive after downloading a large file." + title = "Keep-alive reply timeout", + description = "How long to wait for keep-alive responses before failing. Default 30s." ) @Builder.Default Property controlKeepAliveReplyTimeout = Property.ofValue(Duration.ofSeconds(30)); diff --git a/src/main/java/io/kestra/plugin/fs/ftp/List.java b/src/main/java/io/kestra/plugin/fs/ftp/List.java index 15845005..044f28f1 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/List.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/List.java @@ -19,7 +19,8 @@ @Getter @NoArgsConstructor @Schema( - title = "List files from an FTP server directory." + title = "List files in an FTP directory", + description = "Lists entries under the given path with optional regexp filter. Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftp/Move.java b/src/main/java/io/kestra/plugin/fs/ftp/Move.java index aa93d3ec..d15aff4d 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/Move.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/Move.java @@ -19,8 +19,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Move a file to an FTP server.", - description ="If the destination directory doesn't exist, it will be created" + title = "Move or rename an FTP file", + description = "Moves/renames a remote file; destination directories are created when missing. Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftp/Trigger.java b/src/main/java/io/kestra/plugin/fs/ftp/Trigger.java index 56cc0870..58c37cfa 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/Trigger.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/Trigger.java @@ -19,7 +19,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow as soon as new files are detected in a given FTP server's directory." + title = "Trigger on new FTP files", + description = "Polls a remote directory on the interval and starts a Flow when new files appear. Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home. Use `action` MOVE/DELETE to avoid reprocessing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftp/Upload.java b/src/main/java/io/kestra/plugin/fs/ftp/Upload.java index aeb65a72..6855f79b 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/Upload.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/Upload.java @@ -19,7 +19,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload a file to an FTP server." + title = "Upload a file to FTP", + description = "Pushes one local file to the remote path. Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftp/Uploads.java b/src/main/java/io/kestra/plugin/fs/ftp/Uploads.java index 9d827a11..2b2f322b 100644 --- a/src/main/java/io/kestra/plugin/fs/ftp/Uploads.java +++ b/src/main/java/io/kestra/plugin/fs/ftp/Uploads.java @@ -19,7 +19,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload files to an FTP server's directory." + title = "Upload multiple files to FTP", + description = "Uploads each provided file to the target directory. Defaults: port 21, passive mode on, remote IP verification on, paths relative to user home." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/Delete.java b/src/main/java/io/kestra/plugin/fs/ftps/Delete.java index bb669e47..d16460d1 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/Delete.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/Delete.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Delete a file from an FTPS server." + title = "Delete a remote FTPS file", + description = "Removes the specified file over FTPS. Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. `insecureTrustAllCertificates` skips SSL checks for testing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/Download.java b/src/main/java/io/kestra/plugin/fs/ftps/Download.java index ae3889e2..628aea3a 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/Download.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/Download.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download a file from an FTPS server." + title = "Download a file from FTPS", + description = "Fetches a single remote file over FTPS. Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. `insecureTrustAllCertificates` skips SSL checks for testing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/Downloads.java b/src/main/java/io/kestra/plugin/fs/ftps/Downloads.java index d927c342..2086bb62 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/Downloads.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/Downloads.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download multiple files from an FTPS server." + title = "Download multiple files from FTPS", + description = "Lists matching files then downloads them over FTPS. Respects `maxFiles` (default 25) and optional post-download action (MOVE/DELETE). Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. Use `insecureTrustAllCertificates` only for testing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/FtpsInterface.java b/src/main/java/io/kestra/plugin/fs/ftps/FtpsInterface.java index cf9a33c2..d5c2d59e 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/FtpsInterface.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/FtpsInterface.java @@ -7,19 +7,21 @@ public interface FtpsInterface { @Schema( - title = "Sets FTPS mode, either \"implicit\" or \"explicit\"." + title = "Select FTPS mode", + description = "Choose implicit or explicit FTPS. Default EXPLICIT." ) Property getMode(); @Schema( - title = "Sets the data channel protection level (PROT)." + title = "Data channel protection level", + description = "PROT command value (`P`, `C`, etc.). Default P (encrypted)." ) Property getDataChannelProtectionLevel(); @Schema( - title = "Whether the client should disable checking of the remote SSL certificate.", - description = "Note: This makes the SSL connection insecure, and should only be used for testing." + title = "Trust all certificates", + description = "Skip server certificate validation. Insecure; use only for testing." ) Property getInsecureTrustAllCertificates(); } diff --git a/src/main/java/io/kestra/plugin/fs/ftps/List.java b/src/main/java/io/kestra/plugin/fs/ftps/List.java index 98d80643..58b9f947 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/List.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/List.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "List files from an FTPS server directory." + title = "List files in an FTPS directory", + description = "Lists entries under the given path with optional regexp filter. Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. Use `insecureTrustAllCertificates` only for testing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/Move.java b/src/main/java/io/kestra/plugin/fs/ftps/Move.java index fcf438b2..bd3e9287 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/Move.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/Move.java @@ -22,8 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Move a file to an FTPS server.", - description ="If the destination directory doesn't exist, it will be created" + title = "Move or rename an FTPS file", + description = "Moves/renames a remote file; destination directories are created when missing. Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. `insecureTrustAllCertificates` skips SSL checks for testing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/Trigger.java b/src/main/java/io/kestra/plugin/fs/ftps/Trigger.java index 28a341c2..a8638604 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/Trigger.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/Trigger.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow as soon as new files are detected in a given FTPS server's directory." + title = "Trigger on new FTPS files", + description = "Polls a remote directory on the interval and starts a Flow when new files appear. Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. Use `action` MOVE/DELETE to prevent repeated triggering; `insecureTrustAllCertificates` is for testing only." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/Upload.java b/src/main/java/io/kestra/plugin/fs/ftps/Upload.java index 06be1c82..7b4f0e9f 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/Upload.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/Upload.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload a file to an FTPS server." + title = "Upload a file to FTPS", + description = "Pushes one local file over FTPS. Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. `insecureTrustAllCertificates` skips SSL checks for testing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ftps/Uploads.java b/src/main/java/io/kestra/plugin/fs/ftps/Uploads.java index 863c51d4..0d8f3de4 100644 --- a/src/main/java/io/kestra/plugin/fs/ftps/Uploads.java +++ b/src/main/java/io/kestra/plugin/fs/ftps/Uploads.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload files to an FTPS server's directory." + title = "Upload multiple files to FTPS", + description = "Uploads each provided file over FTPS to the target directory. Defaults: port 990, EXPLICIT mode, PROT P data channel, passive mode on, remote IP verification on, paths relative to user home. `insecureTrustAllCertificates` skips SSL checks for testing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/local/Copy.java b/src/main/java/io/kestra/plugin/fs/local/Copy.java index 8b51ca61..96fb5649 100644 --- a/src/main/java/io/kestra/plugin/fs/local/Copy.java +++ b/src/main/java/io/kestra/plugin/fs/local/Copy.java @@ -25,10 +25,10 @@ @Getter @NoArgsConstructor @Schema( - title = "Copy files within the local file system.", + title = "Copy files on the local filesystem", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Copies files or directories within allowed local paths. Local access requires configuring `allowed-paths` in plugin defaults; operations outside are blocked. + Set `overwrite: true` to replace existing targets. Example (Kestra config): ```yaml @@ -62,20 +62,20 @@ public class Copy extends AbstractLocalTask implements RunnableTask { @Schema( - title = "The file or directory to move from local file system." + title = "Source file or directory path" ) @NotNull private Property from; @Schema( - title = "The path to move the file or directory to on the local file system." + title = "Destination path on the local file system" ) @NotNull private Property to; @Schema( - title = "Overwrite.", - description = "If set to false, it will raise an exception if the destination folder or file already exists." + title = "Overwrite existing files", + description = "If false, the task fails when the destination already exists." ) @Builder.Default protected Property overwrite = Property.ofValue(false); diff --git a/src/main/java/io/kestra/plugin/fs/local/Delete.java b/src/main/java/io/kestra/plugin/fs/local/Delete.java index e83a40d9..1d21ba47 100644 --- a/src/main/java/io/kestra/plugin/fs/local/Delete.java +++ b/src/main/java/io/kestra/plugin/fs/local/Delete.java @@ -23,10 +23,10 @@ @Getter @NoArgsConstructor @Schema( - title = "Delete a file or directory from the local filesystem.", + title = "Delete local file or directory", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Removes a file or directory under the configured `allowed-paths`; access outside is denied. Recursive deletion defaults to true for directories. + Set `errorOnMissing: true` to fail when the target is absent. Example (Kestra config): ```yaml @@ -57,17 +57,17 @@ ) public class Delete extends AbstractLocalTask implements RunnableTask { - @Schema(title = "The local file path to delete") + @Schema(title = "Local path to delete") @NotNull private Property from; - @Schema(title = "Raise an error if the file is not found") + @Schema(title = "Raise an error if missing") @Builder.Default private Property errorOnMissing = Property.ofValue(false); @Schema( - title = "Whether to include subdirectories", - description = "If true, the task will recursively delete files in all subdirectories." + title = "Include subdirectories", + description = "If true, deletes directory contents recursively." ) @Builder.Default private Property recursive = Property.ofValue(true); @@ -135,4 +135,4 @@ public static class Output implements io.kestra.core.models.tasks.Output { @Schema(title = "Whether the file was deleted") private final boolean deleted; } -} \ No newline at end of file +} diff --git a/src/main/java/io/kestra/plugin/fs/local/Download.java b/src/main/java/io/kestra/plugin/fs/local/Download.java index 99489a73..2d339201 100644 --- a/src/main/java/io/kestra/plugin/fs/local/Download.java +++ b/src/main/java/io/kestra/plugin/fs/local/Download.java @@ -22,10 +22,10 @@ @Getter @NoArgsConstructor @Schema( - title = "Download a file from the local filesystem to the Kestra internal storage.", + title = "Download local file to internal storage", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Copies a local file (within configured `allowed-paths`) into Kestra internal storage. Fails if the source is missing; preserves size and file extension when possible. + Local access requires `allowed-paths` in plugin defaults. Example (Kestra config): ```yaml @@ -58,8 +58,8 @@ public class Download extends AbstractLocalTask implements RunnableTask { @Schema( - title = "Source file path on the local filesystem", - description = "Absolute path of the file to download" + title = "Source file path", + description = "Absolute local path of the file to download" ) @NotNull private Property from; @@ -104,4 +104,4 @@ public static class Output implements io.kestra.core.models.tasks.Output { ) private Long size; } -} \ No newline at end of file +} diff --git a/src/main/java/io/kestra/plugin/fs/local/Downloads.java b/src/main/java/io/kestra/plugin/fs/local/Downloads.java index 8f29f1ac..1d734cfd 100644 --- a/src/main/java/io/kestra/plugin/fs/local/Downloads.java +++ b/src/main/java/io/kestra/plugin/fs/local/Downloads.java @@ -30,10 +30,10 @@ @Getter @NoArgsConstructor @Schema( - title = "Download multiple files from a local filesystem directory to Kestra's internal storage.", + title = "Download multiple local files", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Lists files within `allowed-paths`, downloads up to `maxFiles` (default 25) to Kestra storage, then optionally MOVE or DELETE them. + Local access requires configured `allowed-paths`; `moveDirectory` is required when action is MOVE. Example (Kestra config): ```yaml @@ -84,24 +84,24 @@ public class Downloads extends AbstractLocalTask implements RunnableTask { @Schema( - title = "The directory to list" + title = "Directory to list" ) @NotNull private Property from; @Schema( - title = "The action to take on downloaded files" + title = "Action on downloaded files" ) @Builder.Default private Property action = Property.ofValue(Downloads.Action.NONE); @Schema( - title = "The destination directory in case of `MOVE`" + title = "Destination directory when action is MOVE" ) private Property moveDirectory; @Schema( - title = "A regexp to filter on full path" + title = "Regexp filter on full path" ) private Property regExp; @@ -113,7 +113,7 @@ public class Downloads extends AbstractLocalTask implements RunnableTask maxFiles = Property.ofValue(25); diff --git a/src/main/java/io/kestra/plugin/fs/local/List.java b/src/main/java/io/kestra/plugin/fs/local/List.java index 37bbba3b..0773164c 100644 --- a/src/main/java/io/kestra/plugin/fs/local/List.java +++ b/src/main/java/io/kestra/plugin/fs/local/List.java @@ -24,10 +24,10 @@ @Getter @NoArgsConstructor @Schema( - title = "List files in the local filesystem.", + title = "List local files", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Lists files under a directory allowed by `allowed-paths`; optional regexp filter and recursion. Limits results to `maxFiles` (default 25). + Local access requires `allowed-paths` in plugin defaults. Example (Kestra config): ```yaml @@ -61,27 +61,27 @@ public class List extends AbstractLocalTask implements RunnableTask { @Schema( - title = "The fully-qualified URIs that point to the path" + title = "Directory to scan" ) @NotNull private Property from; @Schema( - title = "Regular expression to filter files", - description = "Only files matching this regular expression will be listed." + title = "Regular expression filter", + description = "Only files matching this regex are listed." ) private Property regExp; @Schema( - title = "Whether to include subdirectories", - description = "If true, the task will recursively list files in all subdirectories." + title = "Include subdirectories", + description = "If true, list files recursively." ) @Builder.Default private Property recursive = Property.ofValue(false); @Builder.Default @Schema( - title = "The maximum number of files to retrieve at once" + title = "Maximum files to retrieve" ) private Property maxFiles = Property.ofValue(25); diff --git a/src/main/java/io/kestra/plugin/fs/local/Move.java b/src/main/java/io/kestra/plugin/fs/local/Move.java index 0af9a1ad..eabd0169 100644 --- a/src/main/java/io/kestra/plugin/fs/local/Move.java +++ b/src/main/java/io/kestra/plugin/fs/local/Move.java @@ -24,10 +24,11 @@ @Getter @NoArgsConstructor @Schema( - title = "Move files within the local filesystem.", + title = "Move or rename local files", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Moves files or directories within configured `allowed-paths`; destination parents are created as needed. + Overwrite is false by default and directories cannot be moved into themselves. + Local access requires `allowed-paths` in plugin defaults. Example (Kestra config): ```yaml @@ -60,20 +61,20 @@ ) public class Move extends AbstractLocalTask implements RunnableTask { @Schema( - title = "The file or directory to move from the local file system" + title = "Source file or directory path" ) @NotNull private Property from; @Schema( - title = "The path to move the file or directory to on the local file system" + title = "Destination path on the local file system" ) @NotNull private Property to; @Schema( - title = "Overwrite", - description = "If set to false, it will raise an exception if the destination folder or file already exists." + title = "Overwrite existing files", + description = "If false, the task fails when the destination already exists." ) @Builder.Default protected Property overwrite = Property.ofValue(false); @@ -186,4 +187,4 @@ private void moveDirectory(Path sourceDir, Path targetDir, boolean overwrite, Ru runContext.logger().info("Moved directory from '{}' to '{}'", sourceDir, targetDir); } -} \ No newline at end of file +} diff --git a/src/main/java/io/kestra/plugin/fs/local/Trigger.java b/src/main/java/io/kestra/plugin/fs/local/Trigger.java index a9636f0e..1bd8ac81 100644 --- a/src/main/java/io/kestra/plugin/fs/local/Trigger.java +++ b/src/main/java/io/kestra/plugin/fs/local/Trigger.java @@ -30,10 +30,10 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow as soon as new files are detected in a given local file system's directory.", + title = "Trigger on new local files", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Polls a directory under configured `allowed-paths` (default every 60s) and fires when files are created or updated. + Limits to `maxFiles` (default 25) and can MOVE or DELETE matched files; `moveDirectory` is required when MOVE is chosen. Example (Kestra config): ```yaml @@ -78,18 +78,18 @@ ) public class Trigger extends AbstractTrigger implements PollingTriggerInterface, TriggerOutput, StatefulTriggerInterface { - @Schema(title = "The interval between checks") + @Schema(title = "Interval between checks") @Builder.Default private final Duration interval = Duration.ofSeconds(60); @Schema( - title = "The directory to list" + title = "Directory to watch" ) @NotNull private Property from; @Schema( - title = "The destination directory in case of `MOVE`" + title = "Destination directory when action is MOVE" ) private Property moveDirectory; @@ -101,7 +101,7 @@ public class Trigger extends AbstractTrigger implements PollingTriggerInterface, private Property recursive = Property.ofValue(false); @Schema( - title = "The action to take on downloaded files" + title = "Action to take on matched files" ) @Builder.Default private Property action = Property.ofValue(Downloads.Action.NONE); @@ -114,7 +114,7 @@ public class Trigger extends AbstractTrigger implements PollingTriggerInterface, @Builder.Default @Schema( - title = "The maximum number of files to retrieve at once" + title = "Maximum files to process per poll" ) private Property maxFiles = Property.ofValue(25); diff --git a/src/main/java/io/kestra/plugin/fs/local/Upload.java b/src/main/java/io/kestra/plugin/fs/local/Upload.java index 23b60d43..abb67172 100644 --- a/src/main/java/io/kestra/plugin/fs/local/Upload.java +++ b/src/main/java/io/kestra/plugin/fs/local/Upload.java @@ -24,10 +24,10 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload a file to a local filesystem.", + title = "Upload file to the local filesystem", description = """ - Local filesystem access is disabled by default. - You must configure the plugin default `allowed-paths` in your Kestra configuration. + Writes a file from Kestra internal storage to a local path under configured `allowed-paths`; access outside is denied. + Source must be a `kestra://` URI. Overwrite defaults to true; destination path defaults to the source filename. Example (Kestra config): ```yaml @@ -67,20 +67,21 @@ public class Upload extends AbstractLocalTask implements RunnableTask from; @Schema( - title = "The destination path, if not set the task will use the name of the file denoted by the `from` property" + title = "Destination path", + description = "Optional local path; defaults to the source filename when omitted" ) private Property to; @Schema( - title = "Whether to overwrite existing files", - description = "If false, the task will throw an error if the target file already exists" + title = "Overwrite existing files", + description = "If false, the task fails when the target file already exists" ) @Builder.Default private Property overwrite = Property.ofValue(true); @@ -143,4 +144,4 @@ public static class Output implements io.kestra.core.models.tasks.Output { ) private Long size; } -} \ No newline at end of file +} diff --git a/src/main/java/io/kestra/plugin/fs/nfs/CheckMount.java b/src/main/java/io/kestra/plugin/fs/nfs/CheckMount.java index bed70368..17d6aa17 100644 --- a/src/main/java/io/kestra/plugin/fs/nfs/CheckMount.java +++ b/src/main/java/io/kestra/plugin/fs/nfs/CheckMount.java @@ -22,7 +22,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Check if a path is a valid and accessible NFS mount." + title = "Validate an NFS mount path", + description = "Checks whether the given path resides on an NFS file store and reports the detected store type." ) @Plugin( examples = { @@ -47,7 +48,7 @@ public class CheckMount extends Task implements RunnableTask private NfsService nfsService = NfsService.getInstance(); @Schema( - title = "The NFS path to check." + title = "NFS path to check" ) @NotNull private Property path; diff --git a/src/main/java/io/kestra/plugin/fs/nfs/Copy.java b/src/main/java/io/kestra/plugin/fs/nfs/Copy.java index d48eeb31..057bf5da 100644 --- a/src/main/java/io/kestra/plugin/fs/nfs/Copy.java +++ b/src/main/java/io/kestra/plugin/fs/nfs/Copy.java @@ -25,7 +25,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Copy a file on an NFS mount." + title = "Copy a file on NFS", + description = "Copies a file between paths on the same NFS mount. Parent directories are created when missing and existing targets are overwritten." ) @Plugin( examples = { @@ -51,11 +52,11 @@ public class Copy extends Task implements RunnableTask { @Builder.Default private NfsService nfsService = NfsService.getInstance(); - @Schema(title = "The path to the file to copy.") + @Schema(title = "Source file path") @NotNull private Property from; - @Schema(title = "The destination path.") + @Schema(title = "Destination path") @NotNull private Property to; diff --git a/src/main/java/io/kestra/plugin/fs/nfs/Delete.java b/src/main/java/io/kestra/plugin/fs/nfs/Delete.java index efe96624..8261fe4c 100644 --- a/src/main/java/io/kestra/plugin/fs/nfs/Delete.java +++ b/src/main/java/io/kestra/plugin/fs/nfs/Delete.java @@ -25,7 +25,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Delete a file from an NFS mount." + title = "Delete a file on NFS", + description = "Removes a file from an NFS mount. By default `errorOnMissing` is true and raises when the target is absent." ) @Plugin( examples = { @@ -51,11 +52,11 @@ public class Delete extends Task implements RunnableTask { @Builder.Default private NfsService nfsService = NfsService.getInstance(); - @Schema(title = "The path to the file to delete.") + @Schema(title = "Path of the file to delete") @NotNull private Property uri; - @Schema(title = "Raise an error if the file doesn't exist.") + @Schema(title = "Raise an error if missing") @Builder.Default private boolean errorOnMissing = true; diff --git a/src/main/java/io/kestra/plugin/fs/nfs/List.java b/src/main/java/io/kestra/plugin/fs/nfs/List.java index b9be9500..a85f79d1 100644 --- a/src/main/java/io/kestra/plugin/fs/nfs/List.java +++ b/src/main/java/io/kestra/plugin/fs/nfs/List.java @@ -31,7 +31,8 @@ @Getter @NoArgsConstructor @Schema( - title = "List files from an NFS mount point." + title = "List files on an NFS mount", + description = "Lists files under an NFS path with optional regex filtering and recursion. Caps results at `maxFiles` (default 25)." ) @Plugin( examples = { @@ -59,14 +60,14 @@ public class List extends Task implements RunnableTask { @Builder.Default private NfsService nfsService = NfsService.getInstance(); - @Schema(title = "The directory path to list from.") + @Schema(title = "Directory path to list") @NotNull private Property from; - @Schema(title = "A regular expression to filter files.") + @Schema(title = "Regular expression to filter files") private Property regExp; - @Schema(title = "Whether to list files recursively.") + @Schema(title = "List files recursively") @Builder.Default private Property recursive = Property.ofValue(false); diff --git a/src/main/java/io/kestra/plugin/fs/nfs/Move.java b/src/main/java/io/kestra/plugin/fs/nfs/Move.java index d7992045..c101773f 100644 --- a/src/main/java/io/kestra/plugin/fs/nfs/Move.java +++ b/src/main/java/io/kestra/plugin/fs/nfs/Move.java @@ -25,7 +25,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Move a file on an NFS mount." + title = "Move or rename a file on NFS", + description = "Moves or renames a file on an NFS mount. Parent directories are created as needed and existing targets are overwritten." ) @Plugin( examples = { @@ -52,11 +53,11 @@ public class Move extends Task implements RunnableTask { @Builder.Default private NfsService nfsService = NfsService.getInstance(); - @Schema(title = "The path to the file to move.") + @Schema(title = "Source file path") @NotNull private Property from; - @Schema(title = "The destination path.") + @Schema(title = "Destination path") @NotNull private Property to; diff --git a/src/main/java/io/kestra/plugin/fs/nfs/Trigger.java b/src/main/java/io/kestra/plugin/fs/nfs/Trigger.java index 1bc64d25..3fc52a9e 100644 --- a/src/main/java/io/kestra/plugin/fs/nfs/Trigger.java +++ b/src/main/java/io/kestra/plugin/fs/nfs/Trigger.java @@ -34,7 +34,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow when files are detected or modified on an NFS mount." + title = "Trigger on NFS file changes", + description = "Polls an NFS directory (default every 60s) and fires when files match `on` (CREATE/UPDATE). Supports regex filtering, optional recursion, and limits to `maxFiles` (default 25)." ) @Plugin( examples = { @@ -67,29 +68,29 @@ public class Trigger extends AbstractTrigger implements PollingTriggerInterface, @Builder.Default private NfsService nfsService = NfsService.getInstance(); - @Schema(title = "The directory path to watch.") + @Schema(title = "Directory path to watch") @NotNull private Property from; - @Schema(title = "A regular expression to filter files.") + @Schema(title = "Regular expression to filter files") private Property regExp; - @Schema(title = "Whether to list files recursively.") + @Schema(title = "List files recursively") @Builder.Default private Boolean recursive = false; - @Schema(title = "The interval between checks.") + @Schema(title = "Interval between checks") @Builder.Default private Duration interval = Duration.ofSeconds(60); - @Schema(title = "When to trigger the flow (CREATE, UPDATE, or CREATE_OR_UPDATE).") + @Schema(title = "Trigger condition (CREATE, UPDATE, CREATE_OR_UPDATE)") @Builder.Default private Property on = Property.ofValue(On.CREATE_OR_UPDATE); - @Schema(title = "Unique key for storing the trigger state.") + @Schema(title = "Unique key for storing the trigger state") private Property stateKey; - @Schema(title = "Time-to-live for the trigger state.") + @Schema(title = "Time-to-live for the trigger state") private Property stateTtl; @Builder.Default diff --git a/src/main/java/io/kestra/plugin/fs/sftp/Delete.java b/src/main/java/io/kestra/plugin/fs/sftp/Delete.java index 6899a64f..e2fc812c 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/Delete.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/Delete.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Delete a file from an SFTP server." + title = "Delete a remote SFTP file", + description = "Removes the specified file on the server. Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/sftp/Download.java b/src/main/java/io/kestra/plugin/fs/sftp/Download.java index 4c9a1664..52f3c170 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/Download.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/Download.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download a file from an SFTP server." + title = "Download a file via SFTP", + description = "Fetches a single remote file to internal storage. Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/sftp/Downloads.java b/src/main/java/io/kestra/plugin/fs/sftp/Downloads.java index ff3c308e..98693d85 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/Downloads.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/Downloads.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download multiple files from an SFTP server." + title = "Download multiple files via SFTP", + description = "Lists matching files then downloads them to internal storage. Respects `maxFiles` (default 25) and optional post-download action (MOVE/DELETE). Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/sftp/List.java b/src/main/java/io/kestra/plugin/fs/sftp/List.java index 7567417f..08892061 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/List.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/List.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "List files from an SFTP server directory." + title = "List files in an SFTP directory", + description = "Lists entries under the given path with optional regexp filter. Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/sftp/Move.java b/src/main/java/io/kestra/plugin/fs/sftp/Move.java index 83f207df..c37b64e7 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/Move.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/Move.java @@ -18,8 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Move a file to an SFTP server.", - description ="If the destination directory doesn't exist, it will be created" + title = "Move or rename an SFTP file", + description = "Moves/renames a remote file; destination directories are created when missing. Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/sftp/SftpInterface.java b/src/main/java/io/kestra/plugin/fs/sftp/SftpInterface.java index 8dde15f1..f460fe64 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/SftpInterface.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/SftpInterface.java @@ -5,8 +5,8 @@ public interface SftpInterface { @Schema( - title = "Private key file in the PEM format to connect to a remote server using SSH", - description = "To generate a PEM-format key from OpenSSH, use the following command: `ssh-keygen -m PEM`" + title = "SSH private key (PEM)", + description = "PEM-formatted private key for public key auth. Convert OpenSSH keys with `ssh-keygen -m PEM`." ) Property getKeyfile(); @@ -17,8 +17,8 @@ public interface SftpInterface { @Deprecated @Schema( - title = "SFTP proxy host", - description = "Use 'proxyAddress' instead. This property is deprecated and will be removed in a future version." + title = "Deprecated proxy host", + description = "Use `proxyAddress` instead; retained for backward compatibility." ) Property getProxyHost(); @@ -34,8 +34,8 @@ public interface SftpInterface { @Deprecated @Schema( - title = "SFTP proxy user", - description = "Use 'proxyUsername' instead. This property is deprecated and will be removed in a future version." + title = "Deprecated proxy user", + description = "Use `proxyUsername` instead; retained for backward compatibility." ) Property getProxyUser(); @@ -50,17 +50,20 @@ public interface SftpInterface { Property getProxyPassword(); @Schema( - title = "SFTP proxy type" + title = "SFTP proxy type", + description = "One of SOCKS5, STREAM, or HTTP." ) Property getProxyType(); @Schema( - title = "Is the path relative to the user's home directory" + title = "Treat path as user home root", + description = "If true (default), remote paths are resolved relative to the authenticated user's home directory." ) Property getRootDir(); @Schema( - title = "Configures the key exchange algorithm explicitly (e.g., diffie-hellman-group14-sha1, diffie-hellman-group-exchange-sha256, diffie-hellman-group-exchange-sha1, diffie-hellman-group1-sha1)." + title = "Key exchange algorithm", + description = "Override the KEX algorithm (e.g. diffie-hellman-group14-sha1, diffie-hellman-group-exchange-sha256)." ) Property getKeyExchangeAlgorithm(); } diff --git a/src/main/java/io/kestra/plugin/fs/sftp/Trigger.java b/src/main/java/io/kestra/plugin/fs/sftp/Trigger.java index 6c2758c2..80807db0 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/Trigger.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/Trigger.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow as soon as new files are detected in a given SFTP server's directory." + title = "Trigger on new SFTP files", + description = "Polls a remote directory on the interval and starts a Flow when new files appear. Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default. Use `action` MOVE/DELETE to prevent repeated triggering." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/sftp/Upload.java b/src/main/java/io/kestra/plugin/fs/sftp/Upload.java index e1201995..5244df70 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/Upload.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/Upload.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload a file to an SFTP server." + title = "Upload a file via SFTP", + description = "Pushes one local file to the remote path. Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/sftp/Uploads.java b/src/main/java/io/kestra/plugin/fs/sftp/Uploads.java index 0b6ecc0d..b06fb3a4 100644 --- a/src/main/java/io/kestra/plugin/fs/sftp/Uploads.java +++ b/src/main/java/io/kestra/plugin/fs/sftp/Uploads.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload files to an SFTP server's directory." + title = "Upload multiple files via SFTP", + description = "Uploads each provided file to the target directory. Defaults: port 22, user home as root, password auth unless a PEM key is provided, host key checking disabled by default." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/Delete.java b/src/main/java/io/kestra/plugin/fs/smb/Delete.java index da22cda1..44162479 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/Delete.java +++ b/src/main/java/io/kestra/plugin/fs/smb/Delete.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Delete a file from an SMB (e.g., Samba) server." + title = "Delete a file over SMB", + description = "Removes the specified file on an SMB/CIFS share. Default port 445." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/Download.java b/src/main/java/io/kestra/plugin/fs/smb/Download.java index 24a2eb23..5bd34952 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/Download.java +++ b/src/main/java/io/kestra/plugin/fs/smb/Download.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download a file from an SMB (e.g., Samba) server." + title = "Download a file over SMB", + description = "Fetches a single file from an SMB/CIFS share to internal storage. Default port 445." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/Downloads.java b/src/main/java/io/kestra/plugin/fs/smb/Downloads.java index 9899775a..06df5aa6 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/Downloads.java +++ b/src/main/java/io/kestra/plugin/fs/smb/Downloads.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Download multiple files from an SMB (e.g., Samba) server." + title = "Download multiple files over SMB", + description = "Lists matching files then downloads them to internal storage. Respects `maxFiles` (default 25) and optional post-download action (MOVE/DELETE). Default port 445." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/List.java b/src/main/java/io/kestra/plugin/fs/smb/List.java index 5539d1e8..198d0d28 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/List.java +++ b/src/main/java/io/kestra/plugin/fs/smb/List.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "List files from an SMB (e.g., Samba) server directory." + title = "List files on an SMB share", + description = "Lists entries under the given share path with optional regexp filter. Default port 445." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/Move.java b/src/main/java/io/kestra/plugin/fs/smb/Move.java index 6e9ca507..bb0ae6d8 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/Move.java +++ b/src/main/java/io/kestra/plugin/fs/smb/Move.java @@ -18,8 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Move a file to a different folder on an SMB (e.g., Samba) server directory.", - description = "If the destination directory doesn't exist, it will be created" + title = "Move or rename a file over SMB", + description = "Moves/renames a file on an SMB/CIFS share; destination directories are created when missing. Default port 445." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/Trigger.java b/src/main/java/io/kestra/plugin/fs/smb/Trigger.java index 68acb3a9..ab99c525 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/Trigger.java +++ b/src/main/java/io/kestra/plugin/fs/smb/Trigger.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow on new file arrival in a given SMB (e.g., Samba) server directory." + title = "Trigger on new SMB files", + description = "Polls a share path on the interval and starts a Flow when new files appear. Default port 445. Use `action` MOVE/DELETE to avoid reprocessing." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/Upload.java b/src/main/java/io/kestra/plugin/fs/smb/Upload.java index 84c6f0a6..410341d9 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/Upload.java +++ b/src/main/java/io/kestra/plugin/fs/smb/Upload.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload a file to an SMB (e.g., Samba) server directory." + title = "Upload a file over SMB", + description = "Pushes one local file to an SMB/CIFS share. Default port 445." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/smb/Uploads.java b/src/main/java/io/kestra/plugin/fs/smb/Uploads.java index b499951c..a6bff747 100644 --- a/src/main/java/io/kestra/plugin/fs/smb/Uploads.java +++ b/src/main/java/io/kestra/plugin/fs/smb/Uploads.java @@ -18,7 +18,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Upload files to an SMB (e.g., Samba) server directory." + title = "Upload multiple files over SMB", + description = "Uploads each provided file to the target directory on an SMB/CIFS share. Default port 445." ) @Plugin( examples = { diff --git a/src/main/java/io/kestra/plugin/fs/ssh/Command.java b/src/main/java/io/kestra/plugin/fs/ssh/Command.java index e704c997..3022b0c6 100644 --- a/src/main/java/io/kestra/plugin/fs/ssh/Command.java +++ b/src/main/java/io/kestra/plugin/fs/ssh/Command.java @@ -33,7 +33,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Send a command to a remote server using SSH." + title = "Run commands over SSH", + description = "Executes one or more commands on a remote host via SSH. Supports PASSWORD, PUBLIC_KEY, or OPEN_SSH auth. Default port 22 and strict host key checking off (`no`). Allow weak rsa-sha1 only when `enableSshRsa1` is true." ) @Plugin( examples = { @@ -108,25 +109,22 @@ public class Command extends Task implements SshInterface, RunnableTask openSSHConfigDir = Property.ofValue("~/.ssh/config"); @Schema( - title = "OpenSSH configuration file path used when the authentication method is `OPEN_SSH`." + title = "OpenSSH config file path", + description = "Used when `authMethod` is OPEN_SSH. Access must be allowed via plugin configuration." ) private Property openSSHConfigPath; @Schema( title = "SSH authentication configuration", description = """ - When the authentication method is set to `OPEN_SSH`, access to the local OpenSSH host configuration must be explicitly allowed. - This ensures that the plugin can use SSH settings (such as `Host`, `User`, `Port`, or `IdentityFile`) defined in the user's OpenSSH configuration file. - - To enable this, configure the plugin using "allow-open-ssh-config" in the plugin configuration, as shown below: - + When `authMethod` is OPEN_SSH, access to local SSH config must be allowed with `allow-open-ssh-config: true` in plugin defaults: ```yaml kestra: plugins: @@ -143,13 +141,13 @@ This ensures that the plugin can use SSH settings (such as `Host`, `User`, `Port @Builder.Default private Property port = Property.ofValue("22"); - @Schema(title = "The list of commands to run on the remote server") + @Schema(title = "Commands to execute") @PluginProperty(dynamic = true) @NotNull @NotEmpty private String[] commands; - @Schema(title = "Whether to check if the host public key could be found among known host, one of 'yes', 'no', 'ask'") + @Schema(title = "Strict host key checking", description = "One of yes|no|ask. Default no.") @Builder.Default private Property strictHostKeyChecking = Property.ofValue("no"); diff --git a/src/main/java/io/kestra/plugin/fs/ssh/SshInterface.java b/src/main/java/io/kestra/plugin/fs/ssh/SshInterface.java index 86cbc846..1913a9f4 100644 --- a/src/main/java/io/kestra/plugin/fs/ssh/SshInterface.java +++ b/src/main/java/io/kestra/plugin/fs/ssh/SshInterface.java @@ -8,13 +8,13 @@ public interface SshInterface { String ALLOW_OPEN_SSH_CONFIG = "allow-open-ssh-config"; @Schema( - title = "Hostname of the remote server" + title = "Remote host" ) @NotNull Property getHost(); @Schema( - title = "Port of the remote server" + title = "Remote port" ) Property getPort(); @@ -25,22 +25,26 @@ public interface SshInterface { Property getAuthMethod(); @Schema( - title = "Username on the remote server, required for password auth method" + title = "Username", + description = "Required for PASSWORD and PUBLIC_KEY methods." ) Property getUsername(); @Schema( - title = "Password on the remote server, required for password auth method" + title = "Password", + description = "Required for PASSWORD auth; optional for OPEN_SSH when config supplies credentials." ) Property getPassword(); @Schema( - title = "Private SSH Key to authenticate, required for pubkey auth method" + title = "Private SSH key", + description = "OpenSSH private key content for PUBLIC_KEY auth." ) Property getPrivateKey(); @Schema( - title = "Passphrase used in order to unseal the private key, optional for pubkey auth method" + title = "Private key passphrase", + description = "Optional passphrase for the private key." ) Property getPrivateKeyPassphrase(); diff --git a/src/main/java/io/kestra/plugin/fs/tcp/RealtimeTrigger.java b/src/main/java/io/kestra/plugin/fs/tcp/RealtimeTrigger.java index cd2951a5..0c2b4c4d 100644 --- a/src/main/java/io/kestra/plugin/fs/tcp/RealtimeTrigger.java +++ b/src/main/java/io/kestra/plugin/fs/tcp/RealtimeTrigger.java @@ -33,7 +33,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow when a TCP message is received in real-time." + title = "Trigger on incoming TCP messages", + description = "Listens on a TCP port and fires immediately when data is received. Default bind host 0.0.0.0, UTF-8 decoding. Stops when trigger is canceled or kill/stop is called." ) @Plugin( examples = { @@ -65,15 +66,15 @@ public class RealtimeTrigger extends AbstractTrigger @Builder.Default private TcpService tcpService = TcpService.getInstance(); - @Schema(title = "The interface to bind.", defaultValue = "0.0.0.0") + @Schema(title = "Interface to bind", defaultValue = "0.0.0.0") @Builder.Default private Property host = Property.ofValue("0.0.0.0"); - @Schema(title = "The TCP port to listen on.") + @Schema(title = "TCP port to listen on") @NotNull private Property port; - @Schema(title = "Encoding for incoming data.", defaultValue = "UTF-8") + @Schema(title = "Encoding for incoming data", defaultValue = "UTF-8") @Builder.Default private Property encoding = Property.ofValue(StandardCharsets.UTF_8.name()); diff --git a/src/main/java/io/kestra/plugin/fs/tcp/Send.java b/src/main/java/io/kestra/plugin/fs/tcp/Send.java index a01a7a5d..dcade93d 100644 --- a/src/main/java/io/kestra/plugin/fs/tcp/Send.java +++ b/src/main/java/io/kestra/plugin/fs/tcp/Send.java @@ -25,7 +25,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Send a payload to a TCP server." + title = "Send data to a TCP server", + description = "Opens a TCP socket, sends the payload, and closes the connection. Default encoding UTF-8; set encoding to BASE64 for binary. Connection timeout defaults to 10s." ) @Plugin( examples = { @@ -52,23 +53,23 @@ public class Send extends Task implements RunnableTask { @Builder.Default private TcpService tcpService = TcpService.getInstance(); - @Schema(title = "The target host or IP address.") + @Schema(title = "Target host or IP") @NotNull private Property host; - @Schema(title = "The target port number.") + @Schema(title = "Target port") @NotNull private Property port; - @Schema(title = "The payload to send over TCP.") + @Schema(title = "Payload to send") @NotNull private Property payload; - @Schema(title = "Encoding for the payload. Use 'BASE64' for binary data.", defaultValue = "UTF-8") + @Schema(title = "Payload encoding", description = "Use BASE64 for binary data; otherwise UTF-8.", defaultValue = "UTF-8") @Builder.Default private Property encoding = Property.ofValue(StandardCharsets.UTF_8.name()); - @Schema(title = "Optional timeout for the socket connection.") + @Schema(title = "Socket timeout", description = "Timeout for establishing the connection and IO; default 10s.") private Property timeout; @Override diff --git a/src/main/java/io/kestra/plugin/fs/udp/RealtimeTrigger.java b/src/main/java/io/kestra/plugin/fs/udp/RealtimeTrigger.java index da825e00..8956de1d 100644 --- a/src/main/java/io/kestra/plugin/fs/udp/RealtimeTrigger.java +++ b/src/main/java/io/kestra/plugin/fs/udp/RealtimeTrigger.java @@ -28,7 +28,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Trigger a flow when a UDP message is received in real-time." + title = "Trigger on incoming UDP messages", + description = "Listens on a UDP port and fires immediately for each received datagram. Default bind 0.0.0.0, buffer 1024 bytes, UTF-8 decoding." ) @Plugin( examples = { @@ -56,19 +57,19 @@ public class RealtimeTrigger extends AbstractTrigger implements RealtimeTriggerInterface, TriggerOutput { - @Schema(title = "The interface to bind.", defaultValue = "0.0.0.0") + @Schema(title = "Interface to bind", defaultValue = "0.0.0.0") @Builder.Default private Property host = Property.ofValue("0.0.0.0"); - @Schema(title = "The UDP port to listen on.") + @Schema(title = "UDP port to listen on") @NotNull private Property port; - @Schema(title = "Buffer size in bytes.", defaultValue = "1024") + @Schema(title = "Buffer size in bytes", defaultValue = "1024") @Builder.Default private Property bufferSize = Property.ofValue(1024); - @Schema(title = "Encoding for incoming data.", defaultValue = "UTF-8") + @Schema(title = "Encoding for incoming data", defaultValue = "UTF-8") @Builder.Default private Property encoding = Property.ofValue(StandardCharsets.UTF_8.name()); diff --git a/src/main/java/io/kestra/plugin/fs/udp/Send.java b/src/main/java/io/kestra/plugin/fs/udp/Send.java index a803109d..64476cfb 100644 --- a/src/main/java/io/kestra/plugin/fs/udp/Send.java +++ b/src/main/java/io/kestra/plugin/fs/udp/Send.java @@ -23,7 +23,8 @@ @Getter @NoArgsConstructor @Schema( - title = "Send a UDP datagram message to a specific host and port." + title = "Send a UDP datagram", + description = "Sends a single UDP packet to the target host/port, then closes the socket. Default encoding UTF-8." ) @Plugin( examples = { @@ -45,19 +46,19 @@ } ) public class Send extends Task implements RunnableTask { - @Schema(title = "Target host or IP address.") + @Schema(title = "Target host or IP") @NotNull private Property host; - @Schema(title = "Target UDP port.") + @Schema(title = "Target UDP port") @NotNull private Property port; - @Schema(title = "Message payload to send.") + @Schema(title = "Payload to send") @NotNull private Property payload; - @Schema(title = "Character encoding for the payload.", defaultValue = "UTF-8") + @Schema(title = "Payload encoding", description = "UTF-8 default; use an alternate charset for binary-safe payloads.", defaultValue = "UTF-8") @Builder.Default private Property encoding = Property.ofValue("UTF-8"); diff --git a/src/main/java/io/kestra/plugin/fs/vfs/AbstractVfsInterface.java b/src/main/java/io/kestra/plugin/fs/vfs/AbstractVfsInterface.java index ef6e0542..83046369 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/AbstractVfsInterface.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/AbstractVfsInterface.java @@ -6,23 +6,23 @@ public interface AbstractVfsInterface { @Schema( - title = "Hostname of the remote server" + title = "Remote host" ) @NotNull Property getHost(); @Schema( - title = "Port of the remote server" + title = "Remote port" ) Property getPort(); @Schema( - title = "Username on the remote server" + title = "Username" ) Property getUsername(); @Schema( - title = "Password on the remote server" + title = "Password" ) Property getPassword(); } diff --git a/src/main/java/io/kestra/plugin/fs/vfs/Delete.java b/src/main/java/io/kestra/plugin/fs/vfs/Delete.java index 173bd528..4b6715ea 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/Delete.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/Delete.java @@ -19,12 +19,12 @@ @NoArgsConstructor public abstract class Delete extends AbstractVfsTask implements RunnableTask { @Schema( - title = "The file to delete") + title = "URI of the file to delete") @NotNull private Property uri; @Schema( - title = "raise an error if the file is not found" + title = "Raise error if missing" ) @Builder.Default private final Property errorOnMissing = Property.ofValue(false); diff --git a/src/main/java/io/kestra/plugin/fs/vfs/Download.java b/src/main/java/io/kestra/plugin/fs/vfs/Download.java index e26f56cc..b7a45114 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/Download.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/Download.java @@ -18,7 +18,7 @@ @NoArgsConstructor public abstract class Download extends AbstractVfsTask implements RunnableTask { @Schema( - title = "The fully-qualified URIs that point to destination path" + title = "Source URI to download" ) @NotNull protected Property from; diff --git a/src/main/java/io/kestra/plugin/fs/vfs/Downloads.java b/src/main/java/io/kestra/plugin/fs/vfs/Downloads.java index 033cf69f..6c724a22 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/Downloads.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/Downloads.java @@ -26,23 +26,23 @@ @NoArgsConstructor public abstract class Downloads extends AbstractVfsTask implements RunnableTask { @Schema( - title = "The directory to list" + title = "Directory URI to list" ) @NotNull private Property from; @Schema( - title = "The action to take on downloaded files" + title = "Action on downloaded files" ) private Property action; @Schema( - title = "The destination directory in case of `MOVE`" + title = "Destination directory when action is MOVE" ) private Property moveDirectory; @Schema( - title = "A regexp to filter on full path" + title = "Regexp filter on full path" ) private Property regExp; @@ -54,7 +54,7 @@ public abstract class Downloads extends AbstractVfsTask implements RunnableTask< @Builder.Default @Schema( - title = "The maximum number of files to retrieve at once" + title = "Maximum files to retrieve" ) private Property maxFiles = Property.ofValue(25); diff --git a/src/main/java/io/kestra/plugin/fs/vfs/List.java b/src/main/java/io/kestra/plugin/fs/vfs/List.java index ca3dd00e..d289fdca 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/List.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/List.java @@ -17,13 +17,13 @@ @NoArgsConstructor public abstract class List extends AbstractVfsTask implements RunnableTask { @Schema( - title = "The fully-qualified URIs that point to a path" + title = "Directory URI to list" ) @NotNull protected Property from; @Schema( - title = "A regexp to filter on full path" + title = "Regexp filter on full path" ) private Property regExp; @@ -35,7 +35,7 @@ public abstract class List extends AbstractVfsTask implements RunnableTask maxFiles = Property.ofValue(25); diff --git a/src/main/java/io/kestra/plugin/fs/vfs/Move.java b/src/main/java/io/kestra/plugin/fs/vfs/Move.java index 580cfb45..d179c59f 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/Move.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/Move.java @@ -18,23 +18,21 @@ @NoArgsConstructor public abstract class Move extends AbstractVfsTask implements RunnableTask { @Schema( - title = "The file or directory to move from remote server." + title = "Source file or directory URI" ) @NotNull private Property from; @Schema( - title = "The path to move the file or directory to on the remote server.", - description = "The full destination path (with filename optionally)\n" + - "If end with a `/`, the destination is considered as a directory and filename will be happen\n" + - "If the destFile exists, it is deleted first." + title = "Destination URI", + description = "Full target path. If it ends with `/`, the source name is kept. Existing targets are replaced when `overwrite` is true." ) @NotNull private Property to; @Schema( - title = "Overwrite.", - description = "If set to false, it will raise an exception if the destination folder or file already exists." + title = "Overwrite existing files", + description = "If false (default), fails when the destination already exists." ) @Builder.Default protected Property overwrite = Property.ofValue(false); diff --git a/src/main/java/io/kestra/plugin/fs/vfs/Trigger.java b/src/main/java/io/kestra/plugin/fs/vfs/Trigger.java index fbc88567..0f6a4ef3 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/Trigger.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/Trigger.java @@ -36,7 +36,7 @@ @Getter @NoArgsConstructor public abstract class Trigger extends AbstractTrigger implements PollingTriggerInterface, AbstractVfsInterface, TriggerOutput, StatefulTriggerInterface { - @Schema(title = "The interval between trigger checks") + @Schema(title = "Interval between trigger checks") @Builder.Default private final Duration interval = Duration.ofSeconds(60); @@ -44,18 +44,18 @@ public abstract class Trigger extends AbstractTrigger implements PollingTriggerI protected Property username; protected Property password; - @Schema(title = "The directory to list") + @Schema(title = "Directory URI to watch") @NotNull private Property from; - @Schema(title = "The action to perform on the retrieved files. If using 'NONE' make sure to handle the files inside your flow to avoid infinite triggering.") + @Schema(title = "Action to perform on retrieved files", description = "If NONE, handle files in the Flow to avoid reprocessing.") @NotNull private Property action; - @Schema(title = "The destination directory in case of `MOVE`") + @Schema(title = "Destination directory when action is MOVE") private Property moveDirectory; - @Schema(title = "A regexp to filter on full path") + @Schema(title = "Regexp filter on full path") private Property regExp; @Schema(title = "List files recursively") @@ -63,7 +63,7 @@ public abstract class Trigger extends AbstractTrigger implements PollingTriggerI private Property recursive = Property.ofValue(false); @Builder.Default - @Schema(title = "Enable the RSA/SHA1 algorithm (disabled by default)") + @Schema(title = "Enable RSA/SHA1 algorithm", description = "Disabled by default; enable only if the remote server requires it.") @NotNull private Property enableSshRsa1 = Property.ofValue(false); @@ -74,7 +74,7 @@ public abstract class Trigger extends AbstractTrigger implements PollingTriggerI private Property stateTtl; @Builder.Default - @Schema(title = "The maximum number of files to retrieve at once") + @Schema(title = "Maximum files to process per poll") private Property maxFiles = Property.ofValue(25); private static class PendingFile { diff --git a/src/main/java/io/kestra/plugin/fs/vfs/Upload.java b/src/main/java/io/kestra/plugin/fs/vfs/Upload.java index 543a7c1c..7fabf77a 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/Upload.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/Upload.java @@ -19,20 +19,21 @@ @NoArgsConstructor public abstract class Upload extends AbstractVfsTask implements RunnableTask { @Schema( - title = "The file to copy, must be an internal storage URI" + title = "Source file (kestra:// URI)" ) @NotNull @PluginProperty(internalStorageURI = true) private Property from; @Schema( - title = "The destination path, if not set it will use the name of the file denoted by the `from` property" + title = "Destination path", + description = "If unset, uses the source filename." ) private Property to; @Schema( - title = "Overwrite.", - description = "If set to false, it will raise an exception if the destination folder or file already exists." + title = "Overwrite existing files", + description = "If false (default), fails when the destination already exists." ) @Builder.Default private Property overwrite = Property.ofValue(false); diff --git a/src/main/java/io/kestra/plugin/fs/vfs/Uploads.java b/src/main/java/io/kestra/plugin/fs/vfs/Uploads.java index 4a7cc8ea..42e8c79d 100644 --- a/src/main/java/io/kestra/plugin/fs/vfs/Uploads.java +++ b/src/main/java/io/kestra/plugin/fs/vfs/Uploads.java @@ -27,27 +27,27 @@ @NoArgsConstructor public abstract class Uploads extends AbstractVfsTask implements RunnableTask, Data.From { @Schema( - title = "The files to upload, must be internal storage URIs, must be a list of URIs or a pebble template that returns a list of URIs", + title = "Files to upload (kestra:// URIs)", anyOf = { String.class, List.class, Map.class }, - description = "Must be Kestra internal storage URIs. Can be a single URI string, a list of URI strings, or an internal storage URI pointing to a file containing URIs." + description = "Kestra internal storage URIs; accepts a single URI string, a list of URIs, or a URI pointing to a file that contains URIs." ) @PluginProperty(dynamic = true, internalStorageURI = true) @NotNull private Object from; @Schema( - title = "The destination directory" + title = "Destination directory" ) @NotNull private Property to; @Builder.Default @Schema( - title = "The maximum number of files to retrieve at once" + title = "Maximum files to upload" ) private Property maxFiles = Property.ofValue(25);