mirror of
https://github.com/openai/codex.git
synced 2026-11-12 22:42:36 +00:00
test: migrate TestAppServer callers to builder (#31451)
## Why Keep the TestAppServer builder API change reviewable by moving the repository-wide caller migration into a mechanical follow-up. ## What - replace TestAppServer constructor callsites with equivalent builder chains - preserve each caller's automatic-environment, args, program, env, managed-config, plugin-startup, and JSON-logging behavior - make no TestAppServer implementation changes ## Validation - cargo check -p codex-app-server --tests ## Cleanup stack 1. [#31425 test: add TestAppServer builder](https://github.com/openai/codex/pull/31425) 2. [#31451 test: migrate TestAppServer callers to builder](https://github.com/openai/codex/pull/31451) 3. [#31452 test: remove TestAppServer constructors](https://github.com/openai/codex/pull/31452)
This commit is contained in:
1 parent
e60af81b4f
commit
dbd2df27d1
82 files changed
+2873
-814
No files matched your search
@@ -115,8 +115,12 @@ async fn get_auth_status_no_auth() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path())?;
|
create_config_toml(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -142,7 +146,11 @@ async fn get_auth_status_with_api_key() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path())?;
|
create_config_toml(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
||||||
@@ -186,14 +194,15 @@ async fn personal_access_token_without_email_supports_auth_status_and_account_re
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let authapi_base_url = server.uri();
|
let authapi_base_url = server.uri();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
("CODEX_ACCESS_TOKEN", Some("at-test-token")),
|
("CODEX_ACCESS_TOKEN", Some("at-test-token")),
|
||||||
("CODEX_AUTHAPI_BASE_URL", Some(authapi_base_url.as_str())),
|
("CODEX_AUTHAPI_BASE_URL", Some(authapi_base_url.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -256,7 +265,11 @@ async fn get_auth_status_with_api_key_when_auth_not_required() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_custom_provider(codex_home.path(), /*requires_openai_auth*/ false)?;
|
create_config_toml_custom_provider(codex_home.path(), /*requires_openai_auth*/ false)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
||||||
@@ -289,7 +302,11 @@ async fn get_auth_status_with_api_key_no_include_token() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path())?;
|
create_config_toml(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
||||||
@@ -317,7 +334,11 @@ async fn get_auth_status_with_api_key_refresh_requested() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path())?;
|
create_config_toml(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
login_with_api_key_via_request(&mut mcp, "sk-test-key").await?;
|
||||||
@@ -373,16 +394,17 @@ async fn get_auth_status_omits_token_after_permanent_refresh_failure() -> Result
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let refresh_url = format!("{}/oauth/token", server.uri());
|
let refresh_url = format!("{}/oauth/token", server.uri());
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(
|
(
|
||||||
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
||||||
Some(refresh_url.as_str()),
|
Some(refresh_url.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -455,16 +477,17 @@ async fn get_auth_status_omits_token_after_proactive_refresh_failure() -> Result
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let refresh_url = format!("{}/oauth/token", server.uri());
|
let refresh_url = format!("{}/oauth/token", server.uri());
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(
|
(
|
||||||
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
||||||
Some(refresh_url.as_str()),
|
Some(refresh_url.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -522,16 +545,17 @@ async fn get_auth_status_returns_token_after_proactive_refresh_recovery() -> Res
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let refresh_url = format!("{}/oauth/token", server.uri());
|
let refresh_url = format!("{}/oauth/token", server.uri());
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(
|
(
|
||||||
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
||||||
Some(refresh_url.as_str()),
|
Some(refresh_url.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -599,7 +623,11 @@ async fn login_api_key_rejected_when_forced_chatgpt() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_forced_login(codex_home.path(), "chatgpt")?;
|
create_config_toml_forced_login(codex_home.path(), "chatgpt")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -92,7 +92,11 @@ async fn get_conversation_summary_by_thread_id_reads_rollout() -> Result<()> {
|
|||||||
))?,
|
))?,
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -217,7 +221,11 @@ async fn get_conversation_summary_by_relative_rollout_path_resolves_from_codex_h
|
|||||||
let relative_path = rollout_path.strip_prefix(codex_home.path())?.to_path_buf();
|
let relative_path = rollout_path.strip_prefix(codex_home.path())?.to_path_buf();
|
||||||
let expected = expected_summary(thread_id, normalized_canonical_path(rollout_path)?);
|
let expected = expected_summary(thread_id, normalized_canonical_path(rollout_path)?);
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -46,7 +46,11 @@ shell_snapshot = false
|
|||||||
|
|
||||||
async fn initialized_mcp(codex_home: &TempDir) -> Result<TestAppServer> {
|
async fn initialized_mcp(codex_home: &TempDir) -> Result<TestAppServer> {
|
||||||
create_config_toml(codex_home.path())?;
|
create_config_toml(codex_home.path())?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
Ok(mcp)
|
Ok(mcp)
|
||||||
}
|
}
|
||||||
@@ -236,7 +240,11 @@ async fn test_fuzzy_file_search_sorts_and_includes_indices() -> Result<()> {
|
|||||||
.to_string();
|
.to_string();
|
||||||
|
|
||||||
// Start MCP server and initialize.
|
// Start MCP server and initialize.
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let root_path = root.path().to_string_lossy().to_string();
|
let root_path = root.path().to_string_lossy().to_string();
|
||||||
@@ -302,7 +310,11 @@ async fn test_fuzzy_file_search_accepts_cancellation_token() -> Result<()> {
|
|||||||
|
|
||||||
std::fs::write(root.path().join("alpha.txt"), "contents")?;
|
std::fs::write(root.path().join("alpha.txt"), "contents")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let root_path = root.path().to_string_lossy().to_string();
|
let root_path = root.path().to_string_lossy().to_string();
|
||||||
|
|||||||
@@ -68,10 +68,10 @@ async fn app_server_emits_structured_tool_call_timing_event() -> Result<()> {
|
|||||||
"compact",
|
"compact",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new_with_auto_env_and_json_logging(
|
let mut app_server = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
"warn,codex_core::tools::parallel=info",
|
.with_json_logging("warn,codex_core::tools::parallel=info")
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
|
|||||||
@@ -207,8 +207,12 @@ async fn logout_account_removes_auth_and_notifies() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
assert!(codex_home.path().join("auth.json").exists());
|
assert!(codex_home.path().join("auth.json").exists());
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let id = mcp.send_logout_account_request().await?;
|
let id = mcp.send_logout_account_request().await?;
|
||||||
@@ -275,8 +279,12 @@ async fn set_auth_token_updates_account_and_notifies() -> Result<()> {
|
|||||||
.chatgpt_account_id(WORKSPACE_ID_EMBEDDED),
|
.chatgpt_account_id(WORKSPACE_ID_EMBEDDED),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let set_id = mcp
|
let set_id = mcp
|
||||||
@@ -371,8 +379,12 @@ async fn account_read_refresh_token_is_noop_in_external_mode() -> Result<()> {
|
|||||||
.chatgpt_account_id(WORKSPACE_ID_EMBEDDED),
|
.chatgpt_account_id(WORKSPACE_ID_EMBEDDED),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let set_id = mcp
|
let set_id = mcp
|
||||||
@@ -497,8 +509,12 @@ async fn external_auth_refreshes_on_unauthorized() -> Result<()> {
|
|||||||
.chatgpt_account_id(WORKSPACE_ID_REFRESHED),
|
.chatgpt_account_id(WORKSPACE_ID_REFRESHED),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let set_id = mcp
|
let set_id = mcp
|
||||||
@@ -605,8 +621,12 @@ async fn external_auth_refresh_error_fails_turn() -> Result<()> {
|
|||||||
.chatgpt_account_id(WORKSPACE_ID_INITIAL),
|
.chatgpt_account_id(WORKSPACE_ID_INITIAL),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let set_id = mcp
|
let set_id = mcp
|
||||||
@@ -729,8 +749,12 @@ async fn external_auth_refresh_mismatched_workspace_fails_turn() -> Result<()> {
|
|||||||
.chatgpt_account_id(WORKSPACE_ID_DISALLOWED),
|
.chatgpt_account_id(WORKSPACE_ID_DISALLOWED),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let set_id = mcp
|
let set_id = mcp
|
||||||
@@ -846,8 +870,12 @@ async fn external_auth_refresh_invalid_access_token_fails_turn() -> Result<()> {
|
|||||||
.chatgpt_account_id(WORKSPACE_ID_INITIAL),
|
.chatgpt_account_id(WORKSPACE_ID_INITIAL),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let set_id = mcp
|
let set_id = mcp
|
||||||
@@ -940,7 +968,11 @@ async fn login_account_api_key_succeeds_and_notifies() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -994,7 +1026,11 @@ async fn login_account_api_key_rejected_when_forced_chatgpt() -> Result<()> {
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1024,7 +1060,11 @@ async fn login_account_chatgpt_rejected_when_forced_api() -> Result<()> {
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
||||||
@@ -1057,13 +1097,14 @@ async fn login_account_chatgpt_device_code_returns_error_when_disabled() -> Resu
|
|||||||
mock_device_code_usercode_failure(&mock_server, /*status*/ 404).await;
|
mock_device_code_usercode_failure(&mock_server, /*status*/ 404).await;
|
||||||
|
|
||||||
let issuer = mock_server.uri();
|
let issuer = mock_server.uri();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1122,13 +1163,14 @@ async fn login_account_chatgpt_device_code_succeeds_and_notifies() -> Result<()>
|
|||||||
mock_oauth_token(&mock_server, &id_token).await;
|
mock_oauth_token(&mock_server, &id_token).await;
|
||||||
|
|
||||||
let issuer = mock_server.uri();
|
let issuer = mock_server.uri();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1199,13 +1241,14 @@ async fn login_account_chatgpt_device_code_failure_notifies_without_account_upda
|
|||||||
mock_device_code_token_failure(&mock_server, /*status*/ 500).await;
|
mock_device_code_token_failure(&mock_server, /*status*/ 500).await;
|
||||||
|
|
||||||
let issuer = mock_server.uri();
|
let issuer = mock_server.uri();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1274,13 +1317,14 @@ async fn login_account_chatgpt_device_code_can_be_cancelled() -> Result<()> {
|
|||||||
mock_device_code_token_failure(&mock_server, /*status*/ 404).await;
|
mock_device_code_token_failure(&mock_server, /*status*/ 404).await;
|
||||||
|
|
||||||
let issuer = mock_server.uri();
|
let issuer = mock_server.uri();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1347,7 +1391,11 @@ async fn login_account_chatgpt_start_can_be_cancelled() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
||||||
@@ -1413,13 +1461,14 @@ async fn login_account_chatgpt_uses_debug_oauth_overrides() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
(CLIENT_ID_OVERRIDE_ENV_VAR, Some("staging-client")),
|
(CLIENT_ID_OVERRIDE_ENV_VAR, Some("staging-client")),
|
||||||
(LOGIN_ISSUER_ENV_VAR, Some("https://auth.example.com")),
|
(LOGIN_ISSUER_ENV_VAR, Some("https://auth.example.com")),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1474,16 +1523,17 @@ async fn login_account_chatgpt_redirects_to_hosted_success_page() -> Result<()>
|
|||||||
mock_oauth_token(&mock_server, &id_token).await;
|
mock_oauth_token(&mock_server, &id_token).await;
|
||||||
let issuer = mock_server.uri();
|
let issuer = mock_server.uri();
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
(LOGIN_ISSUER_ENV_VAR, Some(issuer.as_str())),
|
||||||
(
|
(
|
||||||
LOGIN_OPEN_APP_URL_ENV_VAR,
|
LOGIN_OPEN_APP_URL_ENV_VAR,
|
||||||
Some("http://localhost:3000/codex/open-app"),
|
Some("http://localhost:3000/codex/open-app"),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1536,7 +1586,11 @@ async fn set_auth_token_cancels_active_chatgpt_login() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
create_config_toml(codex_home.path(), CreateConfigTomlParams::default())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Initiate the ChatGPT login flow
|
// Initiate the ChatGPT login flow
|
||||||
@@ -1611,7 +1665,11 @@ async fn login_account_chatgpt_includes_forced_workspace_query_param() -> Result
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
||||||
@@ -1648,7 +1706,11 @@ async fn login_account_chatgpt_includes_forced_workspace_allowlist_query_param()
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
let request_id = mcp.send_login_account_chatgpt_request().await?;
|
||||||
@@ -1687,8 +1749,12 @@ async fn get_account_no_auth() -> Result<()> {
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let params = GetAccountParams {
|
let params = GetAccountParams {
|
||||||
@@ -1719,7 +1785,11 @@ async fn get_account_with_api_key() -> Result<()> {
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -1763,7 +1833,11 @@ async fn get_account_when_auth_not_required() -> Result<()> {
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let params = GetAccountParams {
|
let params = GetAccountParams {
|
||||||
@@ -1804,7 +1878,11 @@ region = "us-west-2"
|
|||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let params = GetAccountParams {
|
let params = GetAccountParams {
|
||||||
@@ -1847,7 +1925,11 @@ async fn get_account_with_managed_bedrock_provider() -> Result<()> {
|
|||||||
AuthKeyringBackendKind::default(),
|
AuthKeyringBackendKind::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1892,8 +1974,12 @@ async fn get_account_with_chatgpt() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let params = GetAccountParams {
|
let params = GetAccountParams {
|
||||||
@@ -1935,8 +2021,12 @@ async fn get_account_with_chatgpt_without_email() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1998,16 +2088,17 @@ async fn get_account_omits_chatgpt_after_permanent_refresh_failure() -> Result<(
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let refresh_url = format!("{}/oauth/token", server.uri());
|
let refresh_url = format!("{}/oauth/token", server.uri());
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(
|
(
|
||||||
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
||||||
Some(refresh_url.as_str()),
|
Some(refresh_url.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -2064,8 +2155,12 @@ async fn get_account_with_chatgpt_missing_plan_claim_returns_unknown() -> Result
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let params = GetAccountParams {
|
let params = GetAccountParams {
|
||||||
|
|||||||
@@ -66,7 +66,11 @@ const DEFAULT_TIMEOUT: Duration = Duration::from_secs(60);
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn list_apps_returns_empty_when_connectors_disabled() -> Result<()> {
|
async fn list_apps_returns_empty_when_connectors_disabled() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -132,7 +136,11 @@ async fn list_apps_returns_empty_with_api_key_auth() -> Result<()> {
|
|||||||
AuthKeyringBackendKind::default(),
|
AuthKeyringBackendKind::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -279,7 +287,12 @@ async fn list_apps_returns_empty_when_workspace_codex_plugins_disabled() -> Resu
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -324,7 +337,11 @@ async fn list_apps_includes_plugin_apps_for_chatgpt_auth() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -384,7 +401,10 @@ async fn list_apps_uses_thread_feature_flag_when_thread_id_is_provided() -> Resu
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_request = mcp
|
let start_request = mcp
|
||||||
@@ -497,7 +517,11 @@ async fn list_apps_keeps_apps_with_app_only_tools_accessible() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -572,7 +596,11 @@ enabled = false
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -695,7 +723,11 @@ async fn list_apps_emits_updates_and_returns_after_both_lists_load() -> Result<(
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -845,7 +877,11 @@ async fn list_apps_waits_for_accessible_data_before_emitting_directory_updates()
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -957,7 +993,11 @@ async fn list_apps_does_not_emit_empty_interim_updates() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1072,7 +1112,11 @@ async fn list_apps_paginates_results() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let first_request = mcp
|
let first_request = mcp
|
||||||
@@ -1198,7 +1242,11 @@ async fn list_apps_force_refetch_preserves_previous_cache_on_failure() -> Result
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let initial_request = mcp
|
let initial_request = mcp
|
||||||
@@ -1328,7 +1376,11 @@ async fn list_apps_force_refetch_patches_updates_from_cached_snapshots() -> Resu
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let warm_request = mcp
|
let warm_request = mcp
|
||||||
|
|||||||
@@ -67,8 +67,12 @@ async fn attestation_generate_round_trip_adds_header_to_responses_websocket_hand
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let initialized = timeout(
|
let initialized = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
mcp.initialize_with_capabilities(
|
mcp.initialize_with_capabilities(
|
||||||
|
|||||||
@@ -41,7 +41,10 @@ async fn thread_start_with_auto_env_exposes_fixture_cwd_to_model() -> Result<()>
|
|||||||
"compact",
|
"compact",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
let expected_environment = mcp.auto_env_params()?;
|
let expected_environment = mcp.auto_env_params()?;
|
||||||
|
|
||||||
@@ -110,7 +113,10 @@ async fn auto_env_rejects_explicit_environment_config() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
std::fs::write(codex_home.path().join("environments.toml"), "")?;
|
std::fs::write(codex_home.path().join("environments.toml"), "")?;
|
||||||
|
|
||||||
let result = TestAppServer::new_with_auto_env(codex_home.path()).await;
|
let result = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await;
|
||||||
let Err(err) = result else {
|
let Err(err) = result else {
|
||||||
anyhow::bail!("auto-env construction unexpectedly succeeded");
|
anyhow::bail!("auto-env construction unexpectedly succeeded");
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -59,7 +59,10 @@ async fn turn_start_forwards_client_metadata_to_responses_request_v2() -> Result
|
|||||||
/*supports_websockets*/ false,
|
/*supports_websockets*/ false,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -155,7 +158,11 @@ async fn turn_start_sends_fork_lineage_in_turn_metadata_for_thread_fork_v2() ->
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let ThreadForkResponse { thread, .. } =
|
let ThreadForkResponse { thread, .. } =
|
||||||
@@ -239,7 +246,11 @@ async fn review_start_sends_parent_lineage_in_turn_metadata_for_thread_fork_v2()
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let ThreadForkResponse { thread, .. } =
|
let ThreadForkResponse { thread, .. } =
|
||||||
@@ -339,7 +350,11 @@ async fn turn_start_sends_nested_subagent_lineage_after_cold_thread_resume_v2()
|
|||||||
parent_thread_id,
|
parent_thread_id,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_req = mcp
|
let resume_req = mcp
|
||||||
@@ -434,7 +449,10 @@ async fn turn_steer_updates_client_metadata_on_follow_up_responses_request_v2()
|
|||||||
/*supports_websockets*/ false,
|
/*supports_websockets*/ false,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -559,7 +577,10 @@ async fn turn_start_forwards_client_metadata_to_responses_websocket_request_body
|
|||||||
/*supports_websockets*/ true,
|
/*supports_websockets*/ true,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
|
|||||||
@@ -28,7 +28,11 @@ const DEFAULT_TIMEOUT: Duration = Duration::from_secs(60);
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn list_collaboration_modes_returns_presets() -> Result<()> {
|
async fn list_collaboration_modes_returns_presets() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,11 @@ async fn command_exec_without_streams_can_be_terminated() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let process_id = "sleep-1".to_string();
|
let process_id = "sleep-1".to_string();
|
||||||
@@ -92,7 +96,11 @@ async fn command_exec_without_process_id_keeps_buffered_compatibility() -> Resul
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -140,10 +148,11 @@ async fn command_exec_env_overrides_merge_with_server_environment_and_support_un
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[("COMMAND_EXEC_BASELINE", Some("server"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[("COMMAND_EXEC_BASELINE", Some("server"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -198,7 +207,11 @@ async fn command_exec_accepts_permission_profile() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -249,7 +262,11 @@ async fn command_exec_permission_profile_starts_selected_network_proxy() -> Resu
|
|||||||
codex_home.path(),
|
codex_home.path(),
|
||||||
/*default_permissions*/ None,
|
/*default_permissions*/ None,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -297,7 +314,11 @@ async fn command_exec_permission_profile_does_not_reuse_default_network_proxy()
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
insert_networked_permission_profile_config(codex_home.path(), Some("networked"))?;
|
insert_networked_permission_profile_config(codex_home.path(), Some("networked"))?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -355,7 +376,11 @@ async fn command_exec_permission_profile_project_roots_use_command_cwd() -> Resu
|
|||||||
":workspace_roots" = "write"
|
":workspace_roots" = "write"
|
||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -406,10 +431,11 @@ async fn command_exec_returns_error_when_local_environment_is_disabled() -> Resu
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -445,7 +471,11 @@ async fn command_exec_rejects_sandbox_policy_with_permission_profile() -> Result
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -483,7 +513,11 @@ async fn command_exec_rejects_disable_timeout_with_timeout_ms() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -521,7 +555,11 @@ async fn command_exec_rejects_disable_output_cap_with_output_bytes_cap() -> Resu
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -559,7 +597,11 @@ async fn command_exec_rejects_negative_timeout_ms() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -597,7 +639,11 @@ async fn command_exec_without_process_id_rejects_streaming() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -635,7 +681,11 @@ async fn command_exec_non_streaming_respects_output_cap() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let command_request_id = mcp
|
let command_request_id = mcp
|
||||||
@@ -682,7 +732,11 @@ async fn command_exec_streaming_does_not_buffer_output() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let process_id = "stream-cap-1".to_string();
|
let process_id = "stream-cap-1".to_string();
|
||||||
@@ -746,7 +800,11 @@ async fn command_exec_pipe_streams_output_and_accepts_write() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let process_id = "pipe-1".to_string();
|
let process_id = "pipe-1".to_string();
|
||||||
@@ -822,7 +880,11 @@ async fn command_exec_tty_implies_streaming_and_reports_pty_output() -> Result<(
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let process_id = "tty-1".to_string();
|
let process_id = "tty-1".to_string();
|
||||||
@@ -893,7 +955,11 @@ async fn command_exec_tty_supports_initial_size_and_resize() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let process_id = "tty-size-1".to_string();
|
let process_id = "tty-size-1".to_string();
|
||||||
|
|||||||
@@ -81,7 +81,11 @@ async fn auto_compaction_local_emits_started_and_completed_items() -> Result<()>
|
|||||||
COMPACT_PROMPT,
|
COMPACT_PROMPT,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_thread(&mut mcp).await?;
|
let thread_id = start_thread(&mut mcp).await?;
|
||||||
@@ -164,8 +168,12 @@ async fn auto_compaction_remote_emits_started_and_completed_items() -> Result<()
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_thread(&mut mcp).await?;
|
let thread_id = start_thread(&mut mcp).await?;
|
||||||
@@ -271,7 +279,11 @@ async fn thread_compact_start_triggers_compaction_and_returns_empty_response() -
|
|||||||
COMPACT_PROMPT,
|
COMPACT_PROMPT,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_thread(&mut mcp).await?;
|
let thread_id = start_thread(&mut mcp).await?;
|
||||||
@@ -321,7 +333,11 @@ async fn thread_compact_start_rejects_invalid_thread_id() -> Result<()> {
|
|||||||
COMPACT_PROMPT,
|
COMPACT_PROMPT,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -357,7 +373,11 @@ async fn thread_compact_start_rejects_unknown_thread_id() -> Result<()> {
|
|||||||
COMPACT_PROMPT,
|
COMPACT_PROMPT,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -55,7 +55,11 @@ async fn config_requirements_read_includes_allow_remote_control() -> Result<()>
|
|||||||
codex_home.path().join("requirements.toml"),
|
codex_home.path().join("requirements.toml"),
|
||||||
"allow_remote_control = false\n",
|
"allow_remote_control = false\n",
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_config_requirements_read_request().await?;
|
let request_id = mcp.send_config_requirements_read_request().await?;
|
||||||
@@ -87,7 +91,11 @@ model_reasoning_effort = "medium"
|
|||||||
service_tier = "fast"
|
service_tier = "fast"
|
||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_config_requirements_read_request().await?;
|
let request_id = mcp.send_config_requirements_read_request().await?;
|
||||||
@@ -125,7 +133,11 @@ sandbox_mode = "workspace-write"
|
|||||||
let codex_home_path = codex_home.path().canonicalize()?;
|
let codex_home_path = codex_home.path().canonicalize()?;
|
||||||
let user_file = AbsolutePathBuf::try_from(codex_home_path.join("config.toml"))?;
|
let user_file = AbsolutePathBuf::try_from(codex_home_path.join("config.toml"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -175,7 +187,11 @@ allowed_domains = ["example.com"]
|
|||||||
let codex_home_path = codex_home.path().canonicalize()?;
|
let codex_home_path = codex_home.path().canonicalize()?;
|
||||||
let user_file = AbsolutePathBuf::try_from(codex_home_path.join("config.toml"))?;
|
let user_file = AbsolutePathBuf::try_from(codex_home_path.join("config.toml"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -246,7 +262,11 @@ forced_chatgpt_workspace_id = "{WORKSPACE_ID}"
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -285,7 +305,11 @@ forced_chatgpt_workspace_id = ["{WORKSPACE_ID_A}", "{WORKSPACE_ID_B}"]
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -327,7 +351,11 @@ location = { country = "US", city = "New York", timezone = "America/New_York" }
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -371,7 +399,11 @@ web_search = true
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -412,7 +444,11 @@ default_tools_approval_mode = "prompt"
|
|||||||
let codex_home_path = codex_home.path().canonicalize()?;
|
let codex_home_path = codex_home.path().canonicalize()?;
|
||||||
let user_file = AbsolutePathBuf::try_from(codex_home_path.join("config.toml"))?;
|
let user_file = AbsolutePathBuf::try_from(codex_home_path.join("config.toml"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -536,7 +572,11 @@ width = 320
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -583,7 +623,11 @@ model_reasoning_effort = "high"
|
|||||||
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
||||||
let project_config = AbsolutePathBuf::try_from(project_config_dir)?;
|
let project_config = AbsolutePathBuf::try_from(project_config_dir)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -653,13 +697,14 @@ writable_roots = [{}]
|
|||||||
|
|
||||||
let managed_path_str = managed_path.display().to_string();
|
let managed_path_str = managed_path.display().to_string();
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[(
|
||||||
"CODEX_APP_SERVER_MANAGED_CONFIG_PATH",
|
"CODEX_APP_SERVER_MANAGED_CONFIG_PATH",
|
||||||
Some(&managed_path_str),
|
Some(&managed_path_str),
|
||||||
)],
|
)])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -749,7 +794,11 @@ model = "gpt-old"
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -810,7 +859,11 @@ async fn config_value_write_updates_desktop_settings() -> Result<()> {
|
|||||||
let codex_home = temp_dir.path().canonicalize()?;
|
let codex_home = temp_dir.path().canonicalize()?;
|
||||||
write_config(&temp_dir, "")?;
|
write_config(&temp_dir, "")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let write_id = mcp
|
let write_id = mcp
|
||||||
@@ -859,7 +912,11 @@ model = "gpt-old"
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let write_id = mcp
|
let write_id = mcp
|
||||||
@@ -907,7 +964,11 @@ model = "gpt-old"
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let write_id = mcp
|
let write_id = mcp
|
||||||
@@ -942,7 +1003,11 @@ async fn config_batch_write_applies_multiple_edits() -> Result<()> {
|
|||||||
let codex_home = tmp_dir.path().canonicalize()?;
|
let codex_home = tmp_dir.path().canonicalize()?;
|
||||||
write_config(&tmp_dir, "")?;
|
write_config(&tmp_dir, "")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let writable_root = test_tmp_path_buf();
|
let writable_root = test_tmp_path_buf();
|
||||||
@@ -1014,7 +1079,11 @@ model = "gpt-5.3-spark"
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let batch_id = mcp
|
let batch_id = mcp
|
||||||
@@ -1070,7 +1139,11 @@ async fn config_batch_write_updates_multiple_desktop_settings() -> Result<()> {
|
|||||||
let codex_home = tmp_dir.path().canonicalize()?;
|
let codex_home = tmp_dir.path().canonicalize()?;
|
||||||
write_config(&tmp_dir, "")?;
|
write_config(&tmp_dir, "")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let batch_id = mcp
|
let batch_id = mcp
|
||||||
|
|||||||
@@ -40,7 +40,10 @@ async fn current_time_read_round_trip_adds_reminder_to_model_input() -> Result<(
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let thread_request_id = app_server
|
let thread_request_id = app_server
|
||||||
|
|||||||
@@ -57,7 +57,11 @@ async fn thread_start_normalizes_legacy_dynamic_tools_into_model_request() -> Re
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let visible_schema = json!({
|
let visible_schema = json!({
|
||||||
@@ -171,7 +175,10 @@ async fn thread_start_rejects_hidden_dynamic_tools_without_namespace() -> Result
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let dynamic_tool = DynamicToolSpec::Function(DynamicToolFunctionSpec {
|
let dynamic_tool = DynamicToolSpec::Function(DynamicToolFunctionSpec {
|
||||||
@@ -210,7 +217,11 @@ async fn thread_start_rejects_invalid_dynamic_tool_inputs() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
for (dynamic_tools, expected_error) in [
|
for (dynamic_tools, expected_error) in [
|
||||||
@@ -352,7 +363,10 @@ async fn dynamic_tool_call_round_trip_sends_text_content_items_to_model() -> Res
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let input_schema = json!({
|
let input_schema = json!({
|
||||||
@@ -579,7 +593,10 @@ async fn start_function_dynamic_tool_call(call_id: &str) -> Result<PendingDynami
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let dynamic_tool = DynamicToolSpec::Function(DynamicToolFunctionSpec {
|
let dynamic_tool = DynamicToolSpec::Function(DynamicToolFunctionSpec {
|
||||||
|
|||||||
@@ -27,7 +27,11 @@ async fn environment_add_applies_connect_timeout() -> Result<()> {
|
|||||||
Ok::<_, anyhow::Error>(())
|
Ok::<_, anyhow::Error>(())
|
||||||
});
|
});
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let request_id = app_server
|
let request_id = app_server
|
||||||
|
|||||||
@@ -40,7 +40,11 @@ async fn environment_info_returns_remote_environment_info() -> Result<()> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
||||||
add_environment(
|
add_environment(
|
||||||
&mut app_server,
|
&mut app_server,
|
||||||
@@ -88,7 +92,11 @@ async fn environment_info_accepts_missing_cwd() -> Result<()> {
|
|||||||
});
|
});
|
||||||
|
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
||||||
add_environment(
|
add_environment(
|
||||||
&mut app_server,
|
&mut app_server,
|
||||||
@@ -125,7 +133,11 @@ async fn environment_info_accepts_missing_cwd() -> Result<()> {
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn environment_info_rejects_unknown_environment() -> Result<()> {
|
async fn environment_info_rejects_unknown_environment() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let request_id = app_server
|
let request_id = app_server
|
||||||
@@ -158,7 +170,11 @@ async fn environment_info_reports_connection_failure() -> Result<()> {
|
|||||||
let listener = TcpListener::bind("127.0.0.1:0").await?;
|
let listener = TcpListener::bind("127.0.0.1:0").await?;
|
||||||
let exec_server_url = format!("ws://{}", listener.local_addr()?);
|
let exec_server_url = format!("ws://{}", listener.local_addr()?);
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
timeout(RPC_TIMEOUT, app_server.initialize()).await??;
|
||||||
add_environment(&mut app_server, &exec_server_url, Some(50)).await?;
|
add_environment(&mut app_server, &exec_server_url, Some(50)).await?;
|
||||||
|
|
||||||
|
|||||||
@@ -176,7 +176,11 @@ HTTP_PROXY = {http_proxy}
|
|||||||
}))?,
|
}))?,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let selected_thread = start_thread(
|
let selected_thread = start_thread(
|
||||||
|
|||||||
@@ -81,7 +81,11 @@ stream_max_retries = 0
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let request_id = app_server
|
let request_id = app_server
|
||||||
|
|||||||
@@ -30,7 +30,11 @@ const DEFAULT_TIMEOUT: Duration = Duration::from_secs(10);
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn mock_experimental_method_requires_experimental_api_capability() -> Result<()> {
|
async fn mock_experimental_method_requires_experimental_api_capability() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
@@ -62,7 +66,11 @@ async fn mock_experimental_method_requires_experimental_api_capability() -> Resu
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn realtime_conversation_start_requires_experimental_api_capability() -> Result<()> {
|
async fn realtime_conversation_start_requires_experimental_api_capability() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
@@ -109,7 +117,11 @@ async fn realtime_conversation_start_requires_experimental_api_capability() -> R
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn thread_memory_mode_set_requires_experimental_api_capability() -> Result<()> {
|
async fn thread_memory_mode_set_requires_experimental_api_capability() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
@@ -144,7 +156,11 @@ async fn thread_memory_mode_set_requires_experimental_api_capability() -> Result
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn thread_settings_update_requires_experimental_api_capability() -> Result<()> {
|
async fn thread_settings_update_requires_experimental_api_capability() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
@@ -179,7 +195,11 @@ async fn thread_settings_update_requires_experimental_api_capability() -> Result
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn realtime_webrtc_start_requires_experimental_api_capability() -> Result<()> {
|
async fn realtime_webrtc_start_requires_experimental_api_capability() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
@@ -231,7 +251,11 @@ async fn thread_start_mock_field_requires_experimental_api_capability() -> Resul
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
default_client_info(),
|
default_client_info(),
|
||||||
@@ -270,7 +294,11 @@ async fn thread_start_without_dynamic_tools_allows_without_experimental_api_capa
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
default_client_info(),
|
default_client_info(),
|
||||||
@@ -308,7 +336,11 @@ async fn thread_start_granular_approval_policy_requires_experimental_api_capabil
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let init = mcp
|
let init = mcp
|
||||||
.initialize_with_capabilities(
|
.initialize_with_capabilities(
|
||||||
default_client_info(),
|
default_client_info(),
|
||||||
|
|||||||
@@ -50,7 +50,11 @@ async fn experimental_feature_list_returns_feature_metadata_with_stage() -> Resu
|
|||||||
))
|
))
|
||||||
.build()
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -134,7 +138,12 @@ async fn experimental_feature_list_marks_apps_and_plugins_disabled_by_workspace_
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -195,7 +204,12 @@ memories = true
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
@@ -229,7 +243,11 @@ memories = true
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn experimental_feature_list_rejects_unknown_thread_id() -> Result<()> {
|
async fn experimental_feature_list_rejects_unknown_thread_id() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -264,7 +282,11 @@ async fn experimental_feature_enablement_set_applies_to_global_and_thread_config
|
|||||||
let project_cwd = codex_home.path().join("project");
|
let project_cwd = codex_home.path().join("project");
|
||||||
std::fs::create_dir_all(&project_cwd)?;
|
std::fs::create_dir_all(&project_cwd)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let actual = set_experimental_feature_enablement(
|
let actual = set_experimental_feature_enablement(
|
||||||
@@ -301,7 +323,11 @@ async fn experimental_feature_enablement_set_does_not_override_user_config() ->
|
|||||||
codex_home.path().join("config.toml"),
|
codex_home.path().join("config.toml"),
|
||||||
"[features]\nmemories = false\n",
|
"[features]\nmemories = false\n",
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let actual = set_experimental_feature_enablement(
|
let actual = set_experimental_feature_enablement(
|
||||||
@@ -332,7 +358,11 @@ async fn experimental_feature_enablement_set_does_not_override_user_config() ->
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn experimental_feature_enablement_set_only_updates_named_features() -> Result<()> {
|
async fn experimental_feature_enablement_set_only_updates_named_features() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
set_experimental_feature_enablement(
|
set_experimental_feature_enablement(
|
||||||
@@ -407,7 +437,11 @@ async fn experimental_feature_enablement_set_only_updates_named_features() -> Re
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn experimental_feature_enablement_set_allows_remote_control() -> Result<()> {
|
async fn experimental_feature_enablement_set_allows_remote_control() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let remote_control_enabled = false;
|
let remote_control_enabled = false;
|
||||||
let enablement = BTreeMap::from([("remote_control".to_string(), remote_control_enabled)]);
|
let enablement = BTreeMap::from([("remote_control".to_string(), remote_control_enabled)]);
|
||||||
@@ -425,7 +459,11 @@ async fn experimental_feature_enablement_set_allows_remote_control() -> Result<(
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn experimental_feature_enablement_set_empty_map_is_no_op() -> Result<()> {
|
async fn experimental_feature_enablement_set_empty_map_is_no_op() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
set_experimental_feature_enablement(
|
set_experimental_feature_enablement(
|
||||||
@@ -458,7 +496,11 @@ async fn experimental_feature_enablement_set_empty_map_is_no_op() -> Result<()>
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn experimental_feature_enablement_set_ignores_invalid_features() -> Result<()> {
|
async fn experimental_feature_enablement_set_ignores_invalid_features() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let actual = set_experimental_feature_enablement(
|
let actual = set_experimental_feature_enablement(
|
||||||
|
|||||||
@@ -58,13 +58,14 @@ async fn external_agent_config_import_sends_completion_notification_for_sync_onl
|
|||||||
let sqlite_home = TempDir::new()?;
|
let sqlite_home = TempDir::new()?;
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let sqlite_home_dir = sqlite_home.path().display().to_string();
|
let sqlite_home_dir = sqlite_home.path().display().to_string();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home_dir.as_str())),
|
("HOME", Some(home_dir.as_str())),
|
||||||
("CODEX_SQLITE_HOME", Some(sqlite_home_dir.as_str())),
|
("CODEX_SQLITE_HOME", Some(sqlite_home_dir.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -189,16 +190,17 @@ async fn external_agent_config_import_reports_failed_sync_import_in_completion()
|
|||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let analytics_capture_file = codex_home.path().join("analytics-events.jsonl");
|
let analytics_capture_file = codex_home.path().join("analytics-events.jsonl");
|
||||||
let analytics_capture_file = analytics_capture_file.display().to_string();
|
let analytics_capture_file = analytics_capture_file.display().to_string();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home_dir.as_str())),
|
("HOME", Some(home_dir.as_str())),
|
||||||
(
|
(
|
||||||
"CODEX_ANALYTICS_EVENTS_CAPTURE_FILE",
|
"CODEX_ANALYTICS_EVENTS_CAPTURE_FILE",
|
||||||
Some(analytics_capture_file.as_str()),
|
Some(analytics_capture_file.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -335,8 +337,11 @@ async fn external_agent_config_import_completed_tracks_analytics_event() -> Resu
|
|||||||
external_agent_home(codex_home.path()).join("projects/repo/missing.jsonl");
|
external_agent_home(codex_home.path()).join("projects/repo/missing.jsonl");
|
||||||
let project_root = codex_home.path().join("repo");
|
let project_root = codex_home.path().join("repo");
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -458,8 +463,11 @@ async fn external_agent_config_import_sends_completion_notification_for_local_pl
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -551,8 +559,11 @@ async fn external_agent_config_import_sends_completion_notification_after_pendin
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -633,8 +644,11 @@ async fn external_agent_config_import_creates_session_rollouts() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -845,8 +859,11 @@ required = true
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -931,8 +948,11 @@ async fn external_agent_config_import_accepts_detected_session_payload_after_res
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1022,8 +1042,11 @@ async fn external_agent_config_import_skips_already_imported_session_versions()
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1115,8 +1138,11 @@ async fn external_agent_config_import_returns_before_background_session_import_f
|
|||||||
std::fs::write(&session_path, &session_contents)?;
|
std::fs::write(&session_path, &session_contents)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1291,8 +1317,11 @@ async fn external_agent_config_import_compacts_huge_session_before_first_follow_
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home_dir = codex_home.path().display().to_string();
|
let home_dir = codex_home.path().display().to_string();
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("HOME", Some(home_dir.as_str()))])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("HOME", Some(home_dir.as_str()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,11 @@ const DEFAULT_READ_TIMEOUT: Duration = Duration::from_secs(10);
|
|||||||
const OPTIONAL_FS_CHANGE_TIMEOUT: Duration = Duration::from_secs(2);
|
const OPTIONAL_FS_CHANGE_TIMEOUT: Duration = Duration::from_secs(2);
|
||||||
|
|
||||||
async fn initialized_mcp(codex_home: &TempDir) -> Result<TestAppServer> {
|
async fn initialized_mcp(codex_home: &TempDir) -> Result<TestAppServer> {
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
Ok(mcp)
|
Ok(mcp)
|
||||||
}
|
}
|
||||||
@@ -124,10 +128,11 @@ async fn fs_methods_return_error_when_local_environment_is_disabled() -> Result<
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let absolute_file = codex_home.path().join("absolute.txt");
|
let absolute_file = codex_home.path().join("absolute.txt");
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
|
|||||||
@@ -135,7 +135,11 @@ async fn hooks_list_shows_discovered_hook() -> Result<()> {
|
|||||||
let cwd = TempDir::new()?;
|
let cwd = TempDir::new()?;
|
||||||
write_user_hook_config(codex_home.path())?;
|
write_user_hook_config(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -211,7 +215,11 @@ async fn hooks_list_shows_discovered_plugin_hook() -> Result<()> {
|
|||||||
}"#,
|
}"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -299,7 +307,11 @@ async fn hooks_list_warms_plugin_capabilities_for_thread_start() -> Result<()> {
|
|||||||
}"#,
|
}"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let hooks_list_id = mcp
|
let hooks_list_id = mcp
|
||||||
@@ -348,7 +360,11 @@ async fn hooks_list_shows_plugin_hook_load_warnings() -> Result<()> {
|
|||||||
let cwd = TempDir::new()?;
|
let cwd = TempDir::new()?;
|
||||||
write_plugin_hook_config(codex_home.path(), "{ not-json")?;
|
write_plugin_hook_config(codex_home.path(), "{ not-json")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -404,7 +420,11 @@ timeout = 5
|
|||||||
)?;
|
)?;
|
||||||
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -486,7 +506,11 @@ async fn hooks_list_uses_root_repo_hooks_for_linked_worktrees() -> Result<()> {
|
|||||||
write_project_hook_config(&worktree_root.join(".codex"), "echo worktree hook")?;
|
write_project_hook_config(&worktree_root.join(".codex"), "echo worktree hook")?;
|
||||||
set_project_trust_level(codex_home.path(), &repo_root, TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), &repo_root, TrustLevel::Trusted)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let list_id = mcp
|
let list_id = mcp
|
||||||
@@ -556,7 +580,11 @@ async fn config_batch_write_toggles_user_hook() -> Result<()> {
|
|||||||
let cwd = TempDir::new()?;
|
let cwd = TempDir::new()?;
|
||||||
write_user_hook_config(codex_home.path())?;
|
write_user_hook_config(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -707,7 +735,11 @@ command = "python3 {hook_script_path}"
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let hook_list_id = mcp
|
let hook_list_id = mcp
|
||||||
@@ -957,7 +989,11 @@ command = "python3 {hook_script_path}"
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let hook_list_id = mcp
|
let hook_list_id = mcp
|
||||||
|
|||||||
@@ -87,8 +87,12 @@ async fn standalone_image_generation_returns_saved_path_hint_to_model() -> Resul
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
start_image_generation_turn(&mut mcp).await?;
|
start_image_generation_turn(&mut mcp).await?;
|
||||||
|
|
||||||
@@ -185,8 +189,12 @@ async fn standalone_image_generation_failure_emits_terminal_item() -> Result<()>
|
|||||||
ChatGptAuthFixture::new("access-chatgpt"),
|
ChatGptAuthFixture::new("access-chatgpt"),
|
||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
start_image_generation_turn(&mut mcp).await?;
|
start_image_generation_turn(&mut mcp).await?;
|
||||||
|
|
||||||
@@ -306,8 +314,12 @@ async fn standalone_image_generation_is_exposed_in_code_mode_only() -> Result<()
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
start_image_generation_turn(&mut mcp).await?;
|
start_image_generation_turn(&mut mcp).await?;
|
||||||
timeout(
|
timeout(
|
||||||
@@ -369,8 +381,12 @@ generatedImage(result);
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
start_image_generation_turn(&mut mcp).await?;
|
start_image_generation_turn(&mut mcp).await?;
|
||||||
timeout(
|
timeout(
|
||||||
@@ -449,8 +465,12 @@ async fn run_image_edit_test(
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
start_turn(&mut mcp, input).await?;
|
start_turn(&mut mcp, input).await?;
|
||||||
timeout(
|
timeout(
|
||||||
|
|||||||
@@ -33,7 +33,11 @@ async fn initialize_uses_client_info_name_as_originator() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let expected_codex_home = AbsolutePathBuf::try_from(codex_home.path().canonicalize()?)?;
|
let expected_codex_home = AbsolutePathBuf::try_from(codex_home.path().canonicalize()?)?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let message = timeout(
|
let message = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
@@ -68,7 +72,11 @@ async fn initialize_probe_does_not_override_originator() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let message = timeout(
|
let message = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
@@ -95,7 +103,11 @@ async fn initialize_codex_backend_does_not_override_originator() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let message = timeout(
|
let message = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
@@ -123,13 +135,14 @@ async fn initialize_respects_originator_override_env_var() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let expected_codex_home = AbsolutePathBuf::try_from(codex_home.path().canonicalize()?)?;
|
let expected_codex_home = AbsolutePathBuf::try_from(codex_home.path().canonicalize()?)?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[(
|
||||||
"CODEX_INTERNAL_ORIGINATOR_OVERRIDE",
|
"CODEX_INTERNAL_ORIGINATOR_OVERRIDE",
|
||||||
Some("codex_originator_via_env_var"),
|
Some("codex_originator_via_env_var"),
|
||||||
)],
|
)])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let message = timeout(
|
let message = timeout(
|
||||||
@@ -165,10 +178,11 @@ async fn initialize_rejects_invalid_client_name() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[("CODEX_INTERNAL_ORIGINATOR_OVERRIDE", None)],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[("CODEX_INTERNAL_ORIGINATOR_OVERRIDE", None)])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let message = timeout(
|
let message = timeout(
|
||||||
@@ -200,7 +214,10 @@ async fn initialize_opt_out_notification_methods_filters_notifications() -> Resu
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
let message = timeout(
|
let message = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
@@ -283,7 +300,10 @@ async fn turn_start_notify_payload_includes_initialize_client_name() -> Result<(
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(
|
timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
mcp.initialize_with_client_info(ClientInfo {
|
mcp.initialize_with_client_info(ClientInfo {
|
||||||
|
|||||||
@@ -28,7 +28,11 @@ async fn marketplace_add_local_directory_source() -> Result<()> {
|
|||||||
r#"{"name":"sample"}"#,
|
r#"{"name":"sample"}"#,
|
||||||
)?;
|
)?;
|
||||||
std::fs::write(source.join("plugins/sample/marker.txt"), "local ref")?;
|
std::fs::write(source.join("plugins/sample/marker.txt"), "local ref")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -53,7 +53,11 @@ async fn marketplace_remove_deletes_config_and_installed_root() -> Result<()> {
|
|||||||
write_installed_marketplace(codex_home.path(), "debug")?;
|
write_installed_marketplace(codex_home.path(), "debug")?;
|
||||||
let installed_root = marketplace_install_root(codex_home.path()).join("debug");
|
let installed_root = marketplace_install_root(codex_home.path()).join("debug");
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -91,7 +95,11 @@ async fn marketplace_remove_deletes_config_and_installed_root() -> Result<()> {
|
|||||||
async fn marketplace_remove_rejects_unknown_marketplace() -> Result<()> {
|
async fn marketplace_remove_rejects_unknown_marketplace() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -169,7 +169,11 @@ async fn marketplace_upgrade_all_configured_git_marketplaces() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
disable_plugin_startup_tasks(codex_home.path())?;
|
disable_plugin_startup_tasks(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let debug_root = expected_installed_root(codex_home.path(), "debug")?;
|
let debug_root = expected_installed_root(codex_home.path(), "debug")?;
|
||||||
@@ -223,7 +227,11 @@ async fn marketplace_upgrade_named_marketplace_only() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
disable_plugin_startup_tasks(codex_home.path())?;
|
disable_plugin_startup_tasks(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let tools_root = expected_installed_root(codex_home.path(), "tools")?;
|
let tools_root = expected_installed_root(codex_home.path(), "tools")?;
|
||||||
@@ -264,7 +272,11 @@ async fn marketplace_upgrade_returns_empty_roots_when_already_up_to_date() -> Re
|
|||||||
)?;
|
)?;
|
||||||
disable_plugin_startup_tasks(codex_home.path())?;
|
disable_plugin_startup_tasks(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let first_response = send_marketplace_upgrade(&mut mcp, Some("debug")).await?;
|
let first_response = send_marketplace_upgrade(&mut mcp, Some("debug")).await?;
|
||||||
assert!(first_response.errors.is_empty());
|
assert!(first_response.errors.is_empty());
|
||||||
@@ -292,7 +304,11 @@ async fn marketplace_upgrade_rejects_unknown_or_non_git_marketplace() -> Result<
|
|||||||
&configured_local_marketplace_update(&local_source.path().display().to_string()),
|
&configured_local_marketplace_update(&local_source.path().display().to_string()),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
for marketplace_name in ["missing", "local-only"] {
|
for marketplace_name in ["missing", "local-only"] {
|
||||||
|
|||||||
@@ -552,7 +552,11 @@ apps = true
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_request_id = mcp
|
let read_request_id = mcp
|
||||||
@@ -692,7 +696,11 @@ stream_max_retries = 0
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
Ok((codex_home, mcp))
|
Ok((codex_home, mcp))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -422,7 +422,10 @@ impl ElicitationRoundTripFixture {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(
|
timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
mcp.initialize_with_capabilities(
|
mcp.initialize_with_capabilities(
|
||||||
|
|||||||
@@ -67,7 +67,11 @@ url = "{mcp_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -132,7 +136,11 @@ async fn mcp_server_status_list_uses_thread_project_local_config() -> Result<()>
|
|||||||
std::fs::create_dir_all(workspace.path().join(".git"))?;
|
std::fs::create_dir_all(workspace.path().join(".git"))?;
|
||||||
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
@@ -336,7 +344,11 @@ url = "{mcp_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -401,7 +413,11 @@ url = "{underscore_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -107,7 +107,10 @@ url = "{mcp_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
@@ -174,7 +177,11 @@ url = "{mcp_server_url}/mcp"
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn mcp_server_tool_call_returns_error_for_unknown_thread() -> Result<()> {
|
async fn mcp_server_tool_call_returns_error_for_unknown_thread() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -225,7 +232,10 @@ url = "{mcp_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
@@ -336,7 +346,11 @@ url = "{mcp_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
let add_environment_id = mcp
|
let add_environment_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
@@ -474,7 +488,10 @@ url = "{mcp_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
@@ -594,7 +611,10 @@ url = "{mcp_server_url}/mcp"
|
|||||||
));
|
));
|
||||||
std::fs::write(config_path, config_toml)?;
|
std::fs::write(config_path, config_toml)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
|
|||||||
@@ -36,7 +36,11 @@ async fn memory_reset_clears_memory_files_and_rows_preserves_threads() -> Result
|
|||||||
|
|
||||||
let thread_id = seed_stage1_output(&state_db, codex_home.path()).await?;
|
let thread_id = seed_stage1_output(&state_db, codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -96,7 +96,11 @@ fn expected_visible_models() -> Vec<Model> {
|
|||||||
async fn list_models_returns_all_models_with_large_limit() -> Result<()> {
|
async fn list_models_returns_all_models_with_large_limit() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
write_models_cache(codex_home.path())?;
|
write_models_cache(codex_home.path())?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -130,7 +134,11 @@ async fn list_models_returns_all_models_with_large_limit() -> Result<()> {
|
|||||||
async fn list_models_includes_hidden_models() -> Result<()> {
|
async fn list_models_includes_hidden_models() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
write_models_cache(codex_home.path())?;
|
write_models_cache(codex_home.path())?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -216,8 +224,12 @@ openai_base_url = "{server_uri}/v1"
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -273,7 +285,11 @@ openai_base_url = "{server_uri}/v1"
|
|||||||
async fn list_models_pagination_works() -> Result<()> {
|
async fn list_models_pagination_works() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
write_models_cache(codex_home.path())?;
|
write_models_cache(codex_home.path())?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -322,7 +338,11 @@ async fn list_models_pagination_works() -> Result<()> {
|
|||||||
async fn list_models_rejects_invalid_cursor() -> Result<()> {
|
async fn list_models_rejects_invalid_cursor() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
write_models_cache(codex_home.path())?;
|
write_models_cache(codex_home.path())?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
|
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,11 @@ const DEFAULT_TIMEOUT: Duration = Duration::from_secs(30);
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn read_default_provider_capabilities() -> Result<()> {
|
async fn read_default_provider_capabilities() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -46,7 +50,11 @@ async fn read_amazon_bedrock_provider_capabilities() -> Result<()> {
|
|||||||
r#"model_provider = "amazon-bedrock"
|
r#"model_provider = "amazon-bedrock"
|
||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -32,7 +32,10 @@ async fn turn_start_accepts_output_schema_v2() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -115,7 +118,10 @@ async fn turn_start_output_schema_is_per_turn_v2() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
|
|||||||
@@ -41,7 +41,11 @@ description = "Inspect without writes."
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -113,7 +117,11 @@ description = "Project-scoped profile."
|
|||||||
)?;
|
)?;
|
||||||
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let first_request_id = mcp
|
let first_request_id = mcp
|
||||||
@@ -190,7 +198,11 @@ description = "Project-scoped profile."
|
|||||||
)?;
|
)?;
|
||||||
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -53,7 +53,10 @@ async fn plan_mode_uses_proposed_plan_block_for_plan_item() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let turn = start_plan_mode_turn(&mut mcp).await?;
|
let turn = start_plan_mode_turn(&mut mcp).await?;
|
||||||
@@ -111,7 +114,10 @@ async fn plan_mode_without_proposed_plan_does_not_emit_plan_item() -> Result<()>
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let _turn = start_plan_mode_turn(&mut mcp).await?;
|
let _turn = start_plan_mode_turn(&mut mcp).await?;
|
||||||
|
|||||||
@@ -72,7 +72,11 @@ const TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS: &str =
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn plugin_install_rejects_relative_marketplace_paths() -> Result<()> {
|
async fn plugin_install_rejects_relative_marketplace_paths() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -99,7 +103,11 @@ async fn plugin_install_rejects_relative_marketplace_paths() -> Result<()> {
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn plugin_install_rejects_missing_install_source() -> Result<()> {
|
async fn plugin_install_rejects_missing_install_source() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -128,7 +136,11 @@ async fn plugin_install_rejects_missing_install_source() -> Result<()> {
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn plugin_install_rejects_multiple_install_sources() -> Result<()> {
|
async fn plugin_install_rejects_multiple_install_sources() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -165,7 +177,11 @@ async fn plugin_install_rejects_remote_marketplace_when_plugins_are_disabled() -
|
|||||||
plugins = false
|
plugins = false
|
||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -231,10 +247,11 @@ async fn plugin_install_writes_remote_plugin_to_cloud_and_cache() -> Result<()>
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -318,10 +335,11 @@ async fn plugin_install_uses_remote_apps_needing_auth_response() -> Result<()> {
|
|||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
mount_remote_plugin_install_with_apps_needing_auth(&server, REMOTE_PLUGIN_ID, &["alpha"]).await;
|
mount_remote_plugin_install_with_apps_needing_auth(&server, REMOTE_PLUGIN_ID, &["alpha"]).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -370,7 +388,11 @@ async fn plugin_install_rejects_missing_remote_bundle_url() -> Result<()> {
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
||||||
@@ -411,7 +433,11 @@ async fn plugin_install_rejects_plain_http_remote_bundle_url() -> Result<()> {
|
|||||||
mount_remote_plugin_detail(&server, REMOTE_PLUGIN_ID, "1.2.3", Some(&bundle_url)).await;
|
mount_remote_plugin_detail(&server, REMOTE_PLUGIN_ID, "1.2.3", Some(&bundle_url)).await;
|
||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
||||||
@@ -457,7 +483,11 @@ async fn plugin_install_rejects_invalid_remote_release_version() -> Result<()> {
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
||||||
@@ -489,7 +519,11 @@ async fn plugin_install_rejects_invalid_remote_release_version() -> Result<()> {
|
|||||||
async fn plugin_install_rejects_invalid_remote_plugin_name() -> Result<()> {
|
async fn plugin_install_rejects_invalid_remote_plugin_name() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
write_remote_plugin_catalog_config(codex_home.path(), "https://example.invalid/backend-api/")?;
|
write_remote_plugin_catalog_config(codex_home.path(), "https://example.invalid/backend-api/")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -519,7 +553,11 @@ async fn plugin_install_tracks_analytics_when_remote_detail_fetch_fails() -> Res
|
|||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
mount_backend_analytics_events(&server).await;
|
mount_backend_analytics_events(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
||||||
@@ -570,10 +608,11 @@ async fn plugin_install_rejects_remote_plugin_disabled_by_admin_before_download(
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -623,7 +662,11 @@ async fn plugin_install_rejects_remote_plugin_not_available() -> Result<()> {
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
let request_id = send_remote_plugin_install_request(&mut mcp, REMOTE_PLUGIN_ID).await?;
|
||||||
@@ -686,7 +729,11 @@ async fn plugin_install_rejects_when_workspace_codex_plugins_disabled() -> Resul
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -715,7 +762,11 @@ async fn plugin_install_rejects_when_workspace_codex_plugins_disabled() -> Resul
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn plugin_install_returns_invalid_request_for_missing_marketplace_file() -> Result<()> {
|
async fn plugin_install_returns_invalid_request_for_missing_marketplace_file() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -756,7 +807,11 @@ async fn plugin_install_returns_invalid_request_for_not_available_plugin() -> Re
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -805,8 +860,12 @@ async fn plugin_install_returns_invalid_request_for_disallowed_product_plugin()
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_args(codex_home.path(), &["--session-source", "atlas"]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_args(&["--session-source", "atlas"])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -855,7 +914,11 @@ async fn plugin_install_tracks_analytics_event() -> Result<()> {
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -921,7 +984,11 @@ async fn plugin_install_failure_tracks_analytics_event() -> Result<()> {
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -972,10 +1039,11 @@ async fn plugin_install_tracks_remote_plugin_analytics_event() -> Result<()> {
|
|||||||
mount_remote_plugin_install(&server, REMOTE_PLUGIN_ID).await;
|
mount_remote_plugin_install(&server, REMOTE_PLUGIN_ID).await;
|
||||||
mount_backend_analytics_events(&server).await;
|
mount_backend_analytics_events(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1023,10 +1091,11 @@ async fn plugin_install_preserves_status_when_remote_bundle_error_body_is_too_la
|
|||||||
mount_remote_plugin_install(&server, REMOTE_PLUGIN_ID).await;
|
mount_remote_plugin_install(&server, REMOTE_PLUGIN_ID).await;
|
||||||
mount_backend_analytics_events(&server).await;
|
mount_backend_analytics_events(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1151,7 +1220,11 @@ async fn plugin_install_returns_apps_needing_auth() -> Result<()> {
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let directory_requests_before_install = server_control.directory_request_count();
|
let directory_requests_before_install = server_control.directory_request_count();
|
||||||
|
|
||||||
@@ -1238,7 +1311,11 @@ async fn plugin_install_skips_mcp_oauth_for_chatgpt_dual_surface_plugin() -> Res
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1298,7 +1375,11 @@ async fn plugin_install_starts_mcp_oauth_with_formerly_disallowed_plugin_app() -
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1395,7 +1476,11 @@ async fn plugin_install_starts_mcp_oauth_through_protected_resource_metadata() -
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1458,10 +1543,11 @@ connectors = true
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[("OPENAI_API_KEY", Some("test-api-key"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[("OPENAI_API_KEY", Some("test-api-key"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1500,10 +1586,11 @@ async fn plugin_install_starts_remote_mcp_oauth_for_install_response_only_app()
|
|||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
mount_remote_plugin_install_with_apps_needing_auth(&server, REMOTE_PLUGIN_ID, &["alpha"]).await;
|
mount_remote_plugin_install_with_apps_needing_auth(&server, REMOTE_PLUGIN_ID, &["alpha"]).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1552,10 +1639,11 @@ async fn plugin_install_skips_remote_mcp_oauth_for_bundled_same_name_app() -> Re
|
|||||||
mount_empty_remote_installed_plugins(&server).await;
|
mount_empty_remote_installed_plugins(&server).await;
|
||||||
mount_remote_plugin_install_with_apps_needing_auth(&server, REMOTE_PLUGIN_ID, &["alpha"]).await;
|
mount_remote_plugin_install_with_apps_needing_auth(&server, REMOTE_PLUGIN_ID, &["alpha"]).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1634,7 +1722,11 @@ async fn plugin_install_includes_formerly_disallowed_apps_needing_auth() -> Resu
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let directory_requests_before_install =
|
let directory_requests_before_install =
|
||||||
warm_app_directory_cache(&mut mcp, &server_control, "Alpha").await?;
|
warm_app_directory_cache(&mut mcp, &server_control, "Alpha").await?;
|
||||||
@@ -1717,7 +1809,11 @@ async fn plugin_install_makes_bundled_mcp_servers_available_to_followup_requests
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -101,13 +101,14 @@ async fn plugin_list_skips_invalid_marketplace_file_and_reports_error() -> Resul
|
|||||||
std::fs::write(marketplace_path.as_path(), "{not json")?;
|
std::fs::write(marketplace_path.as_path(), "{not json")?;
|
||||||
|
|
||||||
let home = codex_home.path().to_string_lossy().into_owned();
|
let home = codex_home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home.as_str())),
|
("HOME", Some(home.as_str())),
|
||||||
("USERPROFILE", Some(home.as_str())),
|
("USERPROFILE", Some(home.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -166,7 +167,11 @@ enabled = true
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -257,7 +262,11 @@ enabled = true
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let request_id = app_server
|
let request_id = app_server
|
||||||
@@ -327,7 +336,11 @@ enabled = true
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -352,7 +365,11 @@ enabled = true
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn plugin_list_rejects_relative_cwds() -> Result<()> {
|
async fn plugin_list_rejects_relative_cwds() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -429,13 +446,14 @@ async fn plugin_list_keeps_valid_marketplaces_when_another_marketplace_fails_to_
|
|||||||
std::fs::write(invalid_marketplace_path.as_path(), "{not json")?;
|
std::fs::write(invalid_marketplace_path.as_path(), "{not json")?;
|
||||||
|
|
||||||
let home = codex_home.path().to_string_lossy().into_owned();
|
let home = codex_home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home.as_str())),
|
("HOME", Some(home.as_str())),
|
||||||
("USERPROFILE", Some(home.as_str())),
|
("USERPROFILE", Some(home.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -548,13 +566,15 @@ async fn plugin_list_returns_empty_when_workspace_codex_plugins_disabled() -> Re
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let home = codex_home.path().to_string_lossy().into_owned();
|
let home = codex_home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_without_managed_config_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home.as_str())),
|
("HOME", Some(home.as_str())),
|
||||||
("USERPROFILE", Some(home.as_str())),
|
("USERPROFILE", Some(home.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -639,13 +659,15 @@ async fn plugin_list_reuses_cached_workspace_codex_plugins_setting() -> Result<(
|
|||||||
.await;
|
.await;
|
||||||
|
|
||||||
let home = codex_home.path().to_string_lossy().into_owned();
|
let home = codex_home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_without_managed_config_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home.as_str())),
|
("HOME", Some(home.as_str())),
|
||||||
("USERPROFILE", Some(home.as_str())),
|
("USERPROFILE", Some(home.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -724,13 +746,14 @@ async fn plugin_list_uses_alternate_discoverable_manifest_and_keeps_undiscoverab
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let home = codex_home.path().to_string_lossy().into_owned();
|
let home = codex_home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home.as_str())),
|
("HOME", Some(home.as_str())),
|
||||||
("USERPROFILE", Some(home.as_str())),
|
("USERPROFILE", Some(home.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -843,13 +866,14 @@ async fn plugin_list_accepts_omitted_cwds() -> Result<()> {
|
|||||||
}"#,
|
}"#,
|
||||||
)?;
|
)?;
|
||||||
let home = codex_home.path().to_string_lossy().into_owned();
|
let home = codex_home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home.as_str())),
|
("HOME", Some(home.as_str())),
|
||||||
("USERPROFILE", Some(home.as_str())),
|
("USERPROFILE", Some(home.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -903,7 +927,11 @@ async fn plugin_list_returns_share_context_for_shared_local_plugin() -> Result<(
|
|||||||
&AbsolutePathBuf::try_from(plugin_root)?,
|
&AbsolutePathBuf::try_from(plugin_root)?,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -995,7 +1023,11 @@ enabled = false
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1142,13 +1174,14 @@ enabled = false
|
|||||||
|
|
||||||
let workspace_default = TempDir::new()?;
|
let workspace_default = TempDir::new()?;
|
||||||
let home = codex_home.path().to_string_lossy().into_owned();
|
let home = codex_home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home.as_str())),
|
("HOME", Some(home.as_str())),
|
||||||
("USERPROFILE", Some(home.as_str())),
|
("USERPROFILE", Some(home.as_str())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1236,7 +1269,11 @@ async fn plugin_list_returns_plugin_interface_with_absolute_asset_paths() -> Res
|
|||||||
}"##,
|
}"##,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1349,7 +1386,11 @@ async fn plugin_list_accepts_legacy_string_default_prompt() -> Result<()> {
|
|||||||
}"##,
|
}"##,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1437,7 +1478,11 @@ enabled = true
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1544,10 +1589,12 @@ async fn app_server_startup_sync_downloads_remote_installed_plugin_bundles() ->
|
|||||||
let installed_path = codex_home
|
let installed_path = codex_home
|
||||||
.path()
|
.path()
|
||||||
.join("plugins/cache/openai-curated-remote/linear/1.2.3");
|
.join("plugins/cache/openai-curated-remote/linear/1.2.3");
|
||||||
let mut mcp = TestAppServer::new_with_env_and_plugin_startup_tasks(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_plugin_startup_tasks()
|
||||||
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1623,10 +1670,11 @@ async fn plugin_list_sync_upgrades_and_removes_remote_installed_plugin_bundles()
|
|||||||
.path()
|
.path()
|
||||||
.join("plugins/cache/openai-curated-remote/stale");
|
.join("plugins/cache/openai-curated-remote/stale");
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1812,7 +1860,11 @@ async fn plugin_list_includes_remote_marketplaces_when_remote_plugin_enabled() -
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1971,7 +2023,11 @@ async fn plugin_list_uses_cached_global_remote_catalog_and_refreshes_it() -> Res
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2087,7 +2143,11 @@ async fn plugin_list_includes_openai_curated_remote_collection_when_remote_plugi
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2177,7 +2237,11 @@ async fn plugin_list_propagates_openai_curated_remote_collection_errors_when_rem
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2217,7 +2281,11 @@ async fn plugin_list_skips_openai_curated_remote_collection_for_api_auth_when_re
|
|||||||
AuthKeyringBackendKind::default(),
|
AuthKeyringBackendKind::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2256,7 +2324,11 @@ async fn plugin_list_includes_api_curated_marketplace_for_api_auth_when_remote_p
|
|||||||
AuthKeyringBackendKind::default(),
|
AuthKeyringBackendKind::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2311,7 +2383,11 @@ async fn plugin_list_does_not_query_openai_curated_remote_collection_by_default(
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2364,7 +2440,11 @@ async fn plugin_list_vertical_kind_noops_when_remote_plugin_enabled() -> Result<
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2418,7 +2498,11 @@ async fn plugin_list_does_not_append_global_remote_when_marketplace_kinds_are_ex
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2497,7 +2581,11 @@ plugin_sharing = true
|
|||||||
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2608,7 +2696,11 @@ plugin_sharing = false
|
|||||||
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2695,10 +2787,11 @@ plugin_sharing = false
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -2773,10 +2866,11 @@ plugin_sharing = false
|
|||||||
.await;
|
.await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -2848,7 +2942,11 @@ async fn plugin_list_fetches_workspace_directory_kind_when_remote_plugin_disable
|
|||||||
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -2974,7 +3072,11 @@ plugin_sharing = false
|
|||||||
mount_remote_installed_plugins(&server, "WORKSPACE", empty_remote_installed_plugins_body())
|
mount_remote_installed_plugins(&server, "WORKSPACE", empty_remote_installed_plugins_body())
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -3101,7 +3203,11 @@ async fn plugin_list_fetches_shared_with_me_kind() -> Result<()> {
|
|||||||
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
mount_remote_installed_plugins(&server, "WORKSPACE", &workspace_installed_body).await;
|
||||||
mount_empty_user_installed_plugins(&server).await;
|
mount_empty_user_installed_plugins(&server).await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -3258,7 +3364,11 @@ plugin_sharing = false
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -3318,7 +3428,11 @@ plugin_sharing = true
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -3448,7 +3562,11 @@ async fn plugin_list_marks_remote_plugin_disabled_by_admin() -> Result<()> {
|
|||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -3508,7 +3626,11 @@ remote_plugin = true
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -3544,7 +3666,11 @@ async fn plugin_list_fetches_featured_plugin_ids_without_chatgpt_auth() -> Resul
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -3583,7 +3709,12 @@ async fn plugin_list_uses_warmed_featured_plugin_ids_cache_on_first_request() ->
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_plugin_startup_tasks(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_plugin_startup_tasks()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
wait_for_featured_plugin_request_count(&server, /*expected_count*/ 1).await?;
|
wait_for_featured_plugin_request_count(&server, /*expected_count*/ 1).await?;
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,11 @@ const DEFAULT_TIMEOUT: Duration = Duration::from_secs(10);
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn plugin_read_rejects_missing_read_source() -> Result<()> {
|
async fn plugin_read_rejects_missing_read_source() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -86,7 +90,11 @@ async fn plugin_read_rejects_missing_read_source() -> Result<()> {
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn plugin_read_rejects_multiple_read_sources() -> Result<()> {
|
async fn plugin_read_rejects_multiple_read_sources() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -239,7 +247,11 @@ apps = true
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -384,7 +396,11 @@ async fn plugin_read_returns_share_context_for_shared_remote_plugin() -> Result<
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
for remote_marketplace_name in [
|
for remote_marketplace_name in [
|
||||||
@@ -592,7 +608,11 @@ async fn plugin_read_includes_share_url_for_admin_disabled_remote_plugin() -> Re
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -725,7 +745,11 @@ async fn plugin_skill_read_reads_remote_skill_contents_when_remote_plugin_enable
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -777,7 +801,11 @@ async fn plugin_read_maps_missing_remote_plugin_to_invalid_request() -> Result<(
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -829,7 +857,11 @@ remote_plugin = true
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -859,7 +891,11 @@ remote_plugin = true
|
|||||||
async fn plugin_read_rejects_invalid_remote_plugin_name() -> Result<()> {
|
async fn plugin_read_rejects_invalid_remote_plugin_name() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
write_remote_plugin_catalog_config(codex_home.path(), "https://example.invalid/backend-api/")?;
|
write_remote_plugin_catalog_config(codex_home.path(), "https://example.invalid/backend-api/")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -917,7 +953,11 @@ enabled = true
|
|||||||
)?;
|
)?;
|
||||||
write_installed_plugin(&codex_home, "openai-curated", "demo-plugin")?;
|
write_installed_plugin(&codex_home, "openai-curated", "demo-plugin")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
@@ -1021,7 +1061,11 @@ async fn plugin_read_returns_share_context_for_shared_local_plugin() -> Result<(
|
|||||||
.expect(1)
|
.expect(1)
|
||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1151,7 +1195,11 @@ async fn plugin_read_keeps_remote_version_when_share_principals_are_missing() ->
|
|||||||
.expect(1)
|
.expect(1)
|
||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1207,7 +1255,11 @@ async fn plugin_read_falls_back_to_local_share_context_without_remote_auth() ->
|
|||||||
let plugin_path = AbsolutePathBuf::try_from(repo_root.path().join("demo-plugin"))?;
|
let plugin_path = AbsolutePathBuf::try_from(repo_root.path().join("demo-plugin"))?;
|
||||||
write_plugin_share_local_path_mapping(codex_home.path(), "plugins_123", &plugin_path)?;
|
write_plugin_share_local_path_mapping(codex_home.path(), "plugins_123", &plugin_path)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1265,7 +1317,11 @@ async fn plugin_read_fails_on_malformed_share_mapping() -> Result<()> {
|
|||||||
"not valid json\n",
|
"not valid json\n",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1459,7 +1515,11 @@ enabled = false
|
|||||||
)?;
|
)?;
|
||||||
write_installed_plugin(&codex_home, "codex-curated", "demo-plugin")?;
|
write_installed_plugin(&codex_home, "codex-curated", "demo-plugin")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
@@ -1661,7 +1721,11 @@ async fn plugin_read_returns_app_metadata_category() -> Result<()> {
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1750,14 +1814,15 @@ async fn plugin_read_hides_apps_for_api_key_auth() -> Result<()> {
|
|||||||
let marketplace_path =
|
let marketplace_path =
|
||||||
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
AbsolutePathBuf::try_from(repo_root.path().join(".agents/plugins/marketplace.json"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("CODEX_ACCESS_TOKEN", None),
|
("CODEX_ACCESS_TOKEN", None),
|
||||||
("CODEX_API_KEY", None),
|
("CODEX_API_KEY", None),
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1818,7 +1883,11 @@ async fn plugin_read_accepts_legacy_string_default_prompt() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
write_plugins_enabled_config(&codex_home)?;
|
write_plugins_enabled_config(&codex_home)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1880,7 +1949,11 @@ async fn plugin_read_describes_uninstalled_git_source_without_cloning() -> Resul
|
|||||||
)?;
|
)?;
|
||||||
write_plugins_enabled_config(&codex_home)?;
|
write_plugins_enabled_config(&codex_home)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1943,7 +2016,11 @@ async fn plugin_read_returns_invalid_request_when_plugin_is_missing() -> Result<
|
|||||||
)?;
|
)?;
|
||||||
write_plugins_enabled_config(&codex_home)?;
|
write_plugins_enabled_config(&codex_home)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1996,7 +2073,11 @@ async fn plugin_read_returns_invalid_request_when_plugin_manifest_is_missing() -
|
|||||||
)?;
|
)?;
|
||||||
write_plugins_enabled_config(&codex_home)?;
|
write_plugins_enabled_config(&codex_home)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -102,7 +102,11 @@ async fn plugin_share_save_uploads_local_plugin() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let expected_plugin_path = AbsolutePathBuf::try_from(plugin_path.clone())?;
|
let expected_plugin_path = AbsolutePathBuf::try_from(plugin_path.clone())?;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -253,7 +257,11 @@ async fn plugin_share_save_forwards_access_policy() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let expected_plugin_path = AbsolutePathBuf::try_from(plugin_path)?;
|
let expected_plugin_path = AbsolutePathBuf::try_from(plugin_path)?;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -306,7 +314,11 @@ async fn plugin_share_save_rejects_listed_discoverability() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
@@ -360,7 +372,11 @@ plugin_sharing = false
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
@@ -405,7 +421,11 @@ async fn plugin_share_rejects_workspace_targets_from_client() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
@@ -483,7 +503,11 @@ async fn plugin_share_save_rejects_access_policy_for_existing_plugin() -> Result
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
@@ -556,7 +580,11 @@ async fn plugin_share_list_returns_created_workspace_plugins() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request("plugin/share/list", Some(json!({})))
|
.send_raw_request("plugin/share/list", Some(json!({})))
|
||||||
@@ -629,14 +657,15 @@ async fn plugin_share_checkout_adds_personal_marketplace_entry() -> Result<()> {
|
|||||||
mount_empty_remote_installed_plugins(&server, "WORKSPACE").await;
|
mount_empty_remote_installed_plugins(&server, "WORKSPACE").await;
|
||||||
|
|
||||||
let home_env = home.path().to_string_lossy().into_owned();
|
let home_env = home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home_env.as_str())),
|
("HOME", Some(home_env.as_str())),
|
||||||
("USERPROFILE", Some(home_env.as_str())),
|
("USERPROFILE", Some(home_env.as_str())),
|
||||||
(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1")),
|
(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1")),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -792,14 +821,15 @@ async fn plugin_share_checkout_rejects_non_share_remote_plugin() -> Result<()> {
|
|||||||
mount_empty_remote_installed_plugins(&server, "GLOBAL").await;
|
mount_empty_remote_installed_plugins(&server, "GLOBAL").await;
|
||||||
|
|
||||||
let home_env = home.path().to_string_lossy().into_owned();
|
let home_env = home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home_env.as_str())),
|
("HOME", Some(home_env.as_str())),
|
||||||
("USERPROFILE", Some(home_env.as_str())),
|
("USERPROFILE", Some(home_env.as_str())),
|
||||||
(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1")),
|
(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1")),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -883,14 +913,15 @@ async fn plugin_share_checkout_cleans_up_path_when_marketplace_update_fails() ->
|
|||||||
mount_empty_remote_installed_plugins(&server, "WORKSPACE").await;
|
mount_empty_remote_installed_plugins(&server, "WORKSPACE").await;
|
||||||
|
|
||||||
let home_env = home.path().to_string_lossy().into_owned();
|
let home_env = home.path().to_string_lossy().into_owned();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(home_env.as_str())),
|
("HOME", Some(home_env.as_str())),
|
||||||
("USERPROFILE", Some(home_env.as_str())),
|
("USERPROFILE", Some(home_env.as_str())),
|
||||||
(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1")),
|
(TEST_ALLOW_HTTP_REMOTE_PLUGIN_BUNDLE_DOWNLOADS, Some("1")),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -986,7 +1017,11 @@ async fn plugin_share_update_targets_updates_share_targets() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
@@ -1067,7 +1102,11 @@ plugin_sharing = false
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
@@ -1116,7 +1155,11 @@ async fn plugin_share_delete_removes_created_workspace_plugin() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
.send_raw_request(
|
.send_raw_request(
|
||||||
|
|||||||
@@ -42,7 +42,11 @@ enabled = true
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let params = PluginUninstallParams {
|
let params = PluginUninstallParams {
|
||||||
@@ -100,7 +104,11 @@ async fn plugin_uninstall_tracks_analytics_event() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -162,7 +170,11 @@ async fn plugin_uninstall_rejects_remote_plugin_when_plugins_are_disabled() -> R
|
|||||||
plugins = false
|
plugins = false
|
||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -241,7 +253,11 @@ async fn plugin_uninstall_writes_remote_plugin_to_cloud_when_remote_plugin_enabl
|
|||||||
));
|
));
|
||||||
std::fs::create_dir_all(legacy_remote_plugin_cache_root.join("local/.codex-plugin"))?;
|
std::fs::create_dir_all(legacy_remote_plugin_cache_root.join("local/.codex-plugin"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Simulate a background remote-cache refresh removing the local bundle
|
// Simulate a background remote-cache refresh removing the local bundle
|
||||||
@@ -336,7 +352,11 @@ async fn plugin_uninstall_uses_detail_scope_for_cache_namespace() -> Result<()>
|
|||||||
.join("plugins/cache/openai-curated-remote/linear");
|
.join("plugins/cache/openai-curated-remote/linear");
|
||||||
std::fs::create_dir_all(global_cache_root.join("1.0.0/.codex-plugin"))?;
|
std::fs::create_dir_all(global_cache_root.join("1.0.0/.codex-plugin"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -410,7 +430,11 @@ async fn plugin_uninstall_accepts_workspace_remote_plugin_id_shape() -> Result<(
|
|||||||
r#"{"name":"skill-improver","version":"1.0.0"}"#,
|
r#"{"name":"skill-improver","version":"1.0.0"}"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -459,7 +483,11 @@ async fn plugin_uninstall_rejects_before_post_when_remote_detail_fetch_fails() -
|
|||||||
));
|
));
|
||||||
std::fs::create_dir_all(legacy_remote_plugin_cache_root.join("local/.codex-plugin"))?;
|
std::fs::create_dir_all(legacy_remote_plugin_cache_root.join("local/.codex-plugin"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -501,7 +529,11 @@ async fn plugin_uninstall_rejects_remote_plugin_id_with_spaces_before_network_ca
|
|||||||
codex_home.path(),
|
codex_home.path(),
|
||||||
&format!("{}/backend-api/", server.uri()),
|
&format!("{}/backend-api/", server.uri()),
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -536,7 +568,11 @@ async fn plugin_uninstall_rejects_invalid_remote_plugin_id_before_network_call()
|
|||||||
codex_home.path(),
|
codex_home.path(),
|
||||||
&format!("{}/backend-api/", server.uri()),
|
&format!("{}/backend-api/", server.uri()),
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -571,7 +607,11 @@ async fn plugin_uninstall_rejects_empty_remote_plugin_id() -> Result<()> {
|
|||||||
codex_home.path(),
|
codex_home.path(),
|
||||||
&format!("{}/backend-api/", server.uri()),
|
&format!("{}/backend-api/", server.uri()),
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -108,10 +108,11 @@ async fn process_spawn_returns_error_when_local_environment_is_disabled() -> Res
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
create_config_toml(codex_home.path(), &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -233,7 +234,11 @@ async fn process_kill_terminates_running_process() -> Result<()> {
|
|||||||
async fn initialized_mcp(codex_home: &Path) -> Result<(MockServer, TestAppServer)> {
|
async fn initialized_mcp(codex_home: &Path) -> Result<(MockServer, TestAppServer)> {
|
||||||
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await;
|
||||||
create_config_toml(codex_home, &server.uri(), "never")?;
|
create_config_toml(codex_home, &server.uri(), "never")?;
|
||||||
let mut mcp = TestAppServer::new(codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
Ok((server, mcp))
|
Ok((server, mcp))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -237,13 +237,14 @@ async fn consume_timeout_releases_account_auth_queue() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(RATE_LIMIT_RESET_REQUEST_TIMEOUT_ENV_VAR, Some("100")),
|
(RATE_LIMIT_RESET_REQUEST_TIMEOUT_ENV_VAR, Some("100")),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
let consume_id = send_consume_reset_credit(&mut mcp, "request-timeout").await?;
|
let consume_id = send_consume_reset_credit(&mut mcp, "request-timeout").await?;
|
||||||
@@ -287,7 +288,12 @@ async fn chatgpt_test_context() -> Result<(TempDir, MockServer)> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn initialized_app_server(codex_home: &Path) -> Result<TestAppServer> {
|
async fn initialized_app_server(codex_home: &Path) -> Result<TestAppServer> {
|
||||||
let mut mcp = TestAppServer::new_with_env(codex_home, &[("OPENAI_API_KEY", None)]).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
Ok(mcp)
|
Ok(mcp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,8 +42,12 @@ const INTERNAL_ERROR_CODE: i64 = -32603;
|
|||||||
async fn get_account_rate_limits_requires_auth() -> Result<()> {
|
async fn get_account_rate_limits_requires_auth() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_get_account_rate_limits_request().await?;
|
let request_id = mcp.send_get_account_rate_limits_request().await?;
|
||||||
@@ -68,7 +72,11 @@ async fn get_account_rate_limits_requires_auth() -> Result<()> {
|
|||||||
async fn get_account_rate_limits_requires_chatgpt_auth() -> Result<()> {
|
async fn get_account_rate_limits_requires_chatgpt_auth() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
@@ -213,8 +221,12 @@ async fn get_account_rate_limits_returns_snapshot() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_get_account_rate_limits_request().await?;
|
let request_id = mcp.send_get_account_rate_limits_request().await?;
|
||||||
@@ -371,8 +383,12 @@ async fn get_account_rate_limits_preserves_count_when_reset_credit_details_fail(
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_get_account_rate_limits_request().await?;
|
let request_id = mcp.send_get_account_rate_limits_request().await?;
|
||||||
@@ -398,8 +414,12 @@ async fn get_account_rate_limits_preserves_count_when_reset_credit_details_fail(
|
|||||||
async fn send_add_credits_nudge_email_requires_auth() -> Result<()> {
|
async fn send_add_credits_nudge_email_requires_auth() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -428,7 +448,11 @@ async fn send_add_credits_nudge_email_requires_auth() -> Result<()> {
|
|||||||
async fn send_add_credits_nudge_email_requires_chatgpt_auth() -> Result<()> {
|
async fn send_add_credits_nudge_email_requires_chatgpt_auth() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
@@ -482,8 +506,12 @@ async fn send_add_credits_nudge_email_posts_expected_body() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -526,8 +554,12 @@ async fn send_add_credits_nudge_email_maps_cooldown() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -570,8 +602,12 @@ async fn send_add_credits_nudge_email_surfaces_backend_failure() -> Result<()> {
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -291,7 +291,11 @@ impl RealtimeE2eHarness {
|
|||||||
sandbox,
|
sandbox,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
|
|
||||||
@@ -657,7 +661,10 @@ async fn realtime_conversation_streams_v2_notifications() -> Result<()> {
|
|||||||
StartupContextConfig::Generated,
|
StartupContextConfig::Generated,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
|
|
||||||
@@ -949,7 +956,10 @@ async fn realtime_start_can_skip_startup_context() -> Result<()> {
|
|||||||
StartupContextConfig::Generated,
|
StartupContextConfig::Generated,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
|
|
||||||
@@ -1048,7 +1058,10 @@ async fn realtime_text_output_modality_requests_text_output_and_final_transcript
|
|||||||
StartupContextConfig::Generated,
|
StartupContextConfig::Generated,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
|
|
||||||
@@ -1158,7 +1171,11 @@ async fn realtime_list_voices_returns_supported_names() -> Result<()> {
|
|||||||
StartupContextConfig::Generated,
|
StartupContextConfig::Generated,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1230,7 +1247,10 @@ async fn realtime_conversation_stop_emits_closed_notification() -> Result<()> {
|
|||||||
StartupContextConfig::Generated,
|
StartupContextConfig::Generated,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
|
|
||||||
@@ -1334,7 +1354,10 @@ async fn realtime_webrtc_start_emits_sdp_notification() -> Result<()> {
|
|||||||
StartupContextConfig::Override("startup context"),
|
StartupContextConfig::Override("startup context"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
|
|
||||||
@@ -2690,7 +2713,10 @@ async fn realtime_webrtc_start_surfaces_backend_error() -> Result<()> {
|
|||||||
StartupContextConfig::Override("startup context"),
|
StartupContextConfig::Override("startup context"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
login_with_api_key(&mut mcp, "sk-test-key").await?;
|
||||||
|
|
||||||
@@ -2759,7 +2785,10 @@ async fn realtime_conversation_requires_feature_flag() -> Result<()> {
|
|||||||
StartupContextConfig::Generated,
|
StartupContextConfig::Generated,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_request_id = mcp
|
let thread_start_request_id = mcp
|
||||||
|
|||||||
@@ -72,10 +72,12 @@ async fn first_turn_after_external_login_waits_for_recommended_plugins() -> Resu
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let sqlite_home = codex_home.path().to_string_lossy();
|
let sqlite_home = codex_home.path().to_string_lossy();
|
||||||
let mut app_server = TestAppServer::new_without_managed_config_with_env(
|
let mut app_server = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[("CODEX_SQLITE_HOME", Some(sqlite_home.as_ref()))],
|
.without_auto_env()
|
||||||
)
|
.without_managed_config()
|
||||||
|
.with_env_overrides(&[("CODEX_SQLITE_HOME", Some(sqlite_home.as_ref()))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
|
|||||||
@@ -129,7 +129,11 @@ async fn managed_requirements_reject_all_remote_control_rpcs() -> Result<()> {
|
|||||||
codex_home.path().join("requirements.toml"),
|
codex_home.path().join("requirements.toml"),
|
||||||
"allow_remote_control = false\n",
|
"allow_remote_control = false\n",
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let notification = timeout(
|
let notification = timeout(
|
||||||
@@ -187,7 +191,11 @@ async fn managed_requirements_allow_remote_control_true_does_not_enable_or_block
|
|||||||
codex_home.path().join("requirements.toml"),
|
codex_home.path().join("requirements.toml"),
|
||||||
"allow_remote_control = true\n",
|
"allow_remote_control = true\n",
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_remote_control_status_read_request().await?;
|
let request_id = mcp.send_remote_control_status_read_request().await?;
|
||||||
@@ -270,7 +278,12 @@ async fn listen_off_honors_persisted_remote_control_enable() -> Result<()> {
|
|||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let _app_server = TestAppServer::new_with_args(codex_home.path(), &["--listen", "off"]).await?;
|
let _app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_args(&["--listen", "off"])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let request = timeout(STARTUP_TIMEOUT, read_http_request(&listener)).await??;
|
let request = timeout(STARTUP_TIMEOUT, read_http_request(&listener)).await??;
|
||||||
assert!(
|
assert!(
|
||||||
request
|
request
|
||||||
@@ -309,8 +322,12 @@ async fn listen_off_ignores_persisted_enable_when_disabled_by_requirements() ->
|
|||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let mut app_server =
|
let mut app_server = TestAppServer::builder()
|
||||||
TestAppServer::new_with_args(codex_home.path(), &["--listen", "off"]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_args(&["--listen", "off"])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let status = timeout(STARTUP_TIMEOUT, app_server.wait_for_exit()).await??;
|
let status = timeout(STARTUP_TIMEOUT, app_server.wait_for_exit()).await??;
|
||||||
assert!(!status.success());
|
assert!(!status.success());
|
||||||
timeout(Duration::from_millis(100), listener.accept())
|
timeout(Duration::from_millis(100), listener.accept())
|
||||||
@@ -357,8 +374,12 @@ async fn listen_off_exits_without_persisted_remote_control_enable() -> Result<()
|
|||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut app_server =
|
let mut app_server = TestAppServer::builder()
|
||||||
TestAppServer::new_with_args(codex_home.path(), &["--listen", "off"]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_args(&["--listen", "off"])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let status = timeout(STARTUP_TIMEOUT, app_server.wait_for_exit()).await??;
|
let status = timeout(STARTUP_TIMEOUT, app_server.wait_for_exit()).await??;
|
||||||
assert!(!status.success());
|
assert!(!status.success());
|
||||||
}
|
}
|
||||||
@@ -369,7 +390,11 @@ async fn listen_off_exits_without_persisted_remote_control_enable() -> Result<()
|
|||||||
async fn remote_control_disable_returns_disabled_status() -> Result<()> {
|
async fn remote_control_disable_returns_disabled_status() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let _listener = configured_remote_control_listener(codex_home.path()).await?;
|
let _listener = configured_remote_control_listener(codex_home.path()).await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_remote_control_disable_request().await?;
|
let request_id = mcp.send_remote_control_disable_request().await?;
|
||||||
@@ -390,7 +415,11 @@ async fn remote_control_disable_returns_disabled_status() -> Result<()> {
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn remote_control_status_read_returns_disabled_status() -> Result<()> {
|
async fn remote_control_status_read_returns_disabled_status() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_remote_control_status_read_request().await?;
|
let request_id = mcp.send_remote_control_status_read_request().await?;
|
||||||
@@ -412,7 +441,11 @@ async fn remote_control_status_read_returns_disabled_status() -> Result<()> {
|
|||||||
async fn remote_control_enable_returns_connecting_status() -> Result<()> {
|
async fn remote_control_enable_returns_connecting_status() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut backend = BlockingRemoteControlBackend::start(codex_home.path()).await?;
|
let mut backend = BlockingRemoteControlBackend::start(codex_home.path()).await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_remote_control_enable_request().await?;
|
let request_id = mcp.send_remote_control_enable_request().await?;
|
||||||
@@ -448,7 +481,11 @@ async fn disable_waits_for_in_flight_durable_enable() -> Result<()> {
|
|||||||
let websocket_url = backend.websocket_url().to_string();
|
let websocket_url = backend.websocket_url().to_string();
|
||||||
let state_db =
|
let state_db =
|
||||||
StateRuntime::init(codex_home.path().to_path_buf(), "test-provider".to_string()).await?;
|
StateRuntime::init(codex_home.path().to_path_buf(), "test-provider".to_string()).await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
mcp.send_remote_control_enable_request().await?;
|
mcp.send_remote_control_enable_request().await?;
|
||||||
@@ -480,7 +517,11 @@ async fn rpc_updates_durable_preference_but_ephemeral_does_not() -> Result<()> {
|
|||||||
let state_db =
|
let state_db =
|
||||||
StateRuntime::init(codex_home.path().to_path_buf(), "test-provider".to_string()).await?;
|
StateRuntime::init(codex_home.path().to_path_buf(), "test-provider".to_string()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_remote_control_enable_request().await?;
|
let request_id = mcp.send_remote_control_enable_request().await?;
|
||||||
@@ -537,7 +578,11 @@ async fn rpc_updates_durable_preference_but_ephemeral_does_not() -> Result<()> {
|
|||||||
async fn remote_control_status_read_returns_connecting_status_after_enable() -> Result<()> {
|
async fn remote_control_status_read_returns_connecting_status_after_enable() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut backend = BlockingRemoteControlBackend::start(codex_home.path()).await?;
|
let mut backend = BlockingRemoteControlBackend::start(codex_home.path()).await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_remote_control_enable_request().await?;
|
let request_id = mcp.send_remote_control_enable_request().await?;
|
||||||
@@ -572,7 +617,11 @@ async fn remote_control_status_read_returns_connecting_status_after_enable() ->
|
|||||||
async fn remote_control_pairing_start_returns_pairing_artifacts() -> Result<()> {
|
async fn remote_control_pairing_start_returns_pairing_artifacts() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut backend = PairingRemoteControlBackend::start(codex_home.path()).await?;
|
let mut backend = PairingRemoteControlBackend::start(codex_home.path()).await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp.send_remote_control_enable_request().await?;
|
let request_id = mcp.send_remote_control_enable_request().await?;
|
||||||
@@ -669,7 +718,11 @@ async fn remote_control_pairing_start_returns_pairing_artifacts() -> Result<()>
|
|||||||
async fn pairing_start_works_after_ephemeral_enable() -> Result<()> {
|
async fn pairing_start_works_after_ephemeral_enable() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut backend = PairingRemoteControlBackend::start(codex_home.path()).await?;
|
let mut backend = PairingRemoteControlBackend::start(codex_home.path()).await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let request_id = mcp.send_remote_control_ephemeral_enable_request().await?;
|
let request_id = mcp.send_remote_control_ephemeral_enable_request().await?;
|
||||||
wait_for_response(&mut mcp, request_id).await?;
|
wait_for_response(&mut mcp, request_id).await?;
|
||||||
@@ -707,7 +760,11 @@ async fn pairing_start_works_after_ephemeral_enable() -> Result<()> {
|
|||||||
async fn remote_control_client_management_works_while_disabled() -> Result<()> {
|
async fn remote_control_client_management_works_while_disabled() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut backend = ClientManagementRemoteControlBackend::start(codex_home.path()).await?;
|
let mut backend = ClientManagementRemoteControlBackend::start(codex_home.path()).await?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -37,7 +37,10 @@ async fn request_permissions_round_trip() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence(responses).await;
|
let server = create_mock_responses_server_sequence(responses).await;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
|
|||||||
@@ -62,7 +62,10 @@ async fn request_user_input_round_trip() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence(responses).await;
|
let server = create_mock_responses_server_sequence(responses).await;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
|
|||||||
@@ -30,7 +30,10 @@ async fn request_handlers_reject_remote_image_urls() -> Result<()> {
|
|||||||
"http://localhost/unused",
|
"http://localhost/unused",
|
||||||
"http://localhost/unused",
|
"http://localhost/unused",
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_request_id = mcp
|
let thread_request_id = mcp
|
||||||
|
|||||||
@@ -59,7 +59,10 @@ async fn review_start_runs_review_turn_and_emits_code_review_item() -> Result<()
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_default_thread(&mut mcp).await?;
|
let thread_id = start_default_thread(&mut mcp).await?;
|
||||||
@@ -173,7 +176,10 @@ async fn review_start_exec_approval_item_id_matches_command_execution_item() ->
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_with_approval_policy(codex_home.path(), &server.uri(), "untrusted")?;
|
create_config_toml_with_approval_policy(codex_home.path(), &server.uri(), "untrusted")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_default_thread(&mut mcp).await?;
|
let thread_id = start_default_thread(&mut mcp).await?;
|
||||||
@@ -256,7 +262,10 @@ async fn review_start_rejects_empty_base_branch() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread_id = start_default_thread(&mut mcp).await?;
|
let thread_id = start_default_thread(&mut mcp).await?;
|
||||||
|
|
||||||
@@ -299,7 +308,10 @@ async fn review_start_with_detached_delivery_returns_new_thread_id() -> Result<(
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_default_thread(&mut mcp).await?;
|
let thread_id = start_default_thread(&mut mcp).await?;
|
||||||
@@ -377,7 +389,10 @@ async fn review_start_rejects_empty_commit_sha() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread_id = start_default_thread(&mut mcp).await?;
|
let thread_id = start_default_thread(&mut mcp).await?;
|
||||||
|
|
||||||
@@ -412,7 +427,10 @@ async fn review_start_rejects_empty_custom_instructions() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread_id = start_default_thread(&mut mcp).await?;
|
let thread_id = start_default_thread(&mut mcp).await?;
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,10 @@ async fn openai_model_header_mismatch_emits_model_rerouted_notification_v2() ->
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -116,7 +119,10 @@ async fn cyber_policy_response_emits_typed_error_notification_v2() -> Result<()>
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -193,7 +199,10 @@ async fn response_model_field_mismatch_emits_model_rerouted_notification_v2_when
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -262,7 +271,10 @@ async fn model_verification_emits_typed_notification_and_warning_v2() -> Result<
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -336,7 +348,10 @@ async fn turn_moderation_metadata_emits_typed_notification_v2() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
|
|||||||
@@ -140,7 +140,11 @@ async fn selected_capability_stack_tracks_environment_availability_and_resume()
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new(fixture.codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(fixture.codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
let thread_id = start_thread(
|
let thread_id = start_thread(
|
||||||
&mut app_server,
|
&mut app_server,
|
||||||
@@ -186,7 +190,11 @@ async fn selected_capability_stack_tracks_environment_availability_and_resume()
|
|||||||
drop(app_server);
|
drop(app_server);
|
||||||
std::fs::remove_file(&fixture.pid_file)?;
|
std::fs::remove_file(&fixture.pid_file)?;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new(fixture.codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(fixture.codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
let request_id = app_server
|
let request_id = app_server
|
||||||
.send_thread_resume_request(ThreadResumeParams {
|
.send_thread_resume_request(ThreadResumeParams {
|
||||||
@@ -333,7 +341,11 @@ async fn selected_capabilities_become_available_between_samples_in_one_turn() ->
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new(fixture.codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(fixture.codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
let thread_id = start_thread(
|
let thread_id = start_thread(
|
||||||
&mut app_server,
|
&mut app_server,
|
||||||
|
|||||||
@@ -45,7 +45,10 @@ async fn thread_start_reports_selected_environment_metadata() -> Result<()> {
|
|||||||
"mock_provider",
|
"mock_provider",
|
||||||
"compact",
|
"compact",
|
||||||
)?;
|
)?;
|
||||||
let mut app_server = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let request_id = app_server
|
let request_id = app_server
|
||||||
@@ -105,7 +108,10 @@ async fn thread_start_reports_selected_environment_instruction_source() -> Resul
|
|||||||
"mock_provider",
|
"mock_provider",
|
||||||
"compact",
|
"compact",
|
||||||
)?;
|
)?;
|
||||||
let mut app_server = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let (agents_source, environment_cwd) = {
|
let (agents_source, environment_cwd) = {
|
||||||
@@ -180,7 +186,10 @@ async fn turn_model_context_uses_selected_environment() -> Result<()> {
|
|||||||
"mock_provider",
|
"mock_provider",
|
||||||
"compact",
|
"compact",
|
||||||
)?;
|
)?;
|
||||||
let mut app_server = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
let (environment_cwd, environment_shell) = {
|
let (environment_cwd, environment_shell) = {
|
||||||
let auto_env = app_server.auto_env()?;
|
let auto_env = app_server.auto_env()?;
|
||||||
|
|||||||
@@ -186,7 +186,11 @@ enabled = true
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let disablement_request_id = mcp
|
let disablement_request_id = mcp
|
||||||
@@ -342,7 +346,11 @@ async fn skills_list_loads_remote_installed_plugin_skills_from_cache() -> Result
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
}
|
}
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let stale_skills_list_request_id = mcp
|
let stale_skills_list_request_id = mcp
|
||||||
@@ -467,7 +475,12 @@ async fn skills_list_excludes_plugin_skills_when_workspace_codex_plugins_disable
|
|||||||
.mount(&server)
|
.mount(&server)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -513,10 +526,11 @@ async fn skills_list_skips_cwd_roots_when_environment_disabled() -> Result<()> {
|
|||||||
"---\nname: repo-skill\ndescription: from repo root\n---\n\n# Body\n",
|
"---\nname: repo-skill\ndescription: from repo root\n---\n\n# Body\n",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -557,7 +571,11 @@ async fn skills_list_accepts_relative_cwds() -> Result<()> {
|
|||||||
let relative_cwd = std::path::PathBuf::from("relative-cwd");
|
let relative_cwd = std::path::PathBuf::from("relative-cwd");
|
||||||
std::fs::create_dir_all(codex_home.path().join(&relative_cwd))?;
|
std::fs::create_dir_all(codex_home.path().join(&relative_cwd))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -585,7 +603,11 @@ async fn skills_list_preserves_requested_cwd_order() -> Result<()> {
|
|||||||
let first_cwd = TempDir::new()?;
|
let first_cwd = TempDir::new()?;
|
||||||
let second_cwd = TempDir::new()?;
|
let second_cwd = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -621,7 +643,11 @@ async fn skills_list_uses_cached_result_until_force_reload() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let cwd = TempDir::new()?;
|
let cwd = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Seed the cwd cache before the cwd-local skill exists.
|
// Seed the cwd cache before the cwd-local skill exists.
|
||||||
@@ -707,7 +733,11 @@ async fn skills_extra_roots_set_updates_process_runtime_roots() -> Result<()> {
|
|||||||
"---\nname: runtime-skill\ndescription: runtime skill\n---\n\n# Body\n",
|
"---\nname: runtime-skill\ndescription: runtime skill\n---\n\n# Body\n",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let set_request_id = mcp
|
let set_request_id = mcp
|
||||||
@@ -813,7 +843,11 @@ async fn skills_extra_roots_set_updates_process_runtime_roots() -> Result<()> {
|
|||||||
);
|
);
|
||||||
|
|
||||||
drop(mcp);
|
drop(mcp);
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let skills_request_id = mcp
|
let skills_request_id = mcp
|
||||||
.send_skills_list_request(SkillsListParams {
|
.send_skills_list_request(SkillsListParams {
|
||||||
@@ -849,8 +883,11 @@ async fn skills_changed_notification_is_emitted_after_skill_change() -> Result<(
|
|||||||
)?;
|
)?;
|
||||||
write_skill(&codex_home, "demo")?;
|
write_skill(&codex_home, "demo")?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[(CODEX_EXEC_SERVER_URL_ENV_VAR, None)])
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[(CODEX_EXEC_SERVER_URL_ENV_VAR, None)])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let initial_skills_request_id = mcp
|
let initial_skills_request_id = mcp
|
||||||
|
|||||||
@@ -56,7 +56,10 @@ async fn external_sleep_polls_current_time_and_emits_items() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
|
|||||||
@@ -38,7 +38,10 @@ async fn thread_archive_requires_materialized_rollout() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Start a thread.
|
// Start a thread.
|
||||||
@@ -221,7 +224,11 @@ async fn thread_archive_archives_spawned_descendants() -> Result<()> {
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let archive_id = mcp
|
let archive_id = mcp
|
||||||
@@ -342,7 +349,11 @@ async fn thread_archive_succeeds_when_descendant_archive_fails() -> Result<()> {
|
|||||||
.join(child_rollout_path.file_name().expect("rollout file name"));
|
.join(child_rollout_path.file_name().expect("rollout file name"));
|
||||||
std::fs::create_dir_all(&archived_child_path)?;
|
std::fs::create_dir_all(&archived_child_path)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let archive_id = mcp
|
let archive_id = mcp
|
||||||
@@ -446,7 +457,11 @@ async fn thread_archive_succeeds_when_spawned_descendant_is_missing() -> Result<
|
|||||||
)
|
)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let archive_id = mcp
|
let archive_id = mcp
|
||||||
@@ -499,7 +514,10 @@ async fn thread_archive_clears_stale_subscriptions_before_resume() -> Result<()>
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -539,7 +557,10 @@ async fn thread_archive_clears_stale_subscriptions_before_resume() -> Result<()>
|
|||||||
.await??;
|
.await??;
|
||||||
primary.clear_message_buffer();
|
primary.clear_message_buffer();
|
||||||
|
|
||||||
let mut secondary = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut secondary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
||||||
|
|
||||||
let archive_id = primary
|
let archive_id = primary
|
||||||
|
|||||||
@@ -55,7 +55,11 @@ async fn thread_delete_deletes_spawned_descendants() -> Result<()> {
|
|||||||
.await?;
|
.await?;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let delete_id = mcp
|
let delete_id = mcp
|
||||||
@@ -122,7 +126,10 @@ fn create_delete_test_rollout(codex_home: &Path, minute: u8, preview: &str) -> R
|
|||||||
async fn thread_delete_handles_live_threads_before_rollout_exists() -> Result<()> {
|
async fn thread_delete_handles_live_threads_before_rollout_exists() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
|
|||||||
@@ -118,7 +118,11 @@ async fn thread_fork_creates_new_thread_and_emits_started() -> Result<()> {
|
|||||||
append_rollout_item_to_path(&original_path, &RolloutItem::SessionMeta(session_meta)).await?;
|
append_rollout_item_to_path(&original_path, &RolloutItem::SessionMeta(session_meta)).await?;
|
||||||
let original_contents = std::fs::read_to_string(&original_path)?;
|
let original_contents = std::fs::read_to_string(&original_path)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -257,7 +261,11 @@ async fn thread_fork_at_last_turn_id_keeps_only_terminal_prefix() -> Result<()>
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -382,7 +390,11 @@ async fn thread_fork_inherits_explicit_source_name_from_session_index() -> Resul
|
|||||||
let source_name = "Renamed parent thread";
|
let source_name = "Renamed parent thread";
|
||||||
append_thread_name(codex_home.path(), source_thread_id, source_name).await?;
|
append_thread_name(codex_home.path(), source_thread_id, source_name).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -433,7 +445,11 @@ async fn thread_fork_can_load_source_by_path() -> Result<()> {
|
|||||||
"rollout-2025-01-05T12-00-00-{conversation_id}.jsonl"
|
"rollout-2025-01-05T12-00-00-{conversation_id}.jsonl"
|
||||||
));
|
));
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -473,7 +489,11 @@ async fn thread_fork_emits_restored_token_usage_before_next_turn() -> Result<()>
|
|||||||
Some("mock_provider"),
|
Some("mock_provider"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -527,7 +547,11 @@ async fn thread_fork_can_exclude_turns_and_skip_restored_token_usage() -> Result
|
|||||||
Some("mock_provider"),
|
Some("mock_provider"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -578,7 +602,12 @@ async fn thread_fork_tracks_thread_initialized_analytics() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -622,7 +651,10 @@ async fn thread_fork_rejects_unmaterialized_thread() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -676,7 +708,11 @@ async fn thread_fork_with_empty_path_uses_thread_id() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -750,16 +786,17 @@ async fn thread_fork_surfaces_cloud_config_bundle_load_errors() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let refresh_token_url = format!("{}/oauth/token", server.uri());
|
let refresh_token_url = format!("{}/oauth/token", server.uri());
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(
|
(
|
||||||
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
||||||
Some(refresh_token_url.as_str()),
|
Some(refresh_token_url.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -813,7 +850,11 @@ async fn thread_fork_ephemeral_remains_pathless_and_omits_listing() -> Result<()
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -967,7 +1008,11 @@ async fn pathless_ephemeral_thread_rejects_codex_home_path_after_reload() -> Res
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let side_thread_id = {
|
let side_thread_id = {
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = app_server
|
let fork_id = app_server
|
||||||
@@ -1012,7 +1057,11 @@ async fn pathless_ephemeral_thread_rejects_codex_home_path_after_reload() -> Res
|
|||||||
thread.id
|
thread.id
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut app_server = TestAppServer::new(codex_home.path()).await?;
|
let mut app_server = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, app_server.initialize()).await??;
|
||||||
let codex_home_path = codex_home.path().to_path_buf();
|
let codex_home_path = codex_home.path().to_path_buf();
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,10 @@ async fn thread_inject_items_adds_raw_response_items_to_thread_history() -> Resu
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -153,7 +156,10 @@ async fn thread_inject_items_adds_raw_response_items_after_a_turn() -> Result<()
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
|
|||||||
@@ -50,7 +50,11 @@ use uuid::Uuid;
|
|||||||
const DEFAULT_READ_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(10);
|
const DEFAULT_READ_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(10);
|
||||||
|
|
||||||
async fn init_mcp(codex_home: &Path) -> Result<TestAppServer> {
|
async fn init_mcp(codex_home: &Path) -> Result<TestAppServer> {
|
||||||
let mut mcp = TestAppServer::new(codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
Ok(mcp)
|
Ok(mcp)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,10 @@ async fn thread_loaded_list_returns_loaded_thread_ids() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_thread(&mut mcp).await?;
|
let thread_id = start_thread(&mut mcp).await?;
|
||||||
@@ -51,7 +54,10 @@ async fn thread_loaded_list_paginates() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let first = start_thread(&mut mcp).await?;
|
let first = start_thread(&mut mcp).await?;
|
||||||
|
|||||||
@@ -27,7 +27,10 @@ async fn thread_memory_mode_set_updates_loaded_thread_state() -> Result<()> {
|
|||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
let state_db = init_state_db(codex_home.path()).await?;
|
let state_db = init_state_db(codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -79,7 +82,11 @@ async fn thread_memory_mode_set_updates_stored_thread_state() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
let thread_uuid = ThreadId::from_string(&thread_id)?;
|
let thread_uuid = ThreadId::from_string(&thread_id)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
for mode in [ThreadMemoryMode::Disabled, ThreadMemoryMode::Enabled] {
|
for mode in [ThreadMemoryMode::Disabled, ThreadMemoryMode::Enabled] {
|
||||||
|
|||||||
@@ -41,7 +41,10 @@ async fn thread_metadata_update_patches_git_branch_and_returns_updated_thread()
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -136,7 +139,10 @@ async fn thread_metadata_update_rejects_empty_git_info_patch() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -182,7 +188,10 @@ async fn thread_metadata_update_rejects_ephemeral_thread() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -244,7 +253,11 @@ async fn thread_metadata_update_repairs_missing_sqlite_row_for_stored_thread() -
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let update_id = mcp
|
let update_id = mcp
|
||||||
@@ -309,7 +322,11 @@ async fn thread_metadata_update_repairs_loaded_thread_without_resetting_summary(
|
|||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -387,7 +404,11 @@ async fn thread_metadata_update_repairs_missing_sqlite_row_for_archived_thread()
|
|||||||
);
|
);
|
||||||
fs::rename(&archived_source, &archived_dest)?;
|
fs::rename(&archived_source, &archived_dest)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let update_id = mcp
|
let update_id = mcp
|
||||||
@@ -443,7 +464,11 @@ async fn thread_metadata_update_can_clear_stored_git_fields() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
let _state_db = init_state_db(codex_home.path()).await?;
|
let _state_db = init_state_db(codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let update_id = mcp
|
let update_id = mcp
|
||||||
|
|||||||
@@ -104,7 +104,11 @@ async fn thread_read_returns_summary_without_turns() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -159,7 +163,11 @@ async fn thread_read_can_include_turns() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -218,7 +226,11 @@ async fn paginated_stored_thread_allows_metadata_discovery_and_rejects_legacy_hi
|
|||||||
ThreadHistoryMode::Paginated,
|
ThreadHistoryMode::Paginated,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -332,7 +344,11 @@ async fn thread_turns_list_can_page_backward_and_forward() -> Result<()> {
|
|||||||
append_user_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "second")?;
|
append_user_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "second")?;
|
||||||
append_user_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "third")?;
|
append_user_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "third")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -421,7 +437,11 @@ async fn thread_turns_list_supports_requested_items_view() -> Result<()> {
|
|||||||
append_agent_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "draft")?;
|
append_agent_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "draft")?;
|
||||||
append_agent_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "final")?;
|
append_agent_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "final")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let full = read_single_turn_items_view(
|
let full = read_single_turn_items_view(
|
||||||
@@ -725,7 +745,11 @@ async fn thread_read_can_return_archived_threads_by_id() -> Result<()> {
|
|||||||
archived_dir.join(active_rollout_path.file_name().expect("rollout file name"));
|
archived_dir.join(active_rollout_path.file_name().expect("rollout file name"));
|
||||||
std::fs::rename(&active_rollout_path, &archived_rollout_path)?;
|
std::fs::rename(&active_rollout_path, &archived_rollout_path)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -769,7 +793,11 @@ async fn thread_resume_initial_turns_page_matches_requested_turns_list_page() ->
|
|||||||
append_user_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "second")?;
|
append_user_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "second")?;
|
||||||
append_user_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "third")?;
|
append_user_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "third")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let turns_list_id = mcp
|
let turns_list_id = mcp
|
||||||
@@ -840,7 +868,11 @@ async fn thread_turns_list_rejects_cursor_when_anchor_turn_is_rolled_back() -> R
|
|||||||
append_user_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "second")?;
|
append_user_message(rollout_path.as_path(), "2025-01-05T12:01:00Z", "second")?;
|
||||||
append_user_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "third")?;
|
append_user_message(rollout_path.as_path(), "2025-01-05T12:02:00Z", "third")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -907,7 +939,11 @@ async fn thread_read_returns_forked_from_id_for_forked_threads() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let fork_id = mcp
|
let fork_id = mcp
|
||||||
@@ -947,7 +983,10 @@ async fn thread_read_loaded_thread_returns_precomputed_path_before_materializati
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -1007,7 +1046,11 @@ async fn thread_name_set_is_reflected_in_read_list_and_resume() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Set a user-facing thread title.
|
// Set a user-facing thread title.
|
||||||
@@ -1155,7 +1198,10 @@ async fn thread_read_include_turns_rejects_unmaterialized_loaded_thread() -> Res
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -1206,7 +1252,10 @@ async fn thread_turns_list_rejects_unmaterialized_loaded_thread() -> Result<()>
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -1260,7 +1309,11 @@ async fn thread_items_list_returns_unsupported() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -1298,7 +1351,10 @@ async fn thread_read_reports_system_error_idle_flag_after_failed_turn() -> Resul
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
|
|||||||
@@ -155,7 +155,10 @@ async fn thread_resume_rejects_unmaterialized_thread() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Start a thread.
|
// Start a thread.
|
||||||
@@ -202,7 +205,10 @@ async fn thread_resume_with_empty_path_uses_running_thread_id() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -270,7 +276,11 @@ async fn thread_resume_running_thread_uses_cached_instruction_sources() -> Resul
|
|||||||
let project_agents = workspace.path().join("AGENTS.md");
|
let project_agents = workspace.path().join("AGENTS.md");
|
||||||
std::fs::write(&project_agents, "project instructions")?;
|
std::fs::write(&project_agents, "project instructions")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -348,7 +358,11 @@ async fn turn_start_updates_runtime_workspace_roots_for_loaded_thread() -> Resul
|
|||||||
let extra_root = extra_root_tmp.path().join("extra-root");
|
let extra_root = extra_root_tmp.path().join("extra-root");
|
||||||
std::fs::create_dir_all(&extra_root)?;
|
std::fs::create_dir_all(&extra_root)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -427,7 +441,12 @@ async fn thread_goal_get_rejects_unmaterialized_thread() -> Result<()> {
|
|||||||
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -486,10 +505,12 @@ async fn goal_first_live_thread_appears_in_state_db_thread_list() -> Result<()>
|
|||||||
.as_path()
|
.as_path()
|
||||||
.to_str()
|
.to_str()
|
||||||
.expect("test codex home should be utf-8");
|
.expect("test codex home should be utf-8");
|
||||||
let mut mcp = TestAppServer::new_without_managed_config_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
&codex_home_path,
|
.with_codex_home(&codex_home_path)
|
||||||
&[("CODEX_SQLITE_HOME", Some(sqlite_home))],
|
.without_auto_env()
|
||||||
)
|
.without_managed_config()
|
||||||
|
.with_env_overrides(&[("CODEX_SQLITE_HOME", Some(sqlite_home))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -582,7 +603,12 @@ async fn thread_resume_tracks_thread_initialized_analytics() -> Result<()> {
|
|||||||
"codex_work_desktop",
|
"codex_work_desktop",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -626,7 +652,12 @@ async fn thread_resume_running_thread_tracks_thread_originator_in_analytics() ->
|
|||||||
create_config_toml_with_chatgpt_base_url(codex_home.path(), &server.uri(), &server.uri())?;
|
create_config_toml_with_chatgpt_base_url(codex_home.path(), &server.uri(), &server.uri())?;
|
||||||
mount_analytics_capture(&server, codex_home.path()).await?;
|
mount_analytics_capture(&server, codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -745,7 +776,11 @@ async fn thread_resume_returns_rollout_history() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -943,7 +978,11 @@ async fn resume_redaction_fixture(client_name: Option<&str>) -> Result<ThreadRes
|
|||||||
&conversation_id,
|
&conversation_id,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
if let Some(client_name) = client_name {
|
if let Some(client_name) = client_name {
|
||||||
let _ = timeout(
|
let _ = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
@@ -1053,7 +1092,11 @@ async fn thread_resume_can_skip_turns_for_metadata_only_resume() -> Result<()> {
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -1100,7 +1143,11 @@ async fn thread_resume_rejects_archived_session_by_id() -> Result<()> {
|
|||||||
archived_dir.join(active_rollout_path.file_name().expect("rollout file name")),
|
archived_dir.join(active_rollout_path.file_name().expect("rollout file name")),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -1139,7 +1186,12 @@ async fn thread_resume_keeps_paused_goal_paused() -> Result<()> {
|
|||||||
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -1244,7 +1296,12 @@ async fn thread_goal_set_preserves_budget_limited_same_objective() -> Result<()>
|
|||||||
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -1343,7 +1400,12 @@ async fn thread_goal_set_persists_resumable_stopped_statuses() -> Result<()> {
|
|||||||
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
config.replace("personality = true\n", "personality = true\ngoals = true\n"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -1438,7 +1500,12 @@ async fn thread_goal_set_edits_objective_without_resetting_usage() -> Result<()>
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let goal_id = mcp
|
let goal_id = mcp
|
||||||
@@ -1550,7 +1617,12 @@ async fn thread_goal_lifecycle_emits_analytics_and_clear_deletes_goal() -> Resul
|
|||||||
)?;
|
)?;
|
||||||
mount_analytics_capture(&server, codex_home.path()).await?;
|
mount_analytics_capture(&server, codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT.saturating_mul(2), mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT.saturating_mul(2), mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -1735,7 +1807,11 @@ async fn thread_resume_emits_restored_token_usage_before_next_turn() -> Result<(
|
|||||||
Some("mock_provider"),
|
Some("mock_provider"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -1788,7 +1864,11 @@ async fn thread_resume_skips_restored_token_usage_when_turns_are_excluded() -> R
|
|||||||
Some("mock_provider"),
|
Some("mock_provider"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let first_resume_id = mcp
|
let first_resume_id = mcp
|
||||||
@@ -1896,7 +1976,11 @@ async fn thread_resume_token_usage_replay_ignores_stale_interrupted_tail_turn()
|
|||||||
format!("{persisted_rollout}{appended_rollout}\n"),
|
format!("{persisted_rollout}{appended_rollout}\n"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -2020,7 +2104,11 @@ async fn thread_resume_token_usage_replay_can_belong_to_interrupted_turn() -> Re
|
|||||||
format!("{persisted_rollout}{appended_rollout}\n"),
|
format!("{persisted_rollout}{appended_rollout}\n"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -2214,7 +2302,11 @@ stream_max_retries = 0
|
|||||||
.mark_backfill_complete(/*last_watermark*/ None)
|
.mark_backfill_complete(/*last_watermark*/ None)
|
||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let update_id = mcp
|
let update_id = mcp
|
||||||
@@ -2308,7 +2400,11 @@ async fn thread_resume_and_read_interrupt_incomplete_rollout_turn_when_thread_is
|
|||||||
format!("{persisted_rollout}{appended_rollout}\n"),
|
format!("{persisted_rollout}{appended_rollout}\n"),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -2382,7 +2478,11 @@ async fn thread_resume_defers_updated_at_until_turn_start() -> Result<()> {
|
|||||||
let rollout = setup_rollout_fixture(codex_home.path(), &server.uri()).await?;
|
let rollout = setup_rollout_fixture(codex_home.path(), &server.uri()).await?;
|
||||||
let thread_id = rollout.conversation_id.clone();
|
let thread_id = rollout.conversation_id.clone();
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let read_id = mcp
|
let read_id = mcp
|
||||||
@@ -2504,7 +2604,11 @@ async fn thread_resume_keeps_in_flight_turn_streaming() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -2543,7 +2647,11 @@ async fn thread_resume_keeps_in_flight_turn_streaming() -> Result<()> {
|
|||||||
.await??;
|
.await??;
|
||||||
primary.clear_message_buffer();
|
primary.clear_message_buffer();
|
||||||
|
|
||||||
let mut secondary = TestAppServer::new(codex_home.path()).await?;
|
let mut secondary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
||||||
|
|
||||||
let turn_id = primary
|
let turn_id = primary
|
||||||
@@ -2613,7 +2721,11 @@ async fn thread_resume_rejects_history_when_thread_is_running() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -2732,7 +2844,11 @@ async fn thread_resume_rejects_mismatched_path_for_running_thread_id() -> Result
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -2901,7 +3017,11 @@ async fn thread_resume_rejoins_running_thread_even_with_override_mismatch() -> R
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -3032,7 +3152,11 @@ async fn thread_resume_can_skip_turns_when_thread_is_running() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -3070,7 +3194,11 @@ async fn thread_resume_can_skip_turns_when_thread_is_running() -> Result<()> {
|
|||||||
)
|
)
|
||||||
.await??;
|
.await??;
|
||||||
|
|
||||||
let mut secondary = TestAppServer::new(codex_home.path()).await?;
|
let mut secondary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = secondary
|
let resume_id = secondary
|
||||||
@@ -3116,7 +3244,11 @@ async fn thread_resume_replays_pending_command_execution_request_approval() -> R
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -3255,7 +3387,11 @@ async fn thread_resume_replays_pending_file_change_request_approval() -> Result<
|
|||||||
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
let server = create_mock_responses_server_sequence_unchecked(responses).await;
|
||||||
create_config_toml(&codex_home, &server.uri())?;
|
create_config_toml(&codex_home, &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(&codex_home).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -3476,7 +3612,11 @@ async fn thread_resume_fails_when_required_mcp_server_fails_to_initialize() -> R
|
|||||||
let rollout = setup_rollout_fixture(codex_home.path(), &server.uri()).await?;
|
let rollout = setup_rollout_fixture(codex_home.path(), &server.uri()).await?;
|
||||||
create_config_toml_with_required_broken_mcp(codex_home.path(), &server.uri())?;
|
create_config_toml_with_required_broken_mcp(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
@@ -3555,16 +3695,17 @@ async fn thread_resume_surfaces_cloud_config_bundle_load_errors() -> Result<()>
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
let refresh_token_url = format!("{}/oauth/token", server.uri());
|
let refresh_token_url = format!("{}/oauth/token", server.uri());
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(
|
(
|
||||||
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
||||||
Some(refresh_token_url.as_str()),
|
Some(refresh_token_url.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -3649,7 +3790,11 @@ async fn thread_resume_can_load_source_by_external_path() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
let thread_path = rollout_path(external_home.path(), "2025-01-05T12-00-00", &thread_id);
|
let thread_path = rollout_path(external_home.path(), "2025-01-05T12-00-00", &thread_id);
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
let resume_id = mcp
|
let resume_id = mcp
|
||||||
.send_thread_resume_request(ThreadResumeParams {
|
.send_thread_resume_request(ThreadResumeParams {
|
||||||
@@ -3739,7 +3884,11 @@ async fn start_materialized_thread_and_restart(
|
|||||||
codex_home: &Path,
|
codex_home: &Path,
|
||||||
seed_text: &str,
|
seed_text: &str,
|
||||||
) -> Result<RestartedThreadFixture> {
|
) -> Result<RestartedThreadFixture> {
|
||||||
let mut first_mcp = TestAppServer::new(codex_home).await?;
|
let mut first_mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, first_mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, first_mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = first_mcp
|
let start_id = first_mcp
|
||||||
@@ -3798,7 +3947,11 @@ async fn start_materialized_thread_and_restart(
|
|||||||
|
|
||||||
drop(first_mcp);
|
drop(first_mcp);
|
||||||
|
|
||||||
let mut second_mcp = TestAppServer::new(codex_home).await?;
|
let mut second_mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, second_mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, second_mcp.initialize()).await??;
|
||||||
|
|
||||||
Ok(RestartedThreadFixture {
|
Ok(RestartedThreadFixture {
|
||||||
@@ -3829,7 +3982,11 @@ async fn thread_resume_accepts_personality_override() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut primary = TestAppServer::new(codex_home.path()).await?;
|
let mut primary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, primary.initialize()).await??;
|
||||||
|
|
||||||
let start_id = primary
|
let start_id = primary
|
||||||
@@ -3867,7 +4024,11 @@ async fn thread_resume_accepts_personality_override() -> Result<()> {
|
|||||||
)
|
)
|
||||||
.await??;
|
.await??;
|
||||||
|
|
||||||
let mut secondary = TestAppServer::new(codex_home.path()).await?;
|
let mut secondary = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, secondary.initialize()).await??;
|
||||||
|
|
||||||
let resume_id = secondary
|
let resume_id = secondary
|
||||||
|
|||||||
@@ -28,7 +28,10 @@ const DEFAULT_READ_TIMEOUT: std::time::Duration = std::time::Duration::from_secs
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn thread_rollback_does_not_emit_deprecation_notice_to_codex_tui() -> Result<()> {
|
async fn thread_rollback_does_not_emit_deprecation_notice_to_codex_tui() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let initialized = timeout(
|
let initialized = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
mcp.initialize_with_client_info(ClientInfo {
|
mcp.initialize_with_client_info(ClientInfo {
|
||||||
@@ -80,7 +83,10 @@ async fn thread_rollback_drops_last_turns_and_persists_to_rollout() -> Result<()
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Start a thread.
|
// Start a thread.
|
||||||
|
|||||||
@@ -44,7 +44,11 @@ async fn thread_settings_update_emits_notification_and_updates_future_turns() ->
|
|||||||
write_models_cache(codex_home.path())?;
|
write_models_cache(codex_home.path())?;
|
||||||
let (model_id, service_tier_id) = service_tier_model_and_tier_id()?;
|
let (model_id, service_tier_id) = service_tier_model_and_tier_id()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread = start_thread(&mut mcp).await?.thread;
|
let thread = start_thread(&mut mcp).await?.thread;
|
||||||
|
|
||||||
@@ -107,7 +111,11 @@ async fn thread_settings_update_cwd_retargets_default_environment() -> Result<()
|
|||||||
let workspace = TempDir::new()?;
|
let workspace = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread = start_thread(&mut mcp).await?.thread;
|
let thread = start_thread(&mut mcp).await?.thread;
|
||||||
|
|
||||||
@@ -157,7 +165,11 @@ async fn thread_settings_update_while_turn_is_active_emits_notification() -> Res
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread = start_thread(&mut mcp).await?.thread;
|
let thread = start_thread(&mut mcp).await?.thread;
|
||||||
start_text_turn(&mut mcp, thread.id.clone()).await?;
|
start_text_turn(&mut mcp, thread.id.clone()).await?;
|
||||||
@@ -200,7 +212,11 @@ async fn thread_settings_update_null_service_tier_uses_default() -> Result<()> {
|
|||||||
write_models_cache(codex_home.path())?;
|
write_models_cache(codex_home.path())?;
|
||||||
let (model_id, service_tier_id) = service_tier_model_and_tier_id()?;
|
let (model_id, service_tier_id) = service_tier_model_and_tier_id()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread = start_thread(&mut mcp).await?.thread;
|
let thread = start_thread(&mut mcp).await?.thread;
|
||||||
|
|
||||||
@@ -266,7 +282,11 @@ async fn thread_settings_update_rejects_sandbox_policy_with_permissions() -> Res
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread = start_thread(&mut mcp).await?.thread;
|
let thread = start_thread(&mut mcp).await?.thread;
|
||||||
|
|
||||||
@@ -300,7 +320,11 @@ async fn turn_start_settings_override_emits_thread_settings_updated() -> Result<
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_TIMEOUT, mcp.initialize()).await??;
|
||||||
let thread = start_thread(&mut mcp).await?.thread;
|
let thread = start_thread(&mut mcp).await?.thread;
|
||||||
timeout(
|
timeout(
|
||||||
|
|||||||
@@ -60,7 +60,11 @@ async fn thread_shell_command_history_responses_exclude_persisted_command_execut
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.as_path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.as_path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -193,10 +197,11 @@ async fn thread_shell_command_returns_error_when_local_environment_is_disabled()
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.as_path(),
|
.with_codex_home(codex_home.as_path())
|
||||||
&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))],
|
.without_auto_env()
|
||||||
)
|
.with_env_overrides(&[(CODEX_EXEC_SERVER_URL_ENV_VAR, Some("none"))])
|
||||||
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -252,7 +257,11 @@ async fn thread_shell_command_uses_existing_active_turn() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.as_path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.as_path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
|
|||||||
@@ -99,7 +99,10 @@ async fn thread_start_provider_model_fallback_applies_to_configured_model() -> R
|
|||||||
model = "gpt-5.4-mini"
|
model = "gpt-5.4-mini"
|
||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -122,7 +125,10 @@ model = "gpt-5.4-mini"
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn thread_start_warns_for_exec_policy_parse_failure_after_initialize() -> Result<()> {
|
async fn thread_start_warns_for_exec_policy_parse_failure_after_initialize() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let rules_dir = codex_home.path().join("rules");
|
let rules_dir = codex_home.path().join("rules");
|
||||||
@@ -200,7 +206,10 @@ async fn thread_start_does_not_repeat_initialize_exec_policy_warning() -> Result
|
|||||||
std::fs::create_dir_all(&rules_dir)?;
|
std::fs::create_dir_all(&rules_dir)?;
|
||||||
std::fs::write(rules_dir.join("broken.rules"), "prefix_rule(")?;
|
std::fs::write(rules_dir.join("broken.rules"), "prefix_rule(")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
timeout(
|
timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
@@ -245,7 +254,10 @@ async fn thread_start_provider_model_fallback_uses_bedrock_static_catalog() -> R
|
|||||||
r#"model_provider = "amazon-bedrock"
|
r#"model_provider = "amazon-bedrock"
|
||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let unsupported_with_fallback = start_thread_with_model(
|
let unsupported_with_fallback = start_thread_with_model(
|
||||||
@@ -283,7 +295,10 @@ async fn thread_start_provider_model_fallback_ignores_dynamic_catalog() -> Resul
|
|||||||
let server = create_mock_responses_server_repeating_assistant("Done").await;
|
let server = create_mock_responses_server_repeating_assistant("Done").await;
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let response = start_thread_with_model(
|
let response = start_thread_with_model(
|
||||||
@@ -306,7 +321,10 @@ async fn thread_start_creates_thread_and_emits_started() -> Result<()> {
|
|||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
// Start server and initialize.
|
// Start server and initialize.
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Start a v2 thread with an explicit model override.
|
// Start a v2 thread with an explicit model override.
|
||||||
@@ -453,7 +471,10 @@ async fn thread_start_history_mode_accepts_legacy_and_rejects_paginated() -> Res
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -502,7 +523,11 @@ async fn thread_start_accepts_absolute_runtime_workspace_roots() -> Result<()> {
|
|||||||
let extra_root = cwd.join("extra-root");
|
let extra_root = cwd.join("extra-root");
|
||||||
std::fs::create_dir_all(&extra_root)?;
|
std::fs::create_dir_all(&extra_root)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -543,7 +568,11 @@ async fn thread_start_excludes_profile_workspace_roots_from_runtime_workspace_ro
|
|||||||
profile_root.path(),
|
profile_root.path(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -578,7 +607,11 @@ async fn thread_start_rejects_unknown_environment_as_invalid_request() -> Result
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -613,7 +646,11 @@ async fn thread_start_rejects_relative_environment_cwd_as_invalid_request() -> R
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -652,7 +689,11 @@ async fn thread_start_response_includes_loaded_instruction_sources() -> Result<(
|
|||||||
let project_agents_path = workspace.path().join("AGENTS.md");
|
let project_agents_path = workspace.path().join("AGENTS.md");
|
||||||
std::fs::write(&project_agents_path, "project instructions")?;
|
std::fs::write(&project_agents_path, "project instructions")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -699,7 +740,11 @@ async fn thread_start_response_excludes_empty_project_instruction_source() -> Re
|
|||||||
let project_agents_path = workspace.path().join("AGENTS.md");
|
let project_agents_path = workspace.path().join("AGENTS.md");
|
||||||
std::fs::write(project_agents_path, "")?;
|
std::fs::write(project_agents_path, "")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -742,7 +787,11 @@ async fn thread_start_without_selected_environment_includes_only_global_instruct
|
|||||||
let workspace = TempDir::new()?;
|
let workspace = TempDir::new()?;
|
||||||
std::fs::write(workspace.path().join("AGENTS.md"), "project instructions")?;
|
std::fs::write(workspace.path().join("AGENTS.md"), "project instructions")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -832,7 +881,12 @@ async fn thread_start_tracks_thread_initialized_analytics() -> Result<()> {
|
|||||||
create_config_toml_with_chatgpt_base_url(codex_home.path(), &server.uri(), &server.uri())?;
|
create_config_toml_with_chatgpt_base_url(codex_home.path(), &server.uri(), &server.uri())?;
|
||||||
mount_analytics_capture(&server, codex_home.path()).await?;
|
mount_analytics_capture(&server, codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -882,7 +936,11 @@ model_reasoning_effort = "high"
|
|||||||
)?;
|
)?;
|
||||||
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -912,7 +970,10 @@ async fn thread_start_drops_unsupported_service_tier_id() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let service_tier_id = "experimental-tier-id".to_string();
|
let service_tier_id = "experimental-tier-id".to_string();
|
||||||
@@ -942,7 +1003,10 @@ async fn thread_start_accepts_default_service_tier() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -973,7 +1037,10 @@ async fn thread_start_accepts_metrics_service_name() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -1000,7 +1067,10 @@ async fn thread_start_ephemeral_remains_pathless() -> Result<()> {
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
create_config_toml_without_approval_policy(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -1046,7 +1116,10 @@ async fn thread_start_fails_when_required_mcp_server_fails_to_initialize() -> Re
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_with_required_broken_mcp(codex_home.path(), &server.uri())?;
|
create_config_toml_with_required_broken_mcp(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -1082,7 +1155,10 @@ async fn thread_start_emits_mcp_server_status_updated_notifications() -> Result<
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml_with_optional_broken_mcp(codex_home.path(), &server.uri())?;
|
create_config_toml_with_optional_broken_mcp(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let req_id = mcp
|
let req_id = mcp
|
||||||
@@ -1216,16 +1292,17 @@ async fn thread_start_surfaces_cloud_config_bundle_load_errors() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
|
|
||||||
let refresh_token_url = format!("{}/oauth/token", server.uri());
|
let refresh_token_url = format!("{}/oauth/token", server.uri());
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("OPENAI_API_KEY", None),
|
("OPENAI_API_KEY", None),
|
||||||
(
|
(
|
||||||
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
REFRESH_TOKEN_URL_OVERRIDE_ENV_VAR,
|
||||||
Some(refresh_token_url.as_str()),
|
Some(refresh_token_url.as_str()),
|
||||||
),
|
),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -1276,7 +1353,11 @@ model_reasoning_effort = "high"
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let first_request = mcp
|
let first_request = mcp
|
||||||
@@ -1336,7 +1417,11 @@ async fn thread_start_with_nested_git_cwd_trusts_repo_root() -> Result<()> {
|
|||||||
let nested = repo_root.path().join("nested/project");
|
let nested = repo_root.path().join("nested/project");
|
||||||
std::fs::create_dir_all(&nested)?;
|
std::fs::create_dir_all(&nested)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1374,7 +1459,11 @@ async fn thread_start_with_read_only_sandbox_does_not_persist_project_trust() ->
|
|||||||
|
|
||||||
let workspace = TempDir::new()?;
|
let workspace = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1412,7 +1501,11 @@ async fn thread_start_preserves_untrusted_project_trust() -> Result<()> {
|
|||||||
std::fs::write(&config_path, config_toml.to_string())?;
|
std::fs::write(&config_path, config_toml.to_string())?;
|
||||||
let config_before = std::fs::read_to_string(&config_path)?;
|
let config_before = std::fs::read_to_string(&config_path)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -1453,7 +1546,11 @@ model_reasoning_effort = "high"
|
|||||||
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
set_project_trust_level(codex_home.path(), workspace.path(), TrustLevel::Trusted)?;
|
||||||
let config_before = std::fs::read_to_string(codex_home.path().join("config.toml"))?;
|
let config_before = std::fs::read_to_string(codex_home.path().join("config.toml"))?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
@@ -28,8 +28,12 @@ async fn thread_status_changed_emits_runtime_updates() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence(responses).await;
|
let server = create_mock_responses_server_sequence(responses).await;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("RUST_LOG", Some("info"))]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("RUST_LOG", Some("info"))])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_start_id = mcp
|
let thread_start_id = mcp
|
||||||
@@ -135,7 +139,10 @@ async fn thread_status_changed_can_be_opted_out() -> Result<()> {
|
|||||||
let server = create_mock_responses_server_sequence(responses).await;
|
let server = create_mock_responses_server_sequence(responses).await;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
let message = timeout(
|
let message = timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
mcp.initialize_with_capabilities(
|
mcp.initialize_with_capabilities(
|
||||||
|
|||||||
@@ -59,7 +59,10 @@ async fn thread_unarchive_moves_rollout_back_into_sessions_directory() -> Result
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
|
|||||||
@@ -42,7 +42,11 @@ async fn thread_unsubscribe_keeps_thread_loaded_until_idle_timeout() -> Result<(
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_thread(&mut mcp).await?;
|
let thread_id = start_thread(&mut mcp).await?;
|
||||||
@@ -121,7 +125,11 @@ async fn thread_unsubscribe_during_turn_keeps_turn_running() -> Result<()> {
|
|||||||
let final_response_completed = completions.remove(0);
|
let final_response_completed = completions.remove(0);
|
||||||
create_config_toml(&codex_home, server.uri())?;
|
create_config_toml(&codex_home, server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -253,7 +261,11 @@ async fn thread_unsubscribe_preserves_cached_status_before_idle_unload() -> Resu
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_thread(&mut mcp).await?;
|
let thread_id = start_thread(&mut mcp).await?;
|
||||||
@@ -340,7 +352,11 @@ async fn thread_unsubscribe_reports_not_subscribed_before_idle_unload() -> Resul
|
|||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
create_config_toml(codex_home.path(), &server.uri())?;
|
create_config_toml(codex_home.path(), &server.uri())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_id = start_thread(&mut mcp).await?;
|
let thread_id = start_thread(&mut mcp).await?;
|
||||||
|
|||||||
@@ -57,7 +57,11 @@ async fn turn_interrupt_aborts_running_turn() -> Result<()> {
|
|||||||
.await;
|
.await;
|
||||||
create_config_toml(&codex_home, &server.uri(), "never", "workspace-write")?;
|
create_config_toml(&codex_home, &server.uri(), "never", "workspace-write")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Start a v2 thread and capture its id.
|
// Start a v2 thread and capture its id.
|
||||||
@@ -141,7 +145,10 @@ async fn turn_interrupt_rejects_completed_turn() -> Result<()> {
|
|||||||
.await;
|
.await;
|
||||||
create_config_toml(&codex_home, &server.uri(), "never", "workspace-write")?;
|
create_config_toml(&codex_home, &server.uri(), "never", "workspace-write")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -236,7 +243,11 @@ async fn turn_interrupt_resolves_pending_command_approval_request() -> Result<()
|
|||||||
.await;
|
.await;
|
||||||
create_config_toml(&codex_home, &server.uri(), "untrusted", "read-only")?;
|
create_config_toml(&codex_home, &server.uri(), "untrusted", "read-only")?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
|
|||||||
@@ -132,7 +132,10 @@ async fn run_local_image_turn(detail: Option<ImageDetail>) -> Result<Vec<Value>>
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -229,7 +232,10 @@ async fn turn_start_with_empty_input_runs_model_request() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -331,7 +337,10 @@ async fn turn_start_additional_context_flows_to_model_input() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -408,7 +417,10 @@ async fn turn_start_sends_originator_header() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::Personality, true)]),
|
&BTreeMap::from([(Feature::Personality, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(
|
timeout(
|
||||||
DEFAULT_READ_TIMEOUT,
|
DEFAULT_READ_TIMEOUT,
|
||||||
mcp.initialize_with_client_info(ClientInfo {
|
mcp.initialize_with_client_info(ClientInfo {
|
||||||
@@ -485,7 +497,10 @@ async fn turn_start_emits_user_message_item_with_text_elements() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::Personality, true)]),
|
&BTreeMap::from([(Feature::Personality, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -601,13 +616,14 @@ async fn turn_start_emits_thread_scoped_warning_notification_for_trimmed_skills(
|
|||||||
write_test_skill(codex_home.path(), "beta-skill")?;
|
write_test_skill(codex_home.path(), "beta-skill")?;
|
||||||
|
|
||||||
let isolated_home = codex_home.path().to_string_lossy();
|
let isolated_home = codex_home.path().to_string_lossy();
|
||||||
let mut mcp = TestAppServer::new_with_env(
|
let mut mcp = TestAppServer::builder()
|
||||||
codex_home.path(),
|
.with_codex_home(codex_home.path())
|
||||||
&[
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[
|
||||||
("HOME", Some(isolated_home.as_ref())),
|
("HOME", Some(isolated_home.as_ref())),
|
||||||
("USERPROFILE", Some(isolated_home.as_ref())),
|
("USERPROFILE", Some(isolated_home.as_ref())),
|
||||||
],
|
])
|
||||||
)
|
.build()
|
||||||
.await?;
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
@@ -701,7 +717,10 @@ async fn turn_start_sends_service_tier_id_to_model_request() -> Result<()> {
|
|||||||
.expect("bundled model catalog should include a picker model with service tiers");
|
.expect("bundled model catalog should include a picker model with service tiers");
|
||||||
let service_tier_id = service_tier_model.service_tiers[0].id.clone();
|
let service_tier_id = service_tier_model.service_tiers[0].id.clone();
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -765,7 +784,10 @@ async fn thread_start_omits_empty_instruction_overrides_from_model_request() ->
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -867,7 +889,12 @@ async fn turn_start_tracks_thread_originator_in_analytics() -> Result<()> {
|
|||||||
std::fs::write(config_path, config)?;
|
std::fs::write(config_path, config)?;
|
||||||
mount_analytics_capture(&server, codex_home.path()).await?;
|
mount_analytics_capture(&server, codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -992,7 +1019,12 @@ async fn turn_profile_tracks_blocking_tool_and_follow_up_sampling() -> Result<()
|
|||||||
)?;
|
)?;
|
||||||
mount_analytics_capture(&server, codex_home.path()).await?;
|
mount_analytics_capture(&server, codex_home.path()).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1093,7 +1125,10 @@ async fn turn_start_accepts_text_at_limit_with_mention_item() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::Personality, true)]),
|
&BTreeMap::from([(Feature::Personality, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1153,7 +1188,10 @@ async fn turn_start_rejects_combined_oversized_text_input() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::Personality, true)]),
|
&BTreeMap::from([(Feature::Personality, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1233,7 +1271,10 @@ async fn turn_start_rejects_invalid_permission_selection_before_starting_turn()
|
|||||||
"sandbox_mode = \"read-only\"\n",
|
"sandbox_mode = \"read-only\"\n",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1305,7 +1346,11 @@ async fn turn_start_rejects_unknown_environment_before_starting_turn() -> Result
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1380,7 +1425,10 @@ async fn turn_start_emits_notifications_and_accepts_model_override() -> Result<(
|
|||||||
&BTreeMap::from([(Feature::Personality, true)]),
|
&BTreeMap::from([(Feature::Personality, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// Start a thread (v2) and capture its id.
|
// Start a thread (v2) and capture its id.
|
||||||
@@ -1525,7 +1573,10 @@ async fn turn_start_accepts_collaboration_mode_override_v2() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1611,7 +1662,10 @@ async fn turn_start_uses_thread_feature_overrides_for_request_user_input_tool_de
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1696,7 +1750,10 @@ async fn turn_start_accepts_personality_override_v2() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::Personality, true)]),
|
&BTreeMap::from([(Feature::Personality, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1773,7 +1830,10 @@ async fn turn_start_ignores_deprecated_multi_agent_mode() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::MultiAgentV2, true)]),
|
&BTreeMap::from([(Feature::MultiAgentV2, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1850,7 +1910,10 @@ async fn thread_start_ignores_deprecated_multi_agent_mode() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::MultiAgentV2, true)]),
|
&BTreeMap::from([(Feature::MultiAgentV2, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -1938,7 +2001,10 @@ async fn turn_start_change_personality_mid_thread_v2() -> Result<()> {
|
|||||||
&BTreeMap::from([(Feature::Personality, true)]),
|
&BTreeMap::from([(Feature::Personality, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -2054,7 +2120,10 @@ async fn turn_start_uses_migrated_pragmatic_personality_without_override_v2() ->
|
|||||||
/*git_info*/ None,
|
/*git_info*/ None,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let persisted_toml: ConfigToml = toml::from_str(&std::fs::read_to_string(
|
let persisted_toml: ConfigToml = toml::from_str(&std::fs::read_to_string(
|
||||||
@@ -2185,7 +2254,11 @@ async fn turn_start_exec_approval_toggle_v2() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.as_path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.as_path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// thread/start
|
// thread/start
|
||||||
@@ -2331,7 +2404,11 @@ async fn turn_start_exec_approval_decline_v2() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.as_path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.as_path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -2484,7 +2561,11 @@ async fn turn_start_updates_sandbox_and_cwd_between_turns_v2() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
// thread/start
|
// thread/start
|
||||||
@@ -2678,7 +2759,11 @@ stream_max_retries = 0
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -2789,7 +2874,11 @@ url = "ws://127.0.0.1:1"
|
|||||||
"#,
|
"#,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
for case in [
|
for case in [
|
||||||
@@ -2944,7 +3033,11 @@ async fn turn_start_file_change_approval_v2() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_req = mcp
|
let start_req = mcp
|
||||||
@@ -3135,7 +3228,11 @@ async fn turn_start_does_not_stream_apply_patch_change_updates_without_feature_v
|
|||||||
let server = create_mock_responses_server_sequence(responses).await;
|
let server = create_mock_responses_server_sequence(responses).await;
|
||||||
create_config_toml(&codex_home, &server.uri(), "never", &BTreeMap::default())?;
|
create_config_toml(&codex_home, &server.uri(), "never", &BTreeMap::default())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_req = mcp
|
let start_req = mcp
|
||||||
@@ -3273,7 +3370,11 @@ async fn turn_start_streams_apply_patch_change_updates_v2() -> Result<()> {
|
|||||||
model["apply_patch_tool_type"] = serde_json::Value::from("freeform");
|
model["apply_patch_tool_type"] = serde_json::Value::from("freeform");
|
||||||
std::fs::write(&cache_path, serde_json::to_string_pretty(&cache)?)?;
|
std::fs::write(&cache_path, serde_json::to_string_pretty(&cache)?)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_req = mcp
|
let start_req = mcp
|
||||||
@@ -3405,7 +3506,10 @@ async fn turn_start_emits_spawn_agent_item_with_model_metadata_v2() -> Result<()
|
|||||||
&BTreeMap::from([(Feature::Collab, true)]),
|
&BTreeMap::from([(Feature::Collab, true)]),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -3623,7 +3727,10 @@ async fn direct_input_to_multi_agent_v2_subagent_is_rejected() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
write_models_cache(codex_home.path())?;
|
write_models_cache(codex_home.path())?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -3801,7 +3908,10 @@ config_file = "./custom-role.toml"
|
|||||||
),
|
),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_with_auto_env(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -3945,7 +4055,11 @@ async fn turn_start_file_change_approval_accept_for_session_persists_v2() -> Res
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_req = mcp
|
let start_req = mcp
|
||||||
@@ -4118,7 +4232,11 @@ async fn turn_start_file_change_approval_decline_v2() -> Result<()> {
|
|||||||
&BTreeMap::default(),
|
&BTreeMap::default(),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_req = mcp
|
let start_req = mcp
|
||||||
@@ -4265,7 +4383,11 @@ async fn command_execution_notifications_include_process_id() -> Result<()> {
|
|||||||
"danger-full-access",
|
"danger-full-access",
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let start_id = mcp
|
let start_id = mcp
|
||||||
@@ -4399,7 +4521,11 @@ async fn turn_start_with_elevated_override_does_not_persist_project_trust() -> R
|
|||||||
|
|
||||||
let workspace = TempDir::new()?;
|
let workspace = TempDir::new()?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_request = mcp
|
let thread_request = mcp
|
||||||
|
|||||||
@@ -746,11 +746,12 @@ async fn create_zsh_test_mcp_process(
|
|||||||
) -> Result<TestAppServer> {
|
) -> Result<TestAppServer> {
|
||||||
let app_server = create_test_package_app_server(codex_home, zsh_path)?;
|
let app_server = create_test_package_app_server(codex_home, zsh_path)?;
|
||||||
let zdotdir = zdotdir.to_string_lossy().into_owned();
|
let zdotdir = zdotdir.to_string_lossy().into_owned();
|
||||||
TestAppServer::new_with_program_and_env(
|
TestAppServer::builder()
|
||||||
codex_home,
|
.with_codex_home(codex_home)
|
||||||
&app_server,
|
.without_auto_env()
|
||||||
&[("ZDOTDIR", Some(zdotdir.as_str()))],
|
.with_program(&app_server)
|
||||||
)
|
.with_env_overrides(&[("ZDOTDIR", Some(zdotdir.as_str()))])
|
||||||
|
.build()
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -50,7 +50,12 @@ async fn turn_steer_requires_active_turn() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
mount_analytics_capture(&server, &codex_home).await?;
|
mount_analytics_capture(&server, &codex_home).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -136,7 +141,12 @@ async fn turn_steer_rejects_oversized_text_input() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
mount_analytics_capture(&server, &codex_home).await?;
|
mount_analytics_capture(&server, &codex_home).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -250,7 +260,12 @@ async fn turn_steer_returns_active_turn_id() -> Result<()> {
|
|||||||
)?;
|
)?;
|
||||||
mount_analytics_capture(&server, &codex_home).await?;
|
mount_analytics_capture(&server, &codex_home).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -387,7 +402,12 @@ async fn turn_steer_rejects_context_only_input_without_merging_context() -> Resu
|
|||||||
)?;
|
)?;
|
||||||
mount_analytics_capture(&server, &codex_home).await?;
|
mount_analytics_capture(&server, &codex_home).await?;
|
||||||
|
|
||||||
let mut mcp = TestAppServer::new_without_managed_config(&codex_home).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(&codex_home)
|
||||||
|
.without_auto_env()
|
||||||
|
.without_managed_config()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
|
|||||||
@@ -78,8 +78,12 @@ async fn standalone_web_search_round_trips_output() -> Result<()> {
|
|||||||
AuthCredentialsStoreMode::File,
|
AuthCredentialsStoreMode::File,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
let mut mcp =
|
let mut mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let thread_req = mcp
|
let thread_req = mcp
|
||||||
@@ -196,8 +200,12 @@ async fn standalone_web_search_round_trips_output() -> Result<()> {
|
|||||||
assert_eq!(completed.item, expected_completed_item);
|
assert_eq!(completed.item, expected_completed_item);
|
||||||
|
|
||||||
drop(mcp);
|
drop(mcp);
|
||||||
let mut reloaded_mcp =
|
let mut reloaded_mcp = TestAppServer::builder()
|
||||||
TestAppServer::new_with_env(codex_home.path(), &[("OPENAI_API_KEY", None)]).await?;
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.with_env_overrides(&[("OPENAI_API_KEY", None)])
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, reloaded_mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, reloaded_mcp.initialize()).await??;
|
||||||
let read_req = reloaded_mcp
|
let read_req = reloaded_mcp
|
||||||
.send_thread_read_request(ThreadReadParams {
|
.send_thread_read_request(ThreadReadParams {
|
||||||
|
|||||||
@@ -31,7 +31,11 @@ async fn windows_sandbox_setup_start_emits_completion_notification() -> Result<(
|
|||||||
"mock_provider",
|
"mock_provider",
|
||||||
"compact prompt",
|
"compact prompt",
|
||||||
)?;
|
)?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
@@ -66,7 +70,11 @@ async fn windows_sandbox_setup_start_emits_completion_notification() -> Result<(
|
|||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn windows_sandbox_setup_start_rejects_relative_cwd() -> Result<()> {
|
async fn windows_sandbox_setup_start_rejects_relative_cwd() -> Result<()> {
|
||||||
let codex_home = TempDir::new()?;
|
let codex_home = TempDir::new()?;
|
||||||
let mut mcp = TestAppServer::new(codex_home.path()).await?;
|
let mut mcp = TestAppServer::builder()
|
||||||
|
.with_codex_home(codex_home.path())
|
||||||
|
.without_auto_env()
|
||||||
|
.build()
|
||||||
|
.await?;
|
||||||
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
timeout(DEFAULT_READ_TIMEOUT, mcp.initialize()).await??;
|
||||||
|
|
||||||
let request_id = mcp
|
let request_id = mcp
|
||||||
|
|||||||
Reference in new issue
Block a user