mirror of
https://github.com/openai/codex.git
synced 2026-11-10 21:00:47 +00:00
Support archiving and restoring cloud threads (#60635)
## What changed - Add cloud archive and unarchive requests and support listing archived threads. - Detach successfully archived threads and emit archive notifications. Report loaded cloud threads from live attachments rather than cached resume metadata, including after archive failures. - Scope resume picker archive state and transcript previews by backend and thread so archiving a cloud session preserves a local session with the same ID. - Limit cloud task archive cleanup to the selected thread, preserving child agents and their active session state, and update the confirmation text accordingly. ## Testing Add regression coverage for archive acknowledgments, archived-thread discovery and restoration, attachment state after archive failures, same-ID sessions across backends, and preservation of attached child agents. GitOrigin-RevId: bd155be85ee911375d4d326b18f9b5abe8e82b3d
This commit is contained in:
committed by
copyberry
parent
627b579219
commit
df82e2fe0a
@@ -109,6 +109,29 @@ async fn activation_sends_only_identity_and_excludes_turns() {
|
||||
assert_request(&mut fixture, "UpdateConfig", &[56, 1, 0x92, 1, 1, b't']).await;
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn archive_addresses_the_requested_thread_and_requires_acknowledgment() {
|
||||
let mut fixture = fixture_responses(vec![
|
||||
response(vec![frame(&[])], tonic::Status::ok("")),
|
||||
response(
|
||||
vec![frame(&[])],
|
||||
tonic::Status::permission_denied("synthetic denial"),
|
||||
),
|
||||
])
|
||||
.await;
|
||||
|
||||
fixture.client.archive_thread("t").await.unwrap();
|
||||
assert_request(&mut fixture, "ArchiveThread", b"\x0a\x01t").await;
|
||||
|
||||
let error = fixture.client.archive_thread("u").await.unwrap_err();
|
||||
let MutationError::OutcomeUnknown(Error::Rpc(status)) = error else {
|
||||
panic!("expected a remote archive failure");
|
||||
};
|
||||
assert_eq!(status.code, tonic::Code::PermissionDenied as i32);
|
||||
assert_request(&mut fixture, "ArchiveThread", b"\x0a\x01u").await;
|
||||
assert!(fixture.requests.try_recv().is_err());
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn activation_preserves_native_settings_and_thread_metadata() {
|
||||
// Native Thread fields encoded independently of the client's wire types.
|
||||
|
||||
Reference in New Issue
Block a user