Create a NEW site (a 'roost') and return its public URL in one call. Returns `{ tenantId, slug, url, apex, uploads? }` — show `url` to the user and remember `tenantId`. NEVER call hatch twice for the same site — use `convert` to rename or change tier, and `upload`/`deploy` for content updates.
Pick `apex` from the user's intent (homes / estate / land / wedding / events / agency / site / omit for theroost.dev). Do NOT invent other apexes.
Four ways to call it:
• Omit `manifest`, `site`, and `script` → a placeholder page is published instantly (best zero-token first turn).
• Pass `manifest` (file list with sizes) → returns presigned `uploads[]`; you PUT each file's bytes directly to its URL. PREFER this for any project with images, fonts, video, or more than a few KB of HTML.
• Pass `site` (inline files map) → small text-only sites only. Files are sent in the request body, so this is expensive in tokens for anything bigger than a handful of HTML/CSS files.
• Pass `script` → advanced: full server-side code as one ES module (1.5 MiB max, text only — NEVER base64-embed binaries here).
Connector