{ config, pkgs, ... }:
let
retry = config.yq-merge.".pi/agent/settings.json".expr.retry;
retriesBeforeCap = delay:
if delay >= retry.maxAgentDelayMs then 0
else 1 + retriesBeforeCap (delay * 2);
in
{
home.file.".pi/agent/extensions/pi-retry" = {
enable = retry.enabled;
source = pkgs.npinsed.ai.pi.pi-retry.outPath;
};
yq-merge.".pi/agent/settings.json".expr.piRetry = {
baseDelayMs = retry.baseDelayMs;
maxDelayMs = retry.maxAgentDelayMs;
# pi-retry counts only failures at the delay cap; subtract earlier retries.
maxRetriesAtMaxDelay = retry.maxRetries - retriesBeforeCap retry.baseDelayMs;
};
}