diff options
| author | t <t@tjp.lol> | 2026-06-04 09:46:49 -0600 |
|---|---|---|
| committer | t <t@tjp.lol> | 2026-06-04 12:09:09 -0600 |
| commit | 3f1ace16afc7877b0bfad374cb286d4d84140960 (patch) | |
| tree | a114a0081e147ef02f0188e408d79199f5e7dcfc /src | |
| parent | ac5c4898dfa0a9e57424336774893dfc72b132e9 (diff) | |
failure retries scheme
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.zig | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/main.zig b/src/main.zig index be0ac86..61e78d5 100644 --- a/src/main.zig +++ b/src/main.zig @@ -93,8 +93,28 @@ const CLIReceiver = struct { .onBlockComplete = onBlockComplete, .onMessageComplete = onMessageComplete, .onError = onError, + .onProviderRetry = onProviderRetry, }; + /// Surface provider retry scheduling as a dim status line so the user + /// can see the agent is waiting on the provider rather than hung. + fn onProviderRetry(ptr: *anyopaque, info: panto.provider.ProviderRetryInfo) void { + const self: *CLIReceiver = @ptrCast(@alignCast(ptr)); + if (info.compaction) { + self.stdout.print( + "\x1b[2mcontext overflow: compacting and retrying\x1b[0m\n", + .{}, + ) catch {}; + } else { + const secs = @as(f64, @floatFromInt(info.delay_ms)) / 1000.0; + self.stdout.print( + "\x1b[2mprovider unavailable ({s}): retrying in {d:.1}s (attempt {d}/{d})\x1b[0m\n", + .{ @errorName(info.err), secs, info.attempt + 1, info.max_attempts }, + ) catch {}; + } + self.file.flush() catch {}; + } + /// The print-based CLI defers tool-name rendering to onBlockComplete /// to avoid cursor gymnastics (we can't go back and edit the prefix). /// Receivers backed by a TUI capable of in-place updates would render |
