Repository navigation
Releases: soffits/seafile-vault-cli
Releases · soffits/seafile-vault-cli
Release list
Seafile Vault CLI v0.4.1
Fixes
- Removed the default 1 MiB cap from streamed
downloadoperations, so normal PDFs, scans, archives, and other files can be saved to disk without per-command overrides. - Added optional
SEAFILE_MAX_DOWNLOAD_SIZEfor deployments that want an explicit on-disk download cap. - Kept
SEAFILE_MAX_READ_SIZEas the bounded in-memory limit for text, bytes, and base64 reads. - Added named-library profile support for the new download limit and documented the distinction.
Safety and correctness
- Downloads still stream through mode-
0600temporary files, validateContent-Length, calculate SHA-256 while writing, and publish atomically. - Explicit download limits still reject oversized responses and clean up temporary files without corrupting an existing destination.
- Path validation, same-origin download-link checks, token redaction, read-only mode, and MCP boundaries are unchanged.
Verification
- 259 tests passed with Ruff clean.
- Both wheel and source distribution passed
twine check. - A clean Python 3.14 virtual environment installed the wheel with the MCP extra and passed CLI, library-launcher, and package-version smoke tests.
- Live downloads succeeded for files of 1,485,615 bytes and 2,434,047 bytes that previously failed under the old default.
AGPL-3.0-only.
Seafile Vault CLI v0.4.0
Highlights
This release includes all changes since v0.2.0, including the previously unreleased agent-facing workflow improvements.
- Added secure named library profiles through
seafile-library, preserving one repo token and one library per process. - Added bounded recursive filename search with glob, type, case-sensitivity, and overbroad-result protection.
- Added native chunked/resumable uploads with final remote-size verification and safer retry reconciliation.
- Added file copy and synchronous single-directory copy within the scoped library.
- Added finite file locks with an atomic local registry, stale-lock auditing, paired cleanup guidance, and explicit untracked recovery.
- Added optional account-token library/file history, current-library public-share lifecycle, and generated thumbnail previews without changing the default repo-token boundary.
- Added repo-token file/directory restore using explicit commit IDs and confirmation.
- Added Seafile v13 metadata records, views, tags, tag links, file tags, and capability-aware handling for deployments where metadata or tags are disabled.
- Expanded the read-only MCP server with filename search and selected history, share-list, and metadata tools.
Safety and correctness
- Normal unlock refuses paths that are absent from the local registry; recovery requires
--force-untracked --confirm. - Lock acquisition rolls back the server lock if local registry persistence fails.
- Public share creation requires finite expiry and explicit public confirmation; passwords and raw revoke tokens are redacted.
- Share URLs and redirects are constrained to the configured server origin.
- Thumbnail downloads use mode-0600 temporary files, never fall back to the original file, enforce image content/size limits, verify
Content-Length, and publish atomically. - Metadata writes require
read_write, explicit confirmation, and a bounded single JSON object on stdin. - MCP remains read-only.
Verification
- 251 local tests passed with Ruff clean.
- GitHub Actions passed on Python 3.11, 3.12, and 3.13, followed by the build job.
twine checkpassed for both release artifacts.- Clean wheel installation with the MCP extra passed CLI, profile launcher, and FastMCP smoke tests on Python 3.14.
- Reversible live acceptance against Seafile Pro 13.0.25 passed file copy, directory copy, lock audit, unlock cleanup, metadata capability checks, and complete removal of temporary remote data.
- Account-token-backed operations were contract-tested but not exercised against that live instance because no account token was configured.
AGPL-3.0-only.
Seafile Vault CLI v0.2.0
Highlights
- Added a secure streamed
downloadcommand with bounded reads, SHA-256 results, mode-0600 temporary files, held parent-directory descriptors, and atomic publish/overwrite behavior. - Added file-only
statfor direct remote metadata and deterministicremote_not_founderrors. - Added
list --compact,--recursive, and--type file|dir; compact output omits modifier emails, lock metadata, object/repository IDs, and other Seafile internals. - Added idempotent
mkdir --parents. - Plain
mkdirnow rejects exact-name conflicts instead of allowing Seafile to silently create names such asHousing (1).
Safety and correctness
- Temporary download links remain internal to
downloadand are redacted from errors. - Destination symlinks, directories, and special files are rejected.
- Partial writes, truncated responses, size-limit failures, HTTP failures, and missing remote files do not publish partial downloads or corrupt an existing destination.
- Download destination operations use a held parent directory descriptor for validation, temporary creation, atomic publication, cleanup, and fsync.
- Seafile directory-create responses are checked for implicit conflict renames; unexpected renamed directories are cleaned up and reported as errors.
Verification
- 195 local tests passed with Ruff clean.
- GitHub Actions passed on Python 3.11, 3.12, and 3.13, followed by wheel/sdist build and artifact verification.
twine checkpassed for both release artifacts.- Clean wheel installation passed CLI and optional MCP smoke tests.
- A reversible live Seafile smoke test passed recursive/idempotent mkdir, conflict rejection, upload, stat, compact/recursive listing, download, no-overwrite, overwrite, SHA-256 verification, missing-file handling, and complete remote cleanup.
AGPL-3.0-only.
Seafile Vault CLI v0.1.0
Initial public release.
Highlights:
- Repo-token-scoped Seafile CLI with stable JSON output and bounded read/write permissions.
- Native multi-request chunked and resumable uploads with configurable chunk sizes (
64MiB,64MB, or raw bytes). - Complete multipart request bodies stay below the 100,000,000-byte proxy boundary by default.
- Remote final-size verification, bounded retry reconciliation, token/link redaction, and same-origin/TLS checks.
- Optional MCP server for agent workflows.
- AGPL-3.0-only.
Verification:
- 164 local tests passed.
- GitHub Actions passed on Python 3.11, 3.12, and 3.13, followed by artifact verification.
- A reversible 101 MiB upload through a proxied public endpoint completed in two requests; remote size and downloaded SHA-256 matched, and the test artifact was deleted.