mirror of
https://github.com/openai/codex.git
synced 2026-10-23 18:08:45 +00:00
## What changed Add an optional `protocol_mode` to `McpServerContribution::HostedApps` and apply it when registering the server. Preserve the hosted Apps default when no override is provided. ## Testing Add an integration test that selects MCP `2026-07-28` with the global feature disabled and completes a native user verification flow, including resuming the tool call with the verification response. Extend capability tests to confirm that the override preserves hosted Apps user verification without granting it to ordinary extension registrations. GitOrigin-RevId: e8662c45f964c00b0bb4503bbcfd8432d7e2fa70
56 lines
1.8 KiB
Rust
56 lines
1.8 KiB
Rust
use super::*;
|
|
use codex_config::McpServerTransportConfig;
|
|
use codex_core::config::ConfigBuilder;
|
|
use codex_extension_api::ExtensionData;
|
|
use codex_extension_api::ExtensionDataInit;
|
|
use pretty_assertions::assert_eq;
|
|
|
|
#[tokio::test]
|
|
async fn hosted_plugin_runtime_forwards_thread_originator() -> Result<(), Box<dyn std::error::Error>>
|
|
{
|
|
let codex_home = tempfile::tempdir()?;
|
|
let config = ConfigBuilder::default()
|
|
.codex_home(codex_home.path().to_path_buf())
|
|
.fallback_cwd(Some(codex_home.path().to_path_buf()))
|
|
.cli_overrides(vec![
|
|
("features.apps".to_string(), true.into()),
|
|
("chatgpt_base_url".to_string(), "https://chatgpt.com".into()),
|
|
])
|
|
.build()
|
|
.await?;
|
|
let thread_init = ExtensionDataInit::new();
|
|
let thread_store = ExtensionData::new("thread");
|
|
|
|
let contributions = HostedPluginRuntimeExtension
|
|
.contribute(McpServerContributionContext::for_step(
|
|
&config,
|
|
&thread_init,
|
|
&thread_store,
|
|
"codex_work_desktop",
|
|
/*ready_selected_capability_roots*/ &[],
|
|
/*executor_capability_discovery*/ None,
|
|
))
|
|
.await;
|
|
let [
|
|
McpServerContribution::HostedApps {
|
|
config: server,
|
|
protocol_mode: None,
|
|
},
|
|
] = contributions.as_slice()
|
|
else {
|
|
panic!("hosted plugin runtime should contribute one server");
|
|
};
|
|
let McpServerTransportConfig::StreamableHttp { http_headers, .. } = &server.transport else {
|
|
panic!("hosted plugin runtime should use streamable HTTP");
|
|
};
|
|
|
|
assert_eq!(
|
|
http_headers
|
|
.as_ref()
|
|
.and_then(|headers| headers.get("originator")),
|
|
Some(&"codex_work_desktop".to_string())
|
|
);
|
|
|
|
Ok(())
|
|
}
|