Implementiere in TypeScript eine typsichere, wiederverwendbare Retry-Funktion `retry` mit exponentiellem Backoff und Jitter. Anforderungen: - Generisch über den Rückgabetyp der zu wiederholenden async-Funktion (`() => Promise` → `Promise`). - Konfigurierbar: maximale Versuche, Basis-Delay, Backoff-Faktor, maximales Delay, optionales `shouldRetry(error)`-Prädikat. - Nach dem letzten fehlgeschlagenen Versuch wird mit dem zuletzt aufgetretenen Fehler abgebrochen (kein stilles Verschlucken). - Vitest-Tests inklusive Fake-Timers, die die Backoff-Logik und den Abbruch nach `maxAttempts` prüfen. Begründe im Anschluss kurz die wichtigsten Designentscheidungen (u. a. warum Jitter, wie das Delay gedeckelt wird).