Sesje wtyczki — zamówienia wieloproduktowe, głosowanie i clone

Plugin Integration API modeluje teraz sesje zdjęciowe jako sesje — jedna wspólna konfiguracja, wiele produktów w jednym zamówieniu — oraz dodaje accept/reject po generacji i endpoint clone sesji.

POST /api/v1/plugin/jobs oraz POST /api/v1/plugin/jobs/batch przyjmują teraz sesję zamiast pojedynczego zadania: jedną session_config (modelka, sceneria, preset, aspect ratio, sugestie) oraz listę subjects[], w której każdy subject opisuje jeden produkt (packshot_asset_id, product_label, product_ref, images_count, ai_model). Serwer tworzy jedno zamówienie i rozwija każdy subject w żądaną liczbę zadań generacji, wszystkie współdzielące konfigurację sesji. Odpowiedź zwraca nowe order_id oraz identyfikatory zadań w podziale na subjects.

DTO zadania niesie teraz kontekst subjektu (packshot_asset_id, product_label, product_ref) oraz nowe pola głosowania po-generacji (voting, voting_at). Trzy nowe endpointy domykają lifecycle: POST /jobs/{id}/accept i POST /jobs/{id}/reject zapisują głos użytkownika dla ukończonego zadania; GET /orders/{id} zwraca pełną kopertę sesji (konfigurację, statystyki per subject, podpisane outputy, podsumowanie kredytowe); POST /orders/{id}/clone ponownie wystawia sesję z tą samą konfiguracją i listą subjects (z opcjonalnym override images_count per product_ref). Payloady webhooków również niosą nowe pola subjektu i głosowania w job.*.

To zmiana łamiąca dla POST /jobs oraz POST /jobs/batch — dawne kształty pojedynczego zadania i {jobs: [...]} już nie są parsowane. Nota migracyjna w referencji endpointów opisuje przejście.