The previous config approach had a few issues: 1. It is part of the config but not designed to be used externally 2. It had to be wired through many places (look at the +/- on this PR 3. It wasn't guaranteed to be set consistently everywhere because we don't have a super well defined way that configs stack. For example, the extension would configure during newConversation but anything that happened outside of that (like login) wouldn't get it. This env var approach is cleaner and also creates one less thing we have to deal with when coming up with a better holistic story around configs. One downside is that I removed the unit test testing for the override because I don't want to deal with setting the global env or spawning child processes and figuring out how to introspect their originator header. The new code is sufficiently simple and I tested it e2e that I feel as if this is still worth it.
45 lines
1.4 KiB
Rust
45 lines
1.4 KiB
Rust
use codex_core::default_client::get_codex_user_agent;
|
|
use codex_protocol::mcp_protocol::GetUserAgentResponse;
|
|
use mcp_test_support::McpProcess;
|
|
use mcp_test_support::to_response;
|
|
use mcp_types::JSONRPCResponse;
|
|
use mcp_types::RequestId;
|
|
use pretty_assertions::assert_eq;
|
|
use tempfile::TempDir;
|
|
use tokio::time::timeout;
|
|
|
|
const DEFAULT_READ_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(10);
|
|
|
|
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
|
|
async fn get_user_agent_returns_current_codex_user_agent() {
|
|
let codex_home = TempDir::new().unwrap_or_else(|err| panic!("create tempdir: {err}"));
|
|
|
|
let mut mcp = McpProcess::new(codex_home.path())
|
|
.await
|
|
.expect("spawn mcp process");
|
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize())
|
|
.await
|
|
.expect("initialize timeout")
|
|
.expect("initialize request");
|
|
|
|
let request_id = mcp
|
|
.send_get_user_agent_request()
|
|
.await
|
|
.expect("send getUserAgent");
|
|
let response: JSONRPCResponse = timeout(
|
|
DEFAULT_READ_TIMEOUT,
|
|
mcp.read_stream_until_response_message(RequestId::Integer(request_id)),
|
|
)
|
|
.await
|
|
.expect("getUserAgent timeout")
|
|
.expect("getUserAgent response");
|
|
|
|
let received: GetUserAgentResponse =
|
|
to_response(response).expect("deserialize getUserAgent response");
|
|
let expected = GetUserAgentResponse {
|
|
user_agent: get_codex_user_agent(),
|
|
};
|
|
|
|
assert_eq!(received, expected);
|
|
}
|