mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
[codex] Add optional IDs to response items (#28812)
## Why `ResponseItem` variants do not have a consistent internal ID shape: some variants carry required IDs, some carry optional IDs, and some cannot represent an ID at all. The existing fields also use inconsistent serde, TypeScript, and JSON-schema annotations. A single enum-level access path is needed before history recording can assign and retain IDs. This PR establishes that internal model only. It intentionally does not generate or serialize IDs; allocation and wire persistence are isolated in the stacked follow-up. ## What changed - Give every concrete `ResponseItem` variant an `Option<String>` ID field. - Apply the same internal-only annotations to every ID field: `#[serde(default, skip_serializing)]`, `#[ts(skip)]`, and `#[schemars(skip)]`. - Add `ResponseItem::id()` and `ResponseItem::set_id()` as the shared accessors. - Preserve IDs when history items are rewritten for truncation. - Adapt consumers that previously assumed reasoning and image-generation IDs were required. - Regenerate app-server schemas so the hidden fields are represented consistently. The serde catch-all `ResponseItem::Other` remains ID-less because it must remain a unit variant. ## Test plan - `cargo check --tests -p codex-core -p codex-api -p codex-rollout-trace -p codex-image-generation-extension` - `just test -p codex-protocol` - `just test -p codex-app-server-protocol` - `just test -p codex-api -p codex-rollout-trace -p codex-image-generation-extension` - `just test -p codex-core event_mapping`
This commit is contained in:
committed by
GitHub
Unverified
parent
c274a83f8b
commit
dbd2857f4b
@@ -231,7 +231,10 @@ async fn run_remote_compact_task_inner_impl(
|
||||
)
|
||||
.await?;
|
||||
let mut input = prompt_input.clone();
|
||||
input.push(ResponseItem::CompactionTrigger { metadata: None });
|
||||
input.push(ResponseItem::CompactionTrigger {
|
||||
id: None,
|
||||
metadata: None,
|
||||
});
|
||||
let prompt = Prompt {
|
||||
input,
|
||||
tools: tool_router.model_visible_specs(),
|
||||
@@ -609,11 +612,13 @@ mod tests {
|
||||
metadata: None,
|
||||
},
|
||||
ResponseItem::Compaction {
|
||||
id: None,
|
||||
encrypted_content: "old".to_string(),
|
||||
metadata: None,
|
||||
},
|
||||
];
|
||||
let output = ResponseItem::Compaction {
|
||||
id: None,
|
||||
encrypted_content: "new".to_string(),
|
||||
metadata: None,
|
||||
};
|
||||
@@ -642,6 +647,7 @@ mod tests {
|
||||
new.clone(),
|
||||
];
|
||||
let output = ResponseItem::Compaction {
|
||||
id: None,
|
||||
encrypted_content: "new".to_string(),
|
||||
metadata: None,
|
||||
};
|
||||
@@ -673,6 +679,7 @@ mod tests {
|
||||
metadata: None,
|
||||
}];
|
||||
let output = ResponseItem::Compaction {
|
||||
id: None,
|
||||
encrypted_content: "new".to_string(),
|
||||
metadata: None,
|
||||
};
|
||||
@@ -800,6 +807,7 @@ mod tests {
|
||||
#[tokio::test]
|
||||
async fn collect_compaction_output_accepts_additional_output_items() {
|
||||
let compaction = ResponseItem::Compaction {
|
||||
id: None,
|
||||
encrypted_content: "encrypted".to_string(),
|
||||
metadata: None,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user