Upload a document
The file is hashed (SHA-256), stored in content-addressable blob storage, and registered as a new DocumentObject. Duplicates are deduplicated automatically.
Phase 0 uploads are capped by the Next.js / Vercel function body size (~4.5 MB). Larger files land in Phase 1 with client-side hashing and pre-signed direct-to-bucket PUTs.