Identify detached memory requests as memory consolidation (#40186)

## What changed

- Set `thread_source` to `memory_consolidation` in turn metadata for detached memory requests.
- Verify that startup requests carry matching turn metadata in the request header and nested `client_metadata`.

GitOrigin-RevId: 318d6f097e07463ac7a1c52b35a926532e67b83d
This commit is contained in:
pakrym-oai
2026-08-23 04:54:11 +00:00
committed by copyberry
parent c4b434aae2
commit 7b5b3bd5a2
3 changed files with 17 additions and 0 deletions

View File

@@ -87,6 +87,7 @@ pub async fn detached_memory_responses_metadata(
) -> CodexResponsesMetadata {
CodexResponsesMetadata {
request_kind: Some(CodexResponsesRequestKind::Memory),
thread_source: Some(ThreadSource::MemoryConsolidation),
subagent_header: subagent_header_value(session_source),
sandbox: sandbox.map(ToString::to_string),
sandbox_mode: Some(

View File

@@ -153,6 +153,10 @@ async fn detached_memory_responses_metadata_omits_turn_identity() {
assert!(!header.contains("東京"));
let parsed: Value = serde_json::from_str(&header).expect("valid json");
assert_eq!(parsed["request_kind"].as_str(), Some("memory"));
assert_eq!(
parsed["thread_source"].as_str(),
Some("memory_consolidation")
);
assert_eq!(parsed[SANDBOX_MODE_KEY].as_str(), Some("read-only"));
assert!(parsed.get("session_id").is_none());
assert!(parsed.get("thread_id").is_none());
@@ -205,6 +209,7 @@ async fn detached_memory_responses_metadata_omits_empty_workspace_metadata() {
serde_json::json!({
"request_kind": "memory",
"sandbox_mode": "read-only",
"thread_source": "memory_consolidation",
})
);
}

View File

@@ -507,7 +507,18 @@ async fn memories_startup_phase1_uses_live_thread_service_tier_and_detached_meta
.expect("detached memory request should include workspace metadata");
let metadata: serde_json::Value =
serde_json::from_str(&metadata_header).expect("turn metadata json");
let client_metadata: serde_json::Value = serde_json::from_str(
request.body_json()["client_metadata"]["x-codex-turn-metadata"]
.as_str()
.expect("detached memory request should include client metadata"),
)
.expect("client metadata json");
assert_eq!(client_metadata, metadata);
assert_eq!(metadata["request_kind"].as_str(), Some("memory"));
assert_eq!(
metadata["thread_source"].as_str(),
Some("memory_consolidation")
);
assert_eq!(metadata["sandbox_mode"].as_str(), Some("workspace-write"));
assert!(metadata.get("session_id").is_none());
assert!(metadata.get("thread_id").is_none());