Skill: dodaj przepis z filmu YouTube

Cel: z URL lub ID filmu utwórz krótki przepis i zapisz go do aplikacji.

# INPUT
film_ref: string  # pełny URL YouTube albo 11-znakowe video_id

# OUTPUT
Nowy przepis w systemie przez POST /api/recipes

# BAZA URL
https://13-48-149-190.sslip.io

# AUTORYZACJA
Do wywołań /api/* dodaj:
- X-API-Key: TWÓJ_TOKEN
Do POST /api/recipes dodaj dodatkowo:
- X-Recipe-Token: TWÓJ_TOKEN_ZAPISU
(jeśli serwer używa tego samego tokenu dla obu, może to być ta sama wartość)

# DOKUMENTACJA (gdy nie masz dostępu do kodu źródłowego)
- Otwórz /docs-local
- Strona zawiera aktualny opis endpointów, payloadów i błędów API

# KROKI
1) Wyciągnij video_id:
   - jeśli film_ref pasuje do ^[A-Za-z0-9_-]{11}$, to to jest ID
   - inaczej parsuj URL i użyj:
     - ?v=VIDEO_ID
     - youtu.be/VIDEO_ID
     - /shorts/VIDEO_ID
     - /embed/VIDEO_ID
   - końcowo video_id musi mieć 11 znaków

2) Pobierz transkrypcję:
   POST /api/youtube/transcript
   {"video_id":"VIDEO_ID"}
   Odpowiedź zawiera m.in.:
   - title
   - channel_name (jeśli dostępne)
   - transcript

3) Z transkrypcji zbuduj krótki przepis:
   - title: zwięzła nazwa dania (po polsku)
   - ingredients: tylko niezbędne składniki, 1 składnik = 1 linia
   - instructions: krótkie kroki (4-10 linii), bez dygresji
   - channel_name: z pola channel_name odpowiedzi (lub null)
   - tags: dobierz samodzielnie i zwięźle.
     Użyj wyłącznie:
     1) typu dania,
     2) metody przygotowania,
     3) 1-2 głównych składników.
     Nie dodawaj nazwy kanału do tags (kanał jest osobno w channel_name).
     W UI kanał jest osobnym pierwszym chipem w innym kolorze.
   - source_url: https://www.youtube.com/watch?v=VIDEO_ID
   Uwaga: jeśli ilości nie padają wprost, użyj rozsądnych przybliżeń.

4) Zapisz przepis:
   Wariant A (masz dostęp HTTP):
   POST /api/recipes
   {
     "title":"...",
     "ingredients":"linia1\nlinia2\n...",
     "instructions":"krok1\nkrok2\n...",
     "channel_name":"...",
     "tags":"...",
     "source_url":"https://www.youtube.com/watch?v=VIDEO_ID"
   }

   Wariant B (nie możesz wykonać POST - np. brak Actions):
   Wypisz użytkownikowi SAM blok JSON w dokładnie tym formacie,
   bez komentarzy i bez dodatkowego tekstu w środku bloku.
   Użytkownik wklei go na stronie /recipes/import i poda token dostępu.

5) Zwróć użytkownikowi:
   - id i tytuł utworzonego przepisu
   - krótko: jakie założenia były zgadywane

# OBSŁUGA BŁĘDÓW
- 400: niepoprawne ID/URL → poproś o poprawny link
- 404: brak transkrypcji → poinformuj, że film nie ma dostępnych napisów
- 503: YouTube blokuje IP → zasugeruj ponowienie później lub proxy