mirror of
https://github.com/openai/codex.git
synced 2026-08-27 13:49:27 +00:00
## What changed - Add nullable `mustShowInstallationInterstitial` metadata to app-server `PluginSummary` responses. - Preserve the remote service value through catalog, installed-plugin cache, list, read, and share-list paths. - Return `null` for local plugins and remote responses that omit the field so clients can fail closed when the policy is unavailable. ## Testing - Cover `true`, `false`, and missing values across remote summary paths and app-server plugin endpoints. GitOrigin-RevId: db79702ee2bfa800a9910d64d933bcabecb3ce70
980 lines
22 KiB
JSON
Generated
980 lines
22 KiB
JSON
Generated
{
|
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
"definitions": {
|
|
"AbsolutePathBuf": {
|
|
"description": "A path that is guaranteed to be absolute and normalized (though it is not guaranteed to be canonicalized or exist on the filesystem).\n\nIMPORTANT: When deserializing an `AbsolutePathBuf`, a base path must be set using [AbsolutePathBufGuard::new]. If no base path is set, the deserialization will fail unless the path being deserialized is already absolute.",
|
|
"type": "string"
|
|
},
|
|
"AppSummary": {
|
|
"description": "EXPERIMENTAL - app metadata summary for plugin responses.",
|
|
"properties": {
|
|
"category": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"description": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"installUrl": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"id",
|
|
"name"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"AppTemplateSummary": {
|
|
"properties": {
|
|
"canonicalConnectorId": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"category": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"description": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"logoUrl": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"logoUrlDark": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"materializedAppIds": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"reason": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AppTemplateUnavailableReason"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"templateId": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"materializedAppIds",
|
|
"name",
|
|
"templateId"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"AppTemplateUnavailableReason": {
|
|
"enum": [
|
|
"NOT_CONFIGURED_FOR_WORKSPACE",
|
|
"NO_ACTIVE_WORKSPACE"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"HookEventName": {
|
|
"enum": [
|
|
"preToolUse",
|
|
"permissionRequest",
|
|
"postToolUse",
|
|
"preCompact",
|
|
"postCompact",
|
|
"sessionStart",
|
|
"sessionEnd",
|
|
"userPromptSubmit",
|
|
"subagentStart",
|
|
"subagentStop",
|
|
"stop"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PluginAuthPolicy": {
|
|
"enum": [
|
|
"ON_INSTALL",
|
|
"ON_USE"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PluginAvailability": {
|
|
"oneOf": [
|
|
{
|
|
"enum": [
|
|
"DISABLED_BY_ADMIN"
|
|
],
|
|
"type": "string"
|
|
},
|
|
{
|
|
"description": "Plugin-service currently sends `\"ENABLED\"` for available remote plugins. Codex app-server exposes `\"AVAILABLE\"` in its API; the alias keeps decoding compatible with that upstream response.",
|
|
"enum": [
|
|
"AVAILABLE"
|
|
],
|
|
"type": "string"
|
|
}
|
|
]
|
|
},
|
|
"PluginDetail": {
|
|
"properties": {
|
|
"appTemplates": {
|
|
"items": {
|
|
"$ref": "#/definitions/AppTemplateSummary"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"apps": {
|
|
"items": {
|
|
"$ref": "#/definitions/AppSummary"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"description": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"hooks": {
|
|
"items": {
|
|
"$ref": "#/definitions/PluginHookSummary"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"marketplaceName": {
|
|
"type": "string"
|
|
},
|
|
"marketplacePath": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"mcpServers": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"scheduledTasks": {
|
|
"items": {
|
|
"$ref": "#/definitions/ScheduledTaskSummary"
|
|
},
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
]
|
|
},
|
|
"shareUrl": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"skills": {
|
|
"items": {
|
|
"$ref": "#/definitions/SkillSummary"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"summary": {
|
|
"$ref": "#/definitions/PluginSummary"
|
|
}
|
|
},
|
|
"required": [
|
|
"appTemplates",
|
|
"apps",
|
|
"hooks",
|
|
"marketplaceName",
|
|
"mcpServers",
|
|
"skills",
|
|
"summary"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PluginHookSummary": {
|
|
"properties": {
|
|
"eventName": {
|
|
"$ref": "#/definitions/HookEventName"
|
|
},
|
|
"key": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"eventName",
|
|
"key"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PluginInstallPolicy": {
|
|
"enum": [
|
|
"NOT_AVAILABLE",
|
|
"AVAILABLE",
|
|
"INSTALLED_BY_DEFAULT"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PluginInstallPolicySource": {
|
|
"enum": [
|
|
"WORKSPACE_SETTING",
|
|
"IMPLICIT_CANONICAL_APP"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PluginInterface": {
|
|
"properties": {
|
|
"brandColor": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"capabilities": {
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"category": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"composerIcon": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"description": "Local composer icon path, resolved from the installed plugin package."
|
|
},
|
|
"composerIconUrl": {
|
|
"description": "Remote composer icon URL from the plugin catalog.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"defaultPrompt": {
|
|
"description": "Starter prompts for the plugin. Capped at 3 entries with a maximum of 128 characters per entry.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
]
|
|
},
|
|
"developerName": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"displayName": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"logo": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"description": "Local logo path, resolved from the installed plugin package."
|
|
},
|
|
"logoDark": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"description": "Local dark-mode logo path, resolved from the installed plugin package."
|
|
},
|
|
"logoUrl": {
|
|
"description": "Remote logo URL from the plugin catalog.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"logoUrlDark": {
|
|
"description": "Remote dark-mode logo URL from the plugin catalog.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"longDescription": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"privacyPolicyUrl": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"screenshotUrls": {
|
|
"description": "Remote screenshot URLs from the plugin catalog.",
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"screenshots": {
|
|
"description": "Local screenshot paths, resolved from the installed plugin package.",
|
|
"items": {
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"shortDescription": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"termsOfServiceUrl": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"websiteUrl": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"capabilities",
|
|
"screenshotUrls",
|
|
"screenshots"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PluginShareContext": {
|
|
"properties": {
|
|
"creatorAccountUserId": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"creatorName": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"discoverability": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/PluginShareDiscoverability"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"remotePluginId": {
|
|
"type": "string"
|
|
},
|
|
"remoteVersion": {
|
|
"default": null,
|
|
"description": "Version of the remote shared plugin release when available.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"sharePrincipals": {
|
|
"items": {
|
|
"$ref": "#/definitions/PluginSharePrincipal"
|
|
},
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
]
|
|
},
|
|
"shareUrl": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"remotePluginId"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PluginShareDiscoverability": {
|
|
"enum": [
|
|
"LISTED",
|
|
"UNLISTED",
|
|
"PRIVATE"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PluginSharePrincipal": {
|
|
"properties": {
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"principalId": {
|
|
"type": "string"
|
|
},
|
|
"principalType": {
|
|
"$ref": "#/definitions/PluginSharePrincipalType"
|
|
},
|
|
"role": {
|
|
"$ref": "#/definitions/PluginSharePrincipalRole"
|
|
}
|
|
},
|
|
"required": [
|
|
"name",
|
|
"principalId",
|
|
"principalType",
|
|
"role"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"PluginSharePrincipalRole": {
|
|
"enum": [
|
|
"reader",
|
|
"editor",
|
|
"owner"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PluginSharePrincipalType": {
|
|
"enum": [
|
|
"user",
|
|
"group",
|
|
"workspace"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"PluginSource": {
|
|
"oneOf": [
|
|
{
|
|
"properties": {
|
|
"path": {
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"local"
|
|
],
|
|
"title": "LocalPluginSourceType",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"path",
|
|
"type"
|
|
],
|
|
"title": "LocalPluginSource",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"path": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"refName": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"sha": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"git"
|
|
],
|
|
"title": "GitPluginSourceType",
|
|
"type": "string"
|
|
},
|
|
"url": {
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"type",
|
|
"url"
|
|
],
|
|
"title": "GitPluginSource",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"package": {
|
|
"type": "string"
|
|
},
|
|
"registry": {
|
|
"description": "Optional HTTPS registry URL. Authentication stays in the user's npm config.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"npm"
|
|
],
|
|
"title": "NpmPluginSourceType",
|
|
"type": "string"
|
|
},
|
|
"version": {
|
|
"description": "Optional npm version or version range.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"package",
|
|
"type"
|
|
],
|
|
"title": "NpmPluginSource",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"description": "The plugin is available in the remote catalog. Download metadata is kept server-side and is not exposed through the app-server API.",
|
|
"properties": {
|
|
"type": {
|
|
"enum": [
|
|
"remote"
|
|
],
|
|
"title": "RemotePluginSourceType",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"type"
|
|
],
|
|
"title": "RemotePluginSource",
|
|
"type": "object"
|
|
}
|
|
]
|
|
},
|
|
"PluginSummary": {
|
|
"properties": {
|
|
"authPolicy": {
|
|
"$ref": "#/definitions/PluginAuthPolicy"
|
|
},
|
|
"availability": {
|
|
"allOf": [
|
|
{
|
|
"$ref": "#/definitions/PluginAvailability"
|
|
}
|
|
],
|
|
"default": "AVAILABLE",
|
|
"description": "Availability state for installing and using the plugin."
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"id": {
|
|
"type": "string"
|
|
},
|
|
"installPolicy": {
|
|
"$ref": "#/definitions/PluginInstallPolicy"
|
|
},
|
|
"installPolicySource": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/PluginInstallPolicySource"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"installed": {
|
|
"type": "boolean"
|
|
},
|
|
"interface": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/PluginInterface"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"keywords": {
|
|
"default": [],
|
|
"items": {
|
|
"type": "string"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"localVersion": {
|
|
"default": null,
|
|
"description": "Version of the locally materialized plugin package when available.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"mustShowInstallationInterstitial": {
|
|
"default": null,
|
|
"type": [
|
|
"boolean",
|
|
"null"
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"remotePluginId": {
|
|
"description": "Backend remote plugin identifier when available.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"shareContext": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/PluginShareContext"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
],
|
|
"description": "Remote sharing context associated with this plugin when available."
|
|
},
|
|
"source": {
|
|
"$ref": "#/definitions/PluginSource"
|
|
},
|
|
"version": {
|
|
"default": null,
|
|
"description": "Version advertised by the remote marketplace backend when available.",
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"authPolicy",
|
|
"enabled",
|
|
"id",
|
|
"installPolicy",
|
|
"installed",
|
|
"name",
|
|
"source"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ScheduledTaskSchedule": {
|
|
"oneOf": [
|
|
{
|
|
"properties": {
|
|
"days": {
|
|
"items": {
|
|
"$ref": "#/definitions/ScheduledTaskWeekday"
|
|
},
|
|
"type": [
|
|
"array",
|
|
"null"
|
|
]
|
|
},
|
|
"intervalHours": {
|
|
"format": "uint32",
|
|
"minimum": 0.0,
|
|
"type": "integer"
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"hourly"
|
|
],
|
|
"title": "HourlyScheduledTaskScheduleType",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"intervalHours",
|
|
"type"
|
|
],
|
|
"title": "HourlyScheduledTaskSchedule",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"time": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"daily"
|
|
],
|
|
"title": "DailyScheduledTaskScheduleType",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"time",
|
|
"type"
|
|
],
|
|
"title": "DailyScheduledTaskSchedule",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"time": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"weekdays"
|
|
],
|
|
"title": "WeekdaysScheduledTaskScheduleType",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"time",
|
|
"type"
|
|
],
|
|
"title": "WeekdaysScheduledTaskSchedule",
|
|
"type": "object"
|
|
},
|
|
{
|
|
"properties": {
|
|
"days": {
|
|
"items": {
|
|
"$ref": "#/definitions/ScheduledTaskWeekday"
|
|
},
|
|
"type": "array"
|
|
},
|
|
"time": {
|
|
"type": "string"
|
|
},
|
|
"type": {
|
|
"enum": [
|
|
"weekly"
|
|
],
|
|
"title": "WeeklyScheduledTaskScheduleType",
|
|
"type": "string"
|
|
}
|
|
},
|
|
"required": [
|
|
"days",
|
|
"time",
|
|
"type"
|
|
],
|
|
"title": "WeeklyScheduledTaskSchedule",
|
|
"type": "object"
|
|
}
|
|
]
|
|
},
|
|
"ScheduledTaskSummary": {
|
|
"properties": {
|
|
"key": {
|
|
"type": "string"
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"prompt": {
|
|
"type": "string"
|
|
},
|
|
"schedule": {
|
|
"$ref": "#/definitions/ScheduledTaskSchedule"
|
|
}
|
|
},
|
|
"required": [
|
|
"key",
|
|
"name",
|
|
"prompt",
|
|
"schedule"
|
|
],
|
|
"type": "object"
|
|
},
|
|
"ScheduledTaskWeekday": {
|
|
"enum": [
|
|
"MO",
|
|
"TU",
|
|
"WE",
|
|
"TH",
|
|
"FR",
|
|
"SA",
|
|
"SU"
|
|
],
|
|
"type": "string"
|
|
},
|
|
"SkillInterface": {
|
|
"properties": {
|
|
"brandColor": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"defaultPrompt": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"displayName": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
},
|
|
"iconLarge": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"iconSmall": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"shortDescription": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"type": "object"
|
|
},
|
|
"SkillSummary": {
|
|
"properties": {
|
|
"description": {
|
|
"type": "string"
|
|
},
|
|
"enabled": {
|
|
"type": "boolean"
|
|
},
|
|
"interface": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/SkillInterface"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"name": {
|
|
"type": "string"
|
|
},
|
|
"path": {
|
|
"anyOf": [
|
|
{
|
|
"$ref": "#/definitions/AbsolutePathBuf"
|
|
},
|
|
{
|
|
"type": "null"
|
|
}
|
|
]
|
|
},
|
|
"shortDescription": {
|
|
"type": [
|
|
"string",
|
|
"null"
|
|
]
|
|
}
|
|
},
|
|
"required": [
|
|
"description",
|
|
"enabled",
|
|
"name"
|
|
],
|
|
"type": "object"
|
|
}
|
|
},
|
|
"properties": {
|
|
"plugin": {
|
|
"$ref": "#/definitions/PluginDetail"
|
|
}
|
|
},
|
|
"required": [
|
|
"plugin"
|
|
],
|
|
"title": "PluginReadResponse",
|
|
"type": "object"
|
|
} |