Expose declared onboarding skills in plugin details (#46544)

## What changed

Add an optional `onboardingSkill` summary to `plugin/read` responses and update the generated schemas, TypeScript types, and Python models.

- Resolve local declarations from `extensions["com.openai"].onboardingSkill`, accepting relative paths with or without `./`. Require the resolved path to stay within the plugin root and match a loaded skill.
- Match remote release metadata's `onboarding_skill_name` against the plugin's skills.
- Return the summary only when the plugin and matching visible skill are enabled; remote plugins must also be available. Otherwise, return `null`.

## Testing

Add parameterized local and remote `plugin/read` tests covering matching, missing, and unmatched declarations, disabled plugins and skills, and unavailable remote plugins.

GitOrigin-RevId: 88cabdfddbecba5efba756617da0cb1ff064bdf7
This commit is contained in:
victor-openai
2026-09-19 00:55:08 +00:00
committed by copyberry
parent b33199b1fb
commit 05de935205
22 changed files with 359 additions and 41 deletions
@@ -11574,6 +11574,13 @@ class PluginDetail(BaseModel):
marketplace_name: Annotated[str, Field(alias="marketplaceName")]
marketplace_path: Annotated[AbsolutePathBuf | None, Field(alias="marketplacePath")] = None
mcp_servers: Annotated[list[str], Field(alias="mcpServers")]
onboarding_skill: Annotated[
SkillSummary | None,
Field(
alias="onboardingSkill",
description="The declared onboarding skill, when the plugin and visible skill are enabled.",
),
] = None
scheduled_tasks: Annotated[list[ScheduledTaskSummary] | None, Field(alias="scheduledTasks")] = (
None
)