summaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig20
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