Files
codex/codex-rs/core/src/session/plugin_selection.rs
T
Charlie Marsh aa39ded153 Trace MCP refresh causes and plugin metadata changes (#60505)
## What changed

- Track and log `McpRefreshReason` values for runtime refreshes, including invalidations received during thread startup and forced refreshes. Restore claimed reasons when a refresh is cancelled before publication, while preserving concurrent invalidations.
- Correlate installed-plugin metadata invalidations with downstream MCP refreshes using a shared change ID. Log changed field names by plugin ID, additions, removals, and reordering without logging field values.
- Record whether background installed-plugin bundle updates were requested by startup, plugin listing, or installation.

## Testing

Add coverage for metadata change attribution across membership changes and reordering, and for retaining refresh causes across cancellation and concurrent invalidation.

GitOrigin-RevId: 3d4485ccfcc1d8788eb9909a060ac200c467af13
2026-11-10 02:45:30 +00:00

34 lines
1.3 KiB
Rust

//! Activates an admitted task's plugin selection without changing pending settings.
use crate::McpRefreshReason;
use std::sync::Arc;
use super::Session;
use super::turn_context::TurnContext;
impl Session {
pub(crate) async fn activate_plugin_selection(&self, turn_context: &TurnContext) {
let config = {
let mut state = self.state.lock().await;
if state.active_disabled_plugin_ids != turn_context.disabled_plugin_ids {
state.active_disabled_plugin_ids = turn_context.disabled_plugin_ids.clone();
self.mark_mcp_runtime_dirty(McpRefreshReason::DisabledPluginSelectionChanged);
}
Arc::clone(&state.session_configuration.original_config_do_not_use)
};
let plugin_outcome = self
.services
.plugins_manager
.plugins_for_config(&config.plugins_config_input())
.await
.without_plugins(&turn_context.disabled_plugin_ids);
// Cache changes from another process do not notify this session's hook runtime.
if !self.hooks().matches_plugin_hooks(
plugin_outcome.iter_effective_plugin_hook_sources(),
plugin_outcome.iter_effective_plugin_hook_warnings(),
) {
self.refresh_hooks(config).await;
}
}
}