refactor(omp): rename the internal app id from ohmypi to omp

Match the binary name, the Apps page tool id and the i18n keys that
already used omp. The app is unreleased, so nothing persisted needs a
migration; ohmypi stays accepted as an alias when parsing app ids.
Show the app by default like Pi and Kimi Code.
This commit is contained in:
Jason authored and Jason Young committed 2026-10-24 15:30:32 +08:00
1 parent c8945d2d91
commit 2afe8cdbef
103 files changed
+936 -1003

No files matched your search

+2 -2
View File
@@ -427,7 +427,7 @@ command = "echo"
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -562,7 +562,7 @@ fn import_from_claude_merges_into_config() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
+32 -40
View File
@@ -762,7 +762,7 @@ command = "echo"
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -912,7 +912,7 @@ fn set_mcp_enabled_for_codex_writes_live_config() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -983,7 +983,7 @@ fn enabling_codex_mcp_skips_when_codex_dir_missing() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1034,7 +1034,7 @@ fn upsert_mcp_server_disabling_app_removes_from_claude_live_config() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1074,7 +1074,7 @@ fn upsert_mcp_server_disabling_app_removes_from_claude_live_config() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1260,7 +1260,7 @@ fn enabling_gemini_mcp_skips_when_gemini_dir_missing() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1321,7 +1321,7 @@ fn enabling_claude_mcp_skips_when_claude_config_absent() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1382,7 +1382,7 @@ fn explicit_default_claude_dir_keeps_default_split_mcp_path() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1444,7 +1444,7 @@ fn custom_claude_dir_writes_mcp_inside_config_dir() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1529,7 +1529,7 @@ fn custom_claude_dir_sync_does_not_copy_default_profile() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1674,7 +1674,7 @@ fn sync_all_enabled_removes_known_disabled_but_preserves_unknown_live_entries()
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1702,7 +1702,7 @@ fn sync_all_enabled_removes_known_disabled_but_preserves_unknown_live_entries()
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1750,7 +1750,7 @@ fn resync_targets_default_to_managed_apps_and_reject_unsupported() {
"mcode",
"kimi",
"agy",
"ohmypi"
"omp"
]
);
assert_eq!(McpService::resync_targets(Some(&[])).unwrap(), all);
@@ -1818,7 +1818,7 @@ fn omp_test_state() -> (cc_switch_lib::AppState, std::path::PathBuf) {
fs::create_dir_all(path.parent().unwrap()).unwrap();
fs::write(&path, "{}").unwrap();
update_settings(AppSettings {
ohmypi_config_dir: Some(path.parent().unwrap().to_string_lossy().into_owned()),
omp_config_dir: Some(path.parent().unwrap().to_string_lossy().into_owned()),
..Default::default()
})
.unwrap();
@@ -1826,14 +1826,14 @@ fn omp_test_state() -> (cc_switch_lib::AppState, std::path::PathBuf) {
}
#[test]
fn ohmypi_mcp_disable_reenable_preserves_options_and_suppresses_discovered_sources() {
fn omp_mcp_disable_reenable_preserves_options_and_suppresses_discovered_sources() {
let _guard = test_mutex().lock().unwrap();
let (state, path) = omp_test_state();
let native = json!({"mcpServers":{"demo":{"command":"node","args":["mcp.js"],"enabled":false,"timeout":0,"requestIdFormat":"string","instructions":false}},"disabledServers":["demo","other"],"enabledServers":["other"]});
fs::write(&path, native.to_string()).unwrap();
assert_eq!(McpService::import_from_ohmypi(&state).unwrap(), 1);
assert!(!state.db.get_all_mcp_servers().unwrap()["demo"].apps.ohmypi);
McpService::toggle_app(&state, "demo", AppType::OhMyPi, true).unwrap();
assert_eq!(McpService::import_from_omp(&state).unwrap(), 1);
assert!(!state.db.get_all_mcp_servers().unwrap()["demo"].apps.omp);
McpService::toggle_app(&state, "demo", AppType::Omp, true).unwrap();
let read =
|| serde_json::from_str::<serde_json::Value>(&fs::read_to_string(&path).unwrap()).unwrap();
let enabled = read();
@@ -1845,7 +1845,7 @@ fn ohmypi_mcp_disable_reenable_preserves_options_and_suppresses_discovered_sourc
native["mcpServers"]["demo"][field]
);
}
McpService::toggle_app(&state, "demo", AppType::OhMyPi, false).unwrap();
McpService::toggle_app(&state, "demo", AppType::Omp, false).unwrap();
let disabled = read();
assert_eq!(disabled["mcpServers"]["demo"]["enabled"], false);
assert!(
@@ -1855,24 +1855,24 @@ fn ohmypi_mcp_disable_reenable_preserves_options_and_suppresses_discovered_sourc
.contains(&json!("demo")),
"the denylist must also suppress project/foreign discovery"
);
McpService::toggle_app(&state, "demo", AppType::OhMyPi, true).unwrap();
McpService::toggle_app(&state, "demo", AppType::Omp, true).unwrap();
let mut edited = state.db.get_all_mcp_servers().unwrap()["demo"].clone();
edited.apps.ohmypi = false;
edited.apps.omp = false;
McpService::upsert_server(&state, edited).unwrap();
assert_eq!(read()["mcpServers"]["demo"]["enabled"], false);
let mut disabled_edit = state.db.get_all_mcp_servers().unwrap()["demo"].clone();
disabled_edit.server["args"] = json!(["updated.js"]);
McpService::upsert_server(&state, disabled_edit).unwrap();
McpService::toggle_app(&state, "demo", AppType::OhMyPi, true).unwrap();
McpService::toggle_app(&state, "demo", AppType::Omp, true).unwrap();
assert_eq!(read()["mcpServers"]["demo"]["args"], json!(["updated.js"]));
McpService::toggle_app(&state, "demo", AppType::OhMyPi, false).unwrap();
McpService::toggle_app(&state, "demo", AppType::Omp, false).unwrap();
assert!(McpService::delete_server(&state, "demo").unwrap());
assert!(read()["mcpServers"].get("demo").is_none());
assert_eq!(read()["disabledServers"], json!(["other"]));
}
#[test]
fn ohmypi_mcp_resync_and_conflicting_enable_preserve_native_configuration() {
fn omp_mcp_resync_and_conflicting_enable_preserve_native_configuration() {
let _guard = test_mutex().lock().unwrap();
let (state, path) = omp_test_state();
let native =
@@ -1880,15 +1880,11 @@ fn ohmypi_mcp_resync_and_conflicting_enable_preserve_native_configuration() {
fs::write(&path, native.to_string()).unwrap();
let server: McpServer = serde_json::from_value(json!({"id":"context7","name":"Context7","server":{"command":"managed"},"apps":{"claude":true}})).unwrap();
state.db.save_mcp_server(&server).unwrap();
McpService::sync_enabled_for_app(&state, &AppType::OhMyPi).unwrap();
McpService::sync_enabled_for_app(&state, &AppType::Omp).unwrap();
assert_eq!(fs::read_to_string(&path).unwrap(), native.to_string());
assert!(McpService::toggle_app(&state, &server.id, AppType::OhMyPi, true).is_err());
assert!(
!state.db.get_all_mcp_servers().unwrap()[&server.id]
.apps
.ohmypi
);
assert!(McpService::import_from_ohmypi(&state)
assert!(McpService::toggle_app(&state, &server.id, AppType::Omp, true).is_err());
assert!(!state.db.get_all_mcp_servers().unwrap()[&server.id].apps.omp);
assert!(McpService::import_from_omp(&state)
.unwrap_err()
.to_string()
.contains("context7"));
@@ -1896,11 +1892,11 @@ fn ohmypi_mcp_resync_and_conflicting_enable_preserve_native_configuration() {
}
#[test]
fn ohmypi_mcp_delete_removes_enabled_native_entry_and_write_failure_keeps_db() {
fn omp_mcp_delete_removes_enabled_native_entry_and_write_failure_keeps_db() {
let _guard = test_mutex().lock().unwrap();
let (state, path) = omp_test_state();
let server: McpServer = serde_json::from_value(
json!({"id":"demo","name":"Demo","server":{"command":"node"},"apps":{"ohmypi":true}}),
json!({"id":"demo","name":"Demo","server":{"command":"node"},"apps":{"omp":true}}),
)
.unwrap();
McpService::upsert_server(&state, server.clone()).unwrap();
@@ -1911,12 +1907,8 @@ fn ohmypi_mcp_delete_removes_enabled_native_entry_and_write_failure_keeps_db() {
.get_all_mcp_servers()
.unwrap()
.contains_key(&server.id));
assert!(McpService::toggle_app(&state, &server.id, AppType::OhMyPi, false).is_err());
assert!(
state.db.get_all_mcp_servers().unwrap()[&server.id]
.apps
.ohmypi
);
assert!(McpService::toggle_app(&state, &server.id, AppType::Omp, false).is_err());
assert!(state.db.get_all_mcp_servers().unwrap()[&server.id].apps.omp);
fs::write(
&path,
json!({"mcpServers":{"demo":{"command":"node","enabled":true}}}).to_string(),
+1 -1
View File
@@ -546,7 +546,7 @@ command = "say"
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
+12 -12
View File
@@ -171,7 +171,7 @@ command = "say"
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1584,7 +1584,7 @@ fn switch_codex_ignores_a_broken_claude_json() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -1650,7 +1650,7 @@ fn sync_all_enabled_reports_broken_app_but_projects_the_rest() {
mcode: false,
kimi: false,
pi: false,
ohmypi: false,
omp: false,
},
description: None,
homepage: None,
@@ -3702,7 +3702,7 @@ fn codex_editor_official_auth_shows_disk_login_and_keeps_row_auth() {
}
#[test]
fn ohmypi_edit_save_preserves_comments_without_false_conflict() {
fn omp_edit_save_preserves_comments_without_false_conflict() {
use cc_switch_lib::update_settings;
use std::fs;
@@ -3718,19 +3718,19 @@ fn ohmypi_edit_save_preserves_comments_without_false_conflict() {
)
.unwrap();
update_settings(cc_switch_lib::AppSettings {
ohmypi_config_dir: Some(agent_dir.to_string_lossy().into_owned()),
omp_config_dir: Some(agent_dir.to_string_lossy().into_owned()),
..Default::default()
})
.unwrap();
let state = create_test_state().expect("create test state");
// list() syncs the DB row from models.yml and captures the raw entry.
let providers = ProviderService::list(&state, AppType::OhMyPi).expect("list");
let providers = ProviderService::list(&state, AppType::Omp).expect("list");
let original = providers.get("duolalab").expect("provider").clone();
assert!(original
.meta
.as_ref()
.and_then(|meta| meta.ohmypi_passthrough_yaml.as_deref())
.and_then(|meta| meta.omp_passthrough_yaml.as_deref())
.expect("raw entry captured")
.contains("# proxy endpoint"));
@@ -3739,7 +3739,7 @@ fn ohmypi_edit_save_preserves_comments_without_false_conflict() {
let raw = original
.meta
.as_ref()
.and_then(|meta| meta.ohmypi_passthrough_yaml.clone())
.and_then(|meta| meta.omp_passthrough_yaml.clone())
.unwrap();
let edited_raw = raw.replace("# proxy endpoint", "# edited comment");
let mut edited = original.clone();
@@ -3747,9 +3747,9 @@ fn ohmypi_edit_save_preserves_comments_without_false_conflict() {
edited
.meta
.get_or_insert_with(ProviderMeta::default)
.ohmypi_passthrough_yaml = Some(edited_raw);
.omp_passthrough_yaml = Some(edited_raw);
ProviderService::update(&state, AppType::OhMyPi, Some("duolalab"), edited)
ProviderService::update(&state, AppType::Omp, Some("duolalab"), edited)
.expect("update without false conflict");
let after = fs::read_to_string(&models_path).unwrap();
@@ -3759,7 +3759,7 @@ fn ohmypi_edit_save_preserves_comments_without_false_conflict() {
assert!(after.contains("name: Duolalab"), "{after}");
// External edit after the DB sync still conflicts.
let synced = ProviderService::list(&state, AppType::OhMyPi)
let synced = ProviderService::list(&state, AppType::Omp)
.expect("list again")
.get("duolalab")
.cloned()
@@ -3767,7 +3767,7 @@ fn ohmypi_edit_save_preserves_comments_without_false_conflict() {
fs::write(&models_path, after.replace("sk-live", "sk-external")).unwrap();
let mut stale = synced.clone();
stale.settings_config["name"] = json!("Stale");
let err = ProviderService::update(&state, AppType::OhMyPi, Some("duolalab"), stale)
let err = ProviderService::update(&state, AppType::Omp, Some("duolalab"), stale)
.expect_err("external edit must conflict");
assert!(
err.to_string().contains("changed outside CC Switch"),