mirror of
https://github.com/openai/codex.git
synced 2026-10-20 17:38:45 +00:00
Support typed content in contextual prompt fragments (#54776)
## Why Contextual fragments and extension-owned world-state sections currently return strings, limiting them to text content. ## What changed - Return `ContentItem` from fragment bodies and rendering, preserving classification and attribution. Apply text markers only to `InputText`; pass other content through unchanged. - Allow extension prompt and world-state contributions to carry typed content, and preserve media in context-window hints. - Hash non-text world-state fragments by their serialized content and role while retaining the existing text hashing behavior. - Add shared content-to-tool-output conversion that preserves image references, image detail, and audio. ## Testing Add coverage for typed world-state hashing and preservation of image content and attribution. Expand code-mode output tests to cover input text, output text, file-backed and inline images, and audio. GitOrigin-RevId: 2ed00d466a3f169b151202f3eef71e667ea64be1
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
load("//:defs.bzl", "codex_rust_crate")
|
||||
|
||||
codex_rust_crate(
|
||||
name = "support",
|
||||
crate_name = "codex_protocol_test_support",
|
||||
crate_srcs = glob(["*.rs"]),
|
||||
)
|
||||
@@ -0,0 +1,16 @@
|
||||
[package]
|
||||
name = "codex-protocol-test-support"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
license.workspace = true
|
||||
|
||||
[lib]
|
||||
path = "lib.rs"
|
||||
test = false
|
||||
doctest = false
|
||||
|
||||
[lints]
|
||||
workspace = true
|
||||
|
||||
[dependencies]
|
||||
codex-protocol = { workspace = true }
|
||||
@@ -0,0 +1,21 @@
|
||||
//! Text assertions for protocol content, shared only by test targets.
|
||||
|
||||
use codex_protocol::models::ContentItem;
|
||||
|
||||
/// Assertion helpers for tests that require text rather than media content.
|
||||
/// Implementations should fail at the calling assertion for non-text content.
|
||||
pub trait ContentItemTestExt {
|
||||
/// Extracts text, panicking at the call site when the content is not text.
|
||||
#[track_caller]
|
||||
fn expect_text(self) -> String;
|
||||
}
|
||||
|
||||
impl ContentItemTestExt for ContentItem {
|
||||
#[track_caller]
|
||||
fn expect_text(self) -> String {
|
||||
match self.into_text() {
|
||||
Some(text) => text,
|
||||
None => panic!("expected text content"),
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user