[codex] remove blocking external agent migration flow (#27064)

## Why

External-agent import should be initiated deliberately instead of
interrupting eligible TUI startups. This cleanup removes the blocking
startup flow before the replacement import experience is introduced
later in the stack.

## What changed

- remove the startup-blocking external-agent migration prompt
- remove the now-unused external migration feature gate
- remove the obsolete TUI app-server migration wrappers
- retain the dormant picker behind a module-scoped dead-code allowance
until the next stack item wires it back in
- keep normal TUI startup focused on entering Codex immediately

## Validation

- `bazel build --config=clippy //codex-rs/tui:tui
//codex-rs/tui:tui-unit-tests-bin`
- `just test -p codex-tui external_agent_config_migration` (8 passed)
- `just test -p codex-tui` (2,786 passed, 12 unrelated local
environment-sensitive failures, 4 skipped)
- `just fix -p codex-tui`
- `just fmt`

## Stack

1. [#27064](https://github.com/openai/codex/pull/27064): remove the
startup migration flow
2. [#27065](https://github.com/openai/codex/pull/27065): extract the
picker renderer
3. [#27070](https://github.com/openai/codex/pull/27070): add the
external-agent import picker UX
4. [#27071](https://github.com/openai/codex/pull/27071): expose the flow
through `/import`

**This PR is stack item 1.**
This commit is contained in:
stefanstokic-oai
2026-06-10 14:25:04 -04:00
committed by GitHub
parent 3691fe5b76
commit 636cc11398
6 changed files with 18 additions and 682 deletions
+2 -6
View File
@@ -177,7 +177,7 @@ pub enum Feature {
RemotePlugin,
/// Enable remote plugin sharing flows.
PluginSharing,
/// Show the startup prompt for migrating external agent config into Codex.
/// Removed compatibility flag retained as a no-op.
ExternalMigration,
/// Allow the model to invoke the built-in image generation tool.
ImageGeneration,
@@ -1071,11 +1071,7 @@ pub const FEATURES: &[FeatureSpec] = &[
FeatureSpec {
id: Feature::ExternalMigration,
key: "external_migration",
stage: Stage::Experimental {
name: "External migration",
menu_description: "Show a startup prompt when Codex detects migratable external agent config for this machine or project.",
announcement: "",
},
stage: Stage::Removed,
default_enabled: false,
},
FeatureSpec {
+10 -17
View File
@@ -83,6 +83,16 @@ fn plugin_hooks_is_removed_and_disabled_by_default() {
assert_eq!(feature_for_key("plugin_hooks"), Some(Feature::PluginHooks));
}
#[test]
fn external_migration_is_removed_and_disabled_by_default() {
assert_eq!(Feature::ExternalMigration.stage(), Stage::Removed);
assert_eq!(Feature::ExternalMigration.default_enabled(), false);
assert_eq!(
feature_for_key("external_migration"),
Some(Feature::ExternalMigration)
);
}
#[test]
fn removed_apps_mcp_path_override_shapes_are_ignored() {
let features = [
@@ -122,23 +132,6 @@ fn guardian_approval_is_stable_and_enabled_by_default() {
assert_eq!(Feature::GuardianApproval.default_enabled(), true);
}
#[test]
fn external_migration_is_experimental_and_disabled_by_default() {
let spec = Feature::ExternalMigration.info();
let stage = spec.stage;
assert!(matches!(stage, Stage::Experimental { .. }));
assert_eq!(stage.experimental_menu_name(), Some("External migration"));
assert_eq!(
stage.experimental_menu_description(),
Some(
"Show a startup prompt when Codex detects migratable external agent config for this machine or project."
)
);
assert_eq!(stage.experimental_announcement(), None);
assert_eq!(Feature::ExternalMigration.default_enabled(), false);
}
#[test]
fn request_permissions_is_under_development() {
assert_eq!(