Preserve raw response usage metadata (#41980)

## What changed

- Include the complete upstream `response.usage` object in
  `ResponseUsageMetadata.metadata` while retaining the existing `amount` field.
- Expose the metadata through `rawResponse/completed` notifications and update
  the generated JSON and TypeScript schemas.

## Testing

- Cover SSE, WebSocket, turn, and compaction completion paths.

GitOrigin-RevId: 6d79b1b4c92ac11abf43ec98f380b4868288a701
This commit is contained in:
sayan-oai authored and copyberry committed 2026-09-01 05:17:11 +00:00
1 parent d038f3448f
commit e017e93ace
14 files changed
+62 -13

No files matched your search

@@ -158,6 +158,7 @@ async fn responses_websocket_preserves_credit_usage_metadata() {
let mut completed = ev_completed("resp-1");
completed["response"]["usage_metadata"] = json!({ "amount": "0.12345678901234567890" });
let expected_metadata = completed["response"]["usage"].clone();
let server =
start_websocket_server(vec![vec![vec![ev_response_created("resp-1"), completed]]]).await;
let harness = websocket_harness_for_codex_backend(&server).await;
@@ -193,6 +194,7 @@ async fn responses_websocket_preserves_credit_usage_metadata() {
usage_metadata,
Some(codex_protocol::ResponseUsageMetadata {
amount: Some("0.12345678901234567890".to_string()),
metadata: Some(expected_metadata),
}),
);
assert_eq!(server.single_connection().len(), 1);