zccyman
973bb124a4
fix(credential-pool): rotate immediately when credential already exhausted
...
Closes #26145 .
When the user interrupts the retry loop between two 429s (Ctrl-C in
interactive mode, /new, gateway disconnect), the local has_retried_429
flag dies with the recovery function. On the next user prompt the agent
restarts with has_retried_429=False, hits 429 on the exhausted credential,
sets the flag, returns 'retry once'. Repeat forever — the second 429 that
would trigger rotation is never reached, and healthy entries (priority>0
free/paid accounts) are never tried.
Fix: in recover_with_credential_pool's rate_limit branch, pre-check
pool.current().last_status before running the retry-once dance. If the
current entry is already STATUS_EXHAUSTED, rotate immediately. Uses
getattr() for the attribute read so existing tests with SimpleNamespace
mocks (which only set 'label') keep working.
Co-authored-by: zccyman <16263913+zccyman@users.noreply.github.com >
2026-05-25 06:21:28 -07:00
..
2026-04-07 17:19:07 -07:00
2026-05-19 17:27:24 -07:00
2026-05-25 01:44:46 -07:00
2026-05-20 13:00:57 -07:00
2026-04-17 12:32:03 -07:00
2026-05-24 15:14:13 -07:00
2026-05-04 05:06:33 -07:00
2026-05-12 20:46:04 -07:00
2026-04-19 22:43:09 -07:00
2026-05-17 02:29:41 -07:00
2026-04-23 13:59:32 -07:00
2026-05-12 13:59:22 -04:00
2026-05-21 12:49:21 +05:30
2026-04-24 03:10:19 -07:00
2026-05-21 12:49:21 +05:30
2026-05-16 20:33:38 -07:00
2026-05-18 10:14:38 -07:00
2026-05-14 07:55:09 -07:00
2026-05-09 21:06:19 -07:00
2026-05-25 04:49:22 -07:00
2026-05-23 02:48:13 -07:00
2026-05-09 12:28:42 -07:00
2026-04-25 08:21:14 -07:00
2026-05-18 21:43:59 -07:00
2026-04-07 17:19:07 -07:00
2026-05-19 17:27:17 -07:00
2026-04-17 12:32:03 -07:00
2026-04-20 05:12:10 -07:00
2026-04-07 17:19:07 -07:00
2026-05-08 14:55:40 -07:00
2026-05-20 11:44:10 -07:00
2026-04-27 08:35:50 -07:00
2026-04-17 12:32:03 -07:00
2026-04-24 03:04:42 -07:00
2026-05-23 02:31:10 -07:00
2026-05-25 06:21:28 -07:00
2026-04-30 23:04:23 -07:00
2026-04-30 11:18:39 -07:00
2026-04-13 10:50:24 -07:00
2026-05-20 11:44:10 -07:00
2026-04-17 14:21:22 -07:00
2026-05-13 06:46:23 -07:00
2026-05-11 07:37:22 -07:00
2026-04-27 06:27:59 -07:00
2026-05-02 02:09:46 -07:00
2026-04-07 17:19:07 -07:00
2026-04-20 23:20:33 -07:00
2026-04-15 22:05:21 -07:00
2026-05-04 12:37:28 -07:00
2026-05-16 22:55:49 -07:00
2026-05-05 05:00:05 -07:00
2026-04-07 17:19:07 -07:00
2026-05-10 22:28:01 -07:00
2026-05-16 22:55:49 -07:00
2026-04-18 22:50:55 -07:00
2026-04-29 04:57:22 -07:00
2026-05-07 08:35:10 -07:00
2026-05-21 23:40:16 -07:00
2026-05-25 01:47:55 -07:00
2026-05-25 17:43:10 +05:30
2026-04-10 03:44:43 -07:00
2026-05-23 17:38:19 -07:00
2026-05-16 17:12:48 -07:00
2026-05-15 14:06:51 -07:00
2026-05-09 12:48:19 -07:00
2026-05-17 11:55:25 -07:00
2026-04-13 10:50:24 -07:00
2026-04-07 17:19:07 -07:00
2026-04-24 15:06:41 -07:00
2026-04-24 05:32:08 -07:00
2026-05-09 22:51:25 -07:00
2026-05-25 01:47:55 -07:00
2026-04-22 18:34:25 -07:00
2026-05-24 17:58:25 -07:00
2026-04-16 16:36:33 -07:00
2026-05-12 00:16:45 +05:30
2026-04-07 17:19:07 -07:00
2026-04-07 17:19:07 -07:00
2026-04-20 22:18:49 -07:00
2026-05-09 22:49:35 -07:00
2026-04-25 09:51:39 -07:00
2026-05-15 10:36:38 +05:30
2026-05-16 17:09:41 -07:00
2026-04-07 17:19:07 -07:00
2026-04-22 18:12:42 -07:00
2026-05-13 17:32:22 -07:00
2026-04-24 05:35:43 -07:00
2026-04-28 03:50:51 -07:00
2026-05-23 02:31:10 -07:00
2026-05-09 14:36:58 -07:00
2026-05-04 05:00:37 -07:00
2026-05-19 17:27:24 -07:00
2026-05-24 07:38:24 -07:00
2026-05-16 18:24:05 -07:00
2026-05-19 20:49:11 +01:00
2026-04-15 15:03:28 -07:00
2026-05-20 23:27:10 -07:00