[core] Allow resume after client errors (#2053)

## Summary
Allow tui conversations to resume after the client fails out of retries.
I tested this with exec / mocked api failures as well, and it appears to
be fine. But happy to add an exec integration test as well!

## Testing
- [x] Added integration test
- [x] Tested locally
This commit is contained in:
Dylan
2025-08-08 18:21:19 -07:00
committed by GitHub
parent a2b9f46006
commit 0091930f5a
3 changed files with 159 additions and 4 deletions

View File

@@ -73,15 +73,26 @@ pub fn load_sse_fixture_with_id(path: impl AsRef<std::path::Path>, id: &str) ->
pub async fn wait_for_event<F>(
codex: &codex_core::Codex,
mut predicate: F,
predicate: F,
) -> codex_core::protocol::EventMsg
where
F: FnMut(&codex_core::protocol::EventMsg) -> bool,
{
use tokio::time::Duration;
wait_for_event_with_timeout(codex, predicate, Duration::from_secs(1)).await
}
pub async fn wait_for_event_with_timeout<F>(
codex: &codex_core::Codex,
mut predicate: F,
wait_time: tokio::time::Duration,
) -> codex_core::protocol::EventMsg
where
F: FnMut(&codex_core::protocol::EventMsg) -> bool,
{
use tokio::time::timeout;
loop {
let ev = timeout(Duration::from_secs(1), codex.next_event())
let ev = timeout(wait_time, codex.next_event())
.await
.expect("timeout waiting for event")
.expect("stream ended unexpectedly");