Make direct-provider agent runs durable
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,88 +1,4 @@
|
||||
use super::{is_interactive_remote_command, recovery_action, RecoveryAction};
|
||||
|
||||
// Argument order: has_received_client_actions, is_recoverable, has_retry_budget,
|
||||
// can_attempt_resume_on_error, is_online.
|
||||
|
||||
#[test]
|
||||
fn pre_action_failures_retry() {
|
||||
assert_eq!(
|
||||
recovery_action(false, true, true, true, true),
|
||||
RecoveryAction::RetryNow
|
||||
);
|
||||
// Resume eligibility is irrelevant pre-actions.
|
||||
assert_eq!(
|
||||
recovery_action(false, true, true, false, true),
|
||||
RecoveryAction::RetryNow
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_action_failures_wait_for_connectivity_when_offline() {
|
||||
assert_eq!(
|
||||
recovery_action(false, true, true, true, false),
|
||||
RecoveryAction::RetryWhenOnline
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn pre_action_budget_exhaustion_is_terminal() {
|
||||
// The request has already been retried MAX_RETRIES times; stop.
|
||||
assert_eq!(
|
||||
recovery_action(false, true, false, true, true),
|
||||
RecoveryAction::Fail
|
||||
);
|
||||
assert_eq!(
|
||||
recovery_action(false, true, false, true, false),
|
||||
RecoveryAction::Fail
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn non_recoverable_pre_action_failure_is_terminal() {
|
||||
assert_eq!(
|
||||
recovery_action(false, false, true, true, true),
|
||||
RecoveryAction::Fail
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn post_action_recoverable_failures_resume() {
|
||||
assert_eq!(
|
||||
recovery_action(true, true, true, true, true),
|
||||
RecoveryAction::Resume
|
||||
);
|
||||
// Offline doesn't change the decision; the resume spawn waits for connectivity.
|
||||
assert_eq!(
|
||||
recovery_action(true, true, true, true, false),
|
||||
RecoveryAction::Resume
|
||||
);
|
||||
// The in-request retry budget is irrelevant once actions have executed.
|
||||
assert_eq!(
|
||||
recovery_action(true, true, false, true, true),
|
||||
RecoveryAction::Resume
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn post_action_failures_without_resume_eligibility_are_terminal() {
|
||||
// Resume requests themselves run with can_attempt_resume_on_error=false,
|
||||
// bounding recovery to a single resume.
|
||||
assert_eq!(
|
||||
recovery_action(true, true, true, false, true),
|
||||
RecoveryAction::Fail
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn non_recoverable_post_action_failure_is_terminal() {
|
||||
// A non-recoverable error (e.g. a client error) ends the conversation even
|
||||
// after actions have executed.
|
||||
assert_eq!(
|
||||
recovery_action(true, false, true, true, true),
|
||||
RecoveryAction::Fail
|
||||
);
|
||||
}
|
||||
|
||||
use super::is_interactive_remote_command;
|
||||
#[test]
|
||||
fn raw_interactive_ssh_is_treated_as_remote_for_acp() {
|
||||
for command in [
|
||||
|
||||
@@ -194,7 +194,6 @@ impl SlashCommandRequest {
|
||||
entrypoint,
|
||||
is_auto_resume_after_error: false,
|
||||
}),
|
||||
/*can_attempt_resume_on_error*/ true,
|
||||
is_queued_prompt,
|
||||
ctx,
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user