Skip to main content

Upload asset

src/upload/ exposes image upload endpoints used by the admin agent editor for icons and screenshots. The exact storage provider (S3, R2, CDN) is configured at deploy time.

Typical flow

Endpoints

The exact controller is small; refer to the API Reference once spec is synced for the latest signatures. As of writing it accepts multipart/form-data with a single file field.

Constraints

  • Max file size — typically 5 MB (check AppConfigService for UPLOAD_MAX_BYTES if exposed).
  • Allowed MIME types — image/png, image/jpeg, image/webp, image/svg+xml.
  • The uploaded URL is public. Don't upload anything you don't want world-readable.

Asset hygiene

  • Icon: square, ≥ 256×256, PNG with transparent background.
  • Hero screenshots: 16:9, ≥ 1600×900, JPG.
  • Keep the file count per agent small (≤ 6 screenshots).

CDN

For production, front the storage bucket with a CDN (Cloudflare, CloudFront) and use the CDN URL in iconUrl and photoUrls[]. Direct bucket URLs work but waste egress.

Cleaning up

No automatic GC. If you replace an agent's icon, the old object stays. A future operations script pnpm tsx scripts/gc-uploads.ts would walk agents, collect referenced URLs, list-delete unreferenced objects.