Expose disabled plugin settings in the app-server API (#44905)

## What changed

- Accept `disabledPluginIds` in `thread/settings/update` and `turn/start`. A supplied list replaces the saved selection; omission or `null` preserves it, and `[]` clears it.
- Return the selection in thread start, resume, and fork responses and `thread/settings/updated` notifications. Update generated schemas and client types.
- Restore disabled plugin IDs from the history retained at the requested fork boundary, preserving explicit overrides.

The selection persists across resume but does not yet filter plugin capabilities.

## Testing

Add coverage for replacing, preserving, and clearing selections without inference; turn-start notifications; resume; and fork boundaries across legacy and paginated history, with loaded and restarted parents. Add a core regression test for history restoration and explicit clearing.

GitOrigin-RevId: 654a8c2a0527228d422c0dd4919228447e2663db
This commit is contained in:
Matthew Zeng
2026-09-11 20:27:37 +00:00
committed by copyberry
parent 42cd1ec497
commit c62d191c4c
44 changed files with 549 additions and 19 deletions
+1
View File
@@ -1139,6 +1139,7 @@ async fn run_exec_session(args: ExecRunArgs) -> anyhow::Result<()> {
ClientRequest::TurnStart {
request_id: request_ids.next(),
params: TurnStartParams {
disabled_plugin_ids: None,
thread_id: primary_thread_id_for_span.clone(),
turn_trigger: None,
client_user_message_id: None,
+1
View File
@@ -843,6 +843,7 @@ async fn session_configured_from_thread_response_preserves_parent_thread_id() {
fn sample_thread_start_response() -> ThreadStartResponse {
ThreadStartResponse {
disabled_plugin_ids: Vec::new(),
thread: codex_app_server_protocol::Thread {
originator: None,
environments: None,