Centralize app enabled-state evaluation (#36916)

## What changed

- Add `AppToolPolicyEvaluator::apply_app_enabled_state` and use it when
  presenting app lists, building plugin context, and deciding whether app
  instructions are available.
- Preserve each app's source state unless local or managed configuration
  explicitly overrides it.
- Keep connector discovery and post-install refresh checks based on raw
  accessibility rather than configured enablement.

## Testing

- Cover default enablement, per-app overrides, managed disablement, and
  preservation of unconfigured source state.

GitOrigin-RevId: f1a62d55e7cc48b37113848e3baa0d69d8d9c8a8
This commit is contained in:
jif
2026-08-04 15:49:49 +00:00
committed by copyberry
parent 2999b8e831
commit c8e255e7f8
9 changed files with 123 additions and 136 deletions
@@ -456,20 +456,15 @@ async fn refresh_missing_requested_connectors(
}
let mcp_tools = mcp.tools();
let accessible_connectors = connectors::with_app_enabled_state(
connectors::accessible_connectors_from_mcp_tools(mcp_tools),
&turn.config,
);
let accessible_connectors = connectors::accessible_connectors_from_mcp_tools(mcp_tools);
if all_requested_connectors_picked_up(expected_connector_ids, &accessible_connectors) {
return Some(accessible_connectors);
}
match session.hard_refresh_latest_codex_apps_tools().await {
Ok(mcp_tools) => {
let accessible_connectors = connectors::with_app_enabled_state(
connectors::accessible_connectors_from_mcp_tools(&mcp_tools),
&turn.config,
);
let accessible_connectors =
connectors::accessible_connectors_from_mcp_tools(&mcp_tools);
connectors::refresh_accessible_connectors_cache_from_mcp_tools(
&turn.config,
auth,