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:17:24 +00:00
committed by copyberry
parent 42cd1ec497
commit c62d191c4c
44 changed files with 549 additions and 19 deletions

View File

@@ -9899,6 +9899,13 @@ class ThreadSettings(BaseModel):
approvals_reviewer: Annotated[ApprovalsReviewer, Field(alias="approvalsReviewer")]
collaboration_mode: Annotated[CollaborationMode, Field(alias="collaborationMode")]
cwd: AbsolutePathBuf
disabled_plugin_ids: Annotated[
list[str] | None,
Field(
alias="disabledPluginIds",
description="Saved list of disabled plugin IDs. Does not yet filter plugin capabilities.",
),
] = []
effort: ReasoningEffort | None = None
model: str
model_provider: Annotated[str, Field(alias="modelProvider")]
@@ -11785,6 +11792,13 @@ class ThreadForkResponse(BaseModel):
),
]
cwd: AbsolutePathBuf
disabled_plugin_ids: Annotated[
list[str] | None,
Field(
alias="disabledPluginIds",
description="Saved list of disabled plugin IDs. Does not yet filter plugin capabilities.",
),
] = []
instruction_sources: Annotated[
list[LegacyAppPathString] | None,
Field(
@@ -11853,6 +11867,13 @@ class ThreadResumeResponse(BaseModel):
),
]
cwd: AbsolutePathBuf
disabled_plugin_ids: Annotated[
list[str] | None,
Field(
alias="disabledPluginIds",
description="Saved list of disabled plugin IDs. Does not yet filter plugin capabilities.",
),
] = []
instruction_sources: Annotated[
list[LegacyAppPathString] | None,
Field(
@@ -11946,6 +11967,13 @@ class ThreadStartResponse(BaseModel):
),
]
cwd: AbsolutePathBuf
disabled_plugin_ids: Annotated[
list[str] | None,
Field(
alias="disabledPluginIds",
description="Saved list of disabled plugin IDs. Does not yet filter plugin capabilities.",
),
] = []
instruction_sources: Annotated[
list[LegacyAppPathString] | None,
Field(
@@ -12024,6 +12052,13 @@ class TurnStartParams(BaseModel):
str | None,
Field(description="Override the working directory for this turn and subsequent turns."),
] = None
disabled_plugin_ids: Annotated[
list[str] | None,
Field(
alias="disabledPluginIds",
description="Replace this thread's disabled plugin IDs. Omitted/null preserves the list; [] clears it.",
),
] = None
effort: Annotated[
ReasoningEffort | None,
Field(description="Override the reasoning effort for this turn and subsequent turns."),