{ "$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" }, "MarketplaceInterface": { "properties": { "displayName": { "type": ["string", "null"] } }, "type": "object" }, "MarketplaceLoadErrorInfo": { "properties": { "marketplacePath": { "$ref": "#/definitions/AbsolutePathBuf" }, "message": { "type": "string" } }, "required": ["marketplacePath", "message"], "type": "object" }, "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" } ] }, "PluginInstallPolicy": { "enum": ["NOT_AVAILABLE", "AVAILABLE", "INSTALLED_BY_DEFAULT"], "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" }, "PluginMarketplaceEntry": { "properties": { "interface": { "anyOf": [ { "$ref": "#/definitions/MarketplaceInterface" }, { "type": "null" } ] }, "name": { "type": "string" }, "path": { "anyOf": [ { "$ref": "#/definitions/AbsolutePathBuf" }, { "type": "null" } ], "description": "Local marketplace file path when the marketplace is backed by a local file. Remote-only catalog marketplaces do not have a local path." }, "plugins": { "items": { "$ref": "#/definitions/PluginSummary" }, "type": "array" } }, "required": ["name", "plugins"], "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" }, { "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" }, "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"] }, "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" } }, "required": [ "authPolicy", "enabled", "id", "installPolicy", "installed", "name", "source" ], "type": "object" } }, "properties": { "marketplaceLoadErrors": { "default": [], "items": { "$ref": "#/definitions/MarketplaceLoadErrorInfo" }, "type": "array" }, "marketplaces": { "items": { "$ref": "#/definitions/PluginMarketplaceEntry" }, "type": "array" } }, "required": ["marketplaces"], "title": "PluginInstalledResponse", "type": "object" }