@@ -28,6 +28,7 @@ import io.ktor.client.request.setBody
28import io.ktor.http.ContentType
28import io.ktor.http.ContentType
29import io.ktor.http.contentType
29import io.ktor.http.contentType
30import kotlinx.coroutines.delay
30import kotlinx.coroutines.delay
31+import kotlin.random.Random
33 * Request/response wrapper over the opencode REST endpoints. The long-lived `/event`
34 * Request/response wrapper over the opencode REST endpoints. The long-lived `/event`
@@ -171,7 +172,7 @@ internal suspend fun <T> withRetryInternal(
171 if (t is ClientRequestException) throw t
172 if (t is ClientRequestException) throw t
172 if (attempt < maxAttempts) {
173 if (attempt < maxAttempts) {
173 val baseDelay = initialDelayMs * (1 shl (attempt - 1))
174 val baseDelay = initialDelayMs * (1 shl (attempt - 1))
174− val jitter = (baseDelay * jitterFactor * Math.random()).toLong()
175+ val jitter = (baseDelay * jitterFactor * Random.nextDouble()).toLong()
175 delay(baseDelay + jitter)
176 delay(baseDelay + jitter)