chore: drop MCP Plugins and App from Morpheus (#19380)

Quick fix of https://github.com/openai/codex/issues/18333
This commit is contained in:
jif-oai
2026-04-24 17:57:48 +02:00
committed by GitHub
Unverified
parent 11806faf71
commit f802f0a391
2 changed files with 60 additions and 1 deletions
+8
View File
@@ -26,6 +26,7 @@ use codex_protocol::protocol::TokenUsage;
use codex_protocol::user_input::UserInput;
use codex_state::Stage1Output;
use codex_state::StateRuntime;
use std::collections::HashMap;
use std::collections::HashSet;
use std::sync::Arc;
use std::time::Duration;
@@ -303,12 +304,19 @@ mod agent {
agent_config.ephemeral = true;
agent_config.memories.generate_memories = false;
agent_config.memories.use_memories = false;
agent_config.include_apps_instructions = false;
agent_config.mcp_servers = Constrained::allow_only(HashMap::new());
// Approval policy
agent_config.permissions.approval_policy = Constrained::allow_only(AskForApproval::Never);
// Consolidation runs as an internal sub-agent and must not recursively delegate.
let _ = agent_config.features.disable(Feature::SpawnCsv);
let _ = agent_config.features.disable(Feature::Collab);
let _ = agent_config.features.disable(Feature::MemoryTool);
let _ = agent_config.features.disable(Feature::Apps);
let _ = agent_config.features.disable(Feature::Plugins);
let _ = agent_config
.features
.disable(Feature::SkillMcpDependencyInstall);
// Sandbox policy
let writable_roots = vec![root];
+52 -1
View File
@@ -427,6 +427,7 @@ mod phase2 {
use chrono::Duration as ChronoDuration;
use chrono::Utc;
use codex_config::Constrained;
use codex_config::types::McpServerConfig;
use codex_features::Feature;
use codex_login::CodexAuth;
use codex_protocol::AgentPath;
@@ -440,6 +441,7 @@ mod phase2 {
use codex_state::Phase2JobClaimOutcome;
use codex_state::Stage1Output;
use codex_state::ThreadMetadataBuilder;
use std::collections::HashMap;
use std::path::PathBuf;
use std::sync::Arc;
use tempfile::TempDir;
@@ -470,6 +472,10 @@ mod phase2 {
impl DispatchHarness {
async fn new() -> Self {
Self::new_with_config(|_| {}).await
}
async fn new_with_config(configure: impl FnOnce(&mut Config)) -> Self {
let codex_home = tempfile::tempdir().expect("create temp codex home");
let mut config = test_config().await;
config.codex_home =
@@ -478,6 +484,7 @@ mod phase2 {
config.cwd = config.codex_home.clone();
config.permissions.file_system_sandbox_policy = FileSystemSandboxPolicy::unrestricted();
config.permissions.network_sandbox_policy = NetworkSandboxPolicy::Enabled;
configure(&mut config);
let config = Arc::new(config);
let state_db = codex_state::StateRuntime::init(
@@ -642,7 +649,24 @@ mod phase2 {
#[tokio::test]
async fn dispatch_reclaims_stale_global_lock_and_starts_consolidation() {
let harness = DispatchHarness::new().await;
let harness = DispatchHarness::new_with_config(|config| {
let server: McpServerConfig =
toml::from_str("command = \"docs-server\"").expect("deserialize MCP server");
config
.mcp_servers
.set(HashMap::from([("docs".to_string(), server)]))
.expect("parent MCP servers are configurable");
config
.features
.enable(Feature::Apps)
.expect("apps feature is configurable");
config
.features
.enable(Feature::Plugins)
.expect("plugins feature is configurable");
config.include_apps_instructions = true;
})
.await;
harness.seed_stage1_output(Utc::now().timestamp()).await;
let stale_claim = harness
@@ -751,6 +775,33 @@ mod phase2 {
!turn_context.features.enabled(Feature::MemoryTool),
"consolidation subagent should have the memories feature disabled"
);
assert!(
turn_context.config.mcp_servers.get().is_empty(),
"consolidation subagent should not inherit configured MCP servers"
);
assert!(
!subagent
.codex
.session
.services
.mcp_connection_manager
.read()
.await
.has_servers(),
"consolidation subagent should not initialize MCP servers"
);
assert!(
!turn_context.features.enabled(Feature::Apps),
"consolidation subagent should not expose app-backed MCP"
);
assert!(
!turn_context.features.enabled(Feature::Plugins),
"consolidation subagent should not expose plugin-backed MCP"
);
assert!(
!turn_context.config.include_apps_instructions,
"consolidation subagent should not include apps instructions"
);
assert!(
!turn_context.config.memories.generate_memories,
"consolidation subagent should not generate memories"