mirror of
https://github.com/pchuan98/codex.git
synced 2026-07-01 00:31:56 +08:00
20b4b80426
… import ## Why `externalAgentConfig/import` used to spawn plugin imports in the background and return immediately. That meant local marketplace imports could still be in flight when the caller refreshed plugin state, so newly imported plugins would not show up right away. This change makes local marketplace imports complete before the RPC returns, while keeping remote marketplace imports asynchronous so we do not block on remote fetches. ## What changed - split plugin migration details into local and remote marketplace imports based on the external config source - import local marketplaces synchronously during `externalAgentConfig/import` - return pending remote plugin imports to the app-server so it can finish them in the background - clear the plugin and skills caches before responding to plugin imports, and again after background remote imports complete, so the next `plugin/list` reloads fresh state - keep marketplace source parsing encapsulated behind `is_local_marketplace_source(...)` instead of re-exporting the internal enum - add core and app-server coverage for the synchronous local import path and the pending remote import path ## Verification - `cargo test -p codex-app-server-protocol` - `cargo test -p codex-core` (currently fails an existing unrelated test: `config_loader::tests::cli_override_can_update_project_local_mcp_server_when_project_is_trusted`) - `cargo test` (currently fails existing `codex-app-server` integration tests in MCP/skills/thread-start areas, plus the unrelated `codex-core` failure above)
65 lines
2.7 KiB
Rust
65 lines
2.7 KiB
Rust
use codex_config::types::McpServerConfig;
|
|
|
|
mod discoverable;
|
|
mod injection;
|
|
mod installed_marketplaces;
|
|
mod manager;
|
|
mod marketplace_add;
|
|
mod mentions;
|
|
mod render;
|
|
mod startup_sync;
|
|
#[cfg(test)]
|
|
pub(crate) mod test_support;
|
|
|
|
pub use codex_core_plugins::marketplace_upgrade::ConfiguredMarketplaceUpgradeError as PluginMarketplaceUpgradeError;
|
|
pub use codex_core_plugins::marketplace_upgrade::ConfiguredMarketplaceUpgradeOutcome as PluginMarketplaceUpgradeOutcome;
|
|
pub use codex_plugin::AppConnectorId;
|
|
pub use codex_plugin::EffectiveSkillRoots;
|
|
pub use codex_plugin::PluginCapabilitySummary;
|
|
pub use codex_plugin::PluginId;
|
|
pub use codex_plugin::PluginIdError;
|
|
pub use codex_plugin::PluginTelemetryMetadata;
|
|
pub use codex_plugin::validate_plugin_segment;
|
|
|
|
pub type LoadedPlugin = codex_plugin::LoadedPlugin<McpServerConfig>;
|
|
pub type PluginLoadOutcome = codex_plugin::PluginLoadOutcome<McpServerConfig>;
|
|
|
|
pub(crate) use codex_core_plugins::marketplace::find_marketplace_manifest_path;
|
|
pub(crate) use discoverable::list_tool_suggest_discoverable_plugins;
|
|
pub(crate) use injection::build_plugin_injections;
|
|
pub use installed_marketplaces::INSTALLED_MARKETPLACES_DIR;
|
|
pub use installed_marketplaces::marketplace_install_root;
|
|
pub use manager::ConfiguredMarketplace;
|
|
pub use manager::ConfiguredMarketplaceListOutcome;
|
|
pub use manager::ConfiguredMarketplacePlugin;
|
|
pub use manager::OPENAI_BUNDLED_MARKETPLACE_NAME;
|
|
pub use manager::OPENAI_CURATED_MARKETPLACE_NAME;
|
|
pub use manager::PluginDetail;
|
|
pub use manager::PluginInstallError;
|
|
pub use manager::PluginInstallOutcome;
|
|
pub use manager::PluginInstallRequest;
|
|
pub use manager::PluginReadOutcome;
|
|
pub use manager::PluginReadRequest;
|
|
pub use manager::PluginRemoteSyncError;
|
|
pub use manager::PluginUninstallError;
|
|
pub use manager::PluginsManager;
|
|
pub use manager::RemotePluginSyncResult;
|
|
pub(crate) use manager::configured_plugins_from_stack;
|
|
pub use marketplace_add::MarketplaceAddError;
|
|
pub use marketplace_add::MarketplaceAddOutcome;
|
|
pub use marketplace_add::MarketplaceAddRequest;
|
|
pub use marketplace_add::add_marketplace;
|
|
pub(crate) use marketplace_add::is_local_marketplace_source;
|
|
pub(crate) use marketplace_add::parse_marketplace_source;
|
|
pub(crate) use render::render_explicit_plugin_instructions;
|
|
pub(crate) use render::render_plugins_section;
|
|
pub(crate) use startup_sync::curated_plugins_repo_path;
|
|
pub(crate) use startup_sync::read_curated_plugins_sha;
|
|
pub(crate) use startup_sync::sync_openai_plugins_repo;
|
|
|
|
pub(crate) use mentions::build_connector_slug_counts;
|
|
pub(crate) use mentions::build_skill_name_counts;
|
|
pub(crate) use mentions::collect_explicit_app_ids;
|
|
pub(crate) use mentions::collect_explicit_plugin_mentions;
|
|
pub(crate) use mentions::collect_tool_mentions_from_messages;
|