{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "array",
  "items": {
    "anyOf": [
      {
        "$ref": "#/definitions/SupportedExtension"
      },
      {
        "$ref": "#/definitions/CustomExtension"
      }
    ]
  },
  "description": "Schema of Console plugin's `console-extensions.json` file.",
  "definitions": {
    "SupportedExtension": {
      "anyOf": [
        {
          "$ref": "#/definitions/FeatureFlag"
        },
        {
          "$ref": "#/definitions/ModelFeatureFlag"
        },
        {
          "$ref": "#/definitions/FeatureFlagHookProvider"
        },
        {
          "$ref": "#/definitions/ReduxReducer"
        },
        {
          "$ref": "#/definitions/ContextProvider"
        },
        {
          "$ref": "#/definitions/StandaloneRoutePage"
        },
        {
          "$ref": "#/definitions/PVCCreateProp"
        },
        {
          "$ref": "#/definitions/PVCStatus"
        },
        {
          "$ref": "#/definitions/PVCAlert"
        },
        {
          "$ref": "#/definitions/PVCDelete"
        },
        {
          "$ref": "#/definitions/YAMLTemplate"
        },
        {
          "$ref": "#/definitions/AddAction"
        },
        {
          "$ref": "#/definitions/AddActionGroup"
        },
        {
          "$ref": "#/definitions/ImportEnvironment"
        },
        {
          "$ref": "#/definitions/ClusterGlobalConfig"
        },
        {
          "$ref": "#/definitions/HrefNavItem"
        },
        {
          "$ref": "#/definitions/ResourceNSNavItem"
        },
        {
          "$ref": "#/definitions/ResourceClusterNavItem"
        },
        {
          "$ref": "#/definitions/Separator"
        },
        {
          "$ref": "#/definitions/NavSection"
        },
        {
          "$ref": "#/definitions/FileUpload"
        },
        {
          "$ref": "#/definitions/ModelMetadata"
        },
        {
          "$ref": "#/definitions/AlertAction"
        },
        {
          "$ref": "#/definitions/StorageProvider"
        },
        {
          "$ref": "#/definitions/TelemetryListener"
        },
        {
          "$ref": "#/definitions/SupportedCatalogExtensions"
        },
        {
          "$ref": "#/definitions/SupportedActionExtensions"
        },
        {
          "$ref": "#/definitions/SupportedTopologyDetailsExtensions"
        },
        {
          "$ref": "#/definitions/RoutePage"
        },
        {
          "$ref": "#/definitions/ResourceListPage"
        },
        {
          "$ref": "#/definitions/ResourceTabPage"
        },
        {
          "$ref": "#/definitions/ResourceDetailsPage"
        },
        {
          "$ref": "#/definitions/DashboardsTab"
        },
        {
          "$ref": "#/definitions/DashboardsCard"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewHealthPrometheusSubsystem"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewHealthURLSubsystem"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewHealthResourceSubsystem"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewHealthOperator"
        },
        {
          "$ref": "#/definitions/DashboardsInventoryItemGroup"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewInventoryItem"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewInventoryItemReplacement"
        },
        {
          "$ref": "#/definitions/DashboardsProjectOverviewInventoryItem"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewResourceActivity"
        },
        {
          "$ref": "#/definitions/DashboardsOverviewPrometheusActivity"
        },
        {
          "$ref": "#/definitions/TopologyComponentFactory"
        },
        {
          "$ref": "#/definitions/TopologyCreateConnector"
        },
        {
          "$ref": "#/definitions/TopologyDataModelFactory"
        },
        {
          "$ref": "#/definitions/TopologyDisplayFilters"
        },
        {
          "$ref": "#/definitions/TopologyDecoratorProvider"
        },
        {
          "$ref": "#/definitions/TopologyRelationshipProvider"
        },
        {
          "$ref": "#/definitions/CreateResource"
        },
        {
          "$ref": "#/definitions/UserPreferenceGroup"
        },
        {
          "$ref": "#/definitions/UserPreferenceItem"
        },
        {
          "$ref": "#/definitions/Perspective"
        },
        {
          "$ref": "#/definitions/HorizontalNavTab"
        },
        {
          "$ref": "#/definitions/NavTab"
        },
        {
          "$ref": "#/definitions/ClusterOverviewInventoryItem"
        },
        {
          "$ref": "#/definitions/ClusterOverviewUtilizationItem"
        },
        {
          "$ref": "#/definitions/ClusterOverviewMultilineUtilizationItem"
        },
        {
          "$ref": "#/definitions/OverviewDetailItem"
        },
        {
          "$ref": "#/definitions/CustomOverviewDetailItem"
        },
        {
          "$ref": "#/definitions/ProjectOverviewUtilizationItem"
        },
        {
          "$ref": "#/definitions/ProjectOverviewInventoryItem"
        },
        {
          "$ref": "#/definitions/StorageClassProvisioner"
        },
        {
          "$ref": "#/definitions/DetailsItem"
        },
        {
          "$ref": "#/definitions/CreateProjectModal"
        }
      ]
    },
    "FeatureFlag": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.flag"
        },
        "properties": {
          "type": "object",
          "properties": {
            "handler": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Used to set/unset arbitrary feature flags."
            }
          },
          "required": [
            "handler"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Gives full control over Console feature flags."
    },
    "EncodedCodeRef": {
      "type": "object",
      "properties": {
        "$codeRef": {
          "type": "string"
        }
      },
      "required": [
        "$codeRef"
      ],
      "additionalProperties": false,
      "description": "Code reference, encoded as an object literal.\n\nThe value of the `$codeRef` property should be formatted as `moduleName.exportName` (referring to a named export) or `moduleName` (referring to the `default` export)."
    },
    "ExtensionFlags": {
      "type": "object",
      "properties": {
        "required": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "disallowed": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "additionalProperties": false,
      "description": "Console feature flags used to gate extension instances."
    },
    "ModelFeatureFlag": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.flag/model"
        },
        "properties": {
          "type": "object",
          "properties": {
            "flag": {
              "type": "string",
              "description": "The name of the flag to set once the CRD is detected."
            },
            "model": {
              "$ref": "#/definitions/ExtensionK8sModel",
              "description": "The model which refers to a `CustomResourceDefinition`."
            }
          },
          "required": [
            "flag",
            "model"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds new Console feature flag driven by the presence of a CRD on the cluster."
    },
    "ExtensionK8sModel": {
      "type": "object",
      "properties": {
        "group": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "kind": {
          "type": "string"
        }
      },
      "required": [
        "group",
        "version",
        "kind"
      ],
      "additionalProperties": false
    },
    "FeatureFlagHookProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.flag/hookProvider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "handler": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Used to set/unset arbitrary feature flags."
            }
          },
          "required": [
            "handler"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Gives full control over Console feature flags with hook handlers."
    },
    "ReduxReducer": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.redux-reducer"
        },
        "properties": {
          "type": "object",
          "properties": {
            "scope": {
              "type": "string",
              "description": "The key to represent the reducer-managed substate within the Redux state object."
            },
            "reducer": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The reducer function, operating on the reducer-managed substate."
            }
          },
          "required": [
            "scope",
            "reducer"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds new reducer to Console Redux store which operates on `plugins.<scope>` substate."
    },
    "ContextProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.context-provider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "provider": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Context Provider component."
            },
            "useValueHook": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Hook for the Context value."
            }
          },
          "required": [
            "provider",
            "useValueHook"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds new React context provider to Console application root."
    },
    "StandaloneRoutePage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.page/route/standalone"
        },
        "properties": {
          "type": "object",
          "properties": {
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered when the route matches."
            },
            "path": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Valid URL path or array of paths that `path-to-regexp@^1.7.0` understands."
            },
            "exact": {
              "type": "boolean",
              "description": "When true, will only match if the path matches the `location.pathname` exactly."
            }
          },
          "required": [
            "component",
            "path"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds new standalone page (rendered outside the common page layout) to Console router.\n\nUnder the hood we use React Router. See https://v5.reactrouter.com/"
    },
    "PVCCreateProp": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.pvc/create-prop"
        },
        "properties": {
          "type": "object",
          "properties": {
            "label": {
              "type": "string",
              "description": "Label for the create prop action."
            },
            "path": {
              "type": "string",
              "description": "Path for the create prop action."
            }
          },
          "required": [
            "label",
            "path"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to specify additional properties that will be used when creating PVC resources on the PVC list page."
    },
    "PVCStatus": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.pvc/status"
        },
        "properties": {
          "type": "object",
          "properties": {
            "priority": {
              "type": "number",
              "description": "Priority for the status component. Bigger value means higher priority."
            },
            "status": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The status component."
            },
            "predicate": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Predicate that tells whether to render the status component or not."
            }
          },
          "required": [
            "priority",
            "status",
            "predicate"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to contribute an additional status component for PVC resources on the cluster dashboard page."
    },
    "PVCAlert": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.pvc/alert"
        },
        "properties": {
          "type": "object",
          "properties": {
            "alert": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The alert component."
            }
          },
          "required": [
            "alert"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to contribute custom alerts on the PVC details page."
    },
    "PVCDelete": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.pvc/delete"
        },
        "properties": {
          "type": "object",
          "properties": {
            "predicate": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Predicate that tells whether to use the extension or not."
            },
            "onPVCKill": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Method for the PVC delete operation."
            },
            "alert": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Alert component to show additional information."
            }
          },
          "required": [
            "predicate",
            "onPVCKill",
            "alert"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension allows hooking into deleting PVC resources. It can provide an alert with additional information and custom PVC delete logic."
    },
    "YAMLTemplate": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.yaml-template"
        },
        "properties": {
          "type": "object",
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sModel",
              "description": "Model associated with the template."
            },
            "template": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The YAML template."
            },
            "name": {
              "type": "string",
              "description": "The name of the template. Use the name `default` to mark this as the default template."
            }
          },
          "required": [
            "model",
            "template",
            "name"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "YAML templates for editing resources via the yaml editor."
    },
    "AddAction": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "dev-console.add/action"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "ID used to identify the action."
            },
            "groupId": {
              "type": "string",
              "description": "IDs used to identify the action groups the action would belong to."
            },
            "label": {
              "type": "string",
              "description": "The label of the action"
            },
            "description": {
              "type": "string",
              "description": "The description of the action."
            },
            "href": {
              "type": "string",
              "description": "The href to navigate to."
            },
            "callback": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "A callback that performs an action on click"
            },
            "icon": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The perspective display icon. If possible, use a PatternFly icon for consistent icon colours and styling."
            },
            "accessReview": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/AccessReviewResourceAttributes"
              },
              "description": "Optional access review to control visibility / enablement of the action."
            }
          },
          "required": [
            "id",
            "label",
            "description"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension allows plugins to contribute an add action item to the add page of developer perspective. For example, a Serverless plugin can add a new action item for adding serverless functions to the add page of developer console."
    },
    "AccessReviewResourceAttributes": {
      "type": "object",
      "properties": {
        "group": {
          "type": "string"
        },
        "resource": {
          "type": "string"
        },
        "subresource": {
          "type": "string"
        },
        "verb": {
          "$ref": "#/definitions/K8sVerb"
        },
        "name": {
          "type": "string"
        },
        "namespace": {
          "type": "string"
        }
      },
      "additionalProperties": false
    },
    "K8sVerb": {
      "type": "string",
      "enum": [
        "create",
        "get",
        "list",
        "update",
        "patch",
        "delete",
        "deletecollection",
        "watch",
        "impersonate"
      ]
    },
    "AddActionGroup": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "dev-console.add/action-group"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "ID used to identify the action group."
            },
            "name": {
              "type": "string",
              "description": "The title of the action group"
            },
            "insertBefore": {
              "type": "string",
              "description": "ID of action group before which this group should be placed"
            },
            "insertAfter": {
              "type": "string",
              "description": "ID of action group after which this group should be placed"
            },
            "icon": {
              "anyOf": [
                {
                  "$ref": "#/definitions/EncodedCodeRef"
                },
                {
                  "type": "string"
                }
              ],
              "description": "The perspective display icon."
            }
          },
          "required": [
            "id",
            "name"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension allows plugins to contibute a group in the add page of developer console. Groups can be referenced by actions, which will be grouped together in the add action page based on their extension definition. For example, a Serverless plugin can contribute a Serverless group and together with multiple add actions."
    },
    "ImportEnvironment": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "dev-console.import/environment"
        },
        "properties": {
          "type": "object",
          "properties": {
            "imageStreamName": {
              "type": "string",
              "description": "Name of the image stream to provide custom environment variables for"
            },
            "imageStreamTags": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "List of supported image stream tags"
            },
            "environments": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ImageEnvironment"
              },
              "description": "List of environment variables"
            }
          },
          "required": [
            "imageStreamName",
            "imageStreamTags",
            "environments"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to specify extra build environment variable fields under the builder image selector in the dev console git import form. When set, the fields will override environment variables of the same name in the build section."
    },
    "ImageEnvironment": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "description": "Environment variable key"
        },
        "label": {
          "type": "string",
          "description": "The input field's label"
        },
        "defaultValue": {
          "type": "string",
          "description": "Default value to use as a placeholder"
        },
        "description": {
          "type": "string",
          "description": "Description of the environment variable"
        }
      },
      "required": [
        "key",
        "label"
      ],
      "additionalProperties": false
    },
    "ClusterGlobalConfig": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.global-config"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "Unique identifier for the cluster config resource instance."
            },
            "name": {
              "type": "string",
              "description": "The name of the cluster config resource instance."
            },
            "model": {
              "$ref": "#/definitions/ExtensionK8sModel",
              "description": "The model which refers to a cluster config resource."
            },
            "namespace": {
              "type": "string",
              "description": "The namespace of the cluster config resource instance."
            }
          },
          "required": [
            "id",
            "name",
            "model",
            "namespace"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension identifies a resource used to manage the configuration of the cluster. A link to the resource will be added to the Administration - Cluster Settings - Configuration page."
    },
    "HrefNavItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.navigation/href"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "description": "The name of this item."
            },
            "href": {
              "type": "string",
              "description": "The link href value."
            },
            "namespaced": {
              "type": "boolean",
              "description": "if true, adds /ns/active-namespace to the end"
            },
            "prefixNamespaced": {
              "type": "boolean",
              "description": "if true, adds /k8s/ns/active-namespace to the begining"
            },
            "id": {
              "type": "string",
              "description": "A unique identifier for this item."
            },
            "perspective": {
              "type": "string",
              "description": "The perspective ID to which this item belongs to. If not specified, contributes to the default perspective."
            },
            "section": {
              "type": "string",
              "description": "Navigation section to which this item belongs to. If not specified, render this item as a top level link."
            },
            "dataAttributes": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Adds data attributes to the DOM."
            },
            "startsWith": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Mark this item as active when the URL starts with one of these paths."
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. `insertBefore` takes precedence."
            }
          },
          "required": [
            "href",
            "id",
            "name"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to contribute a navigation item that points to a specific link in the UI."
    },
    "ResourceNSNavItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.navigation/resource-ns"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "description": "Overrides the default name. If not supplied the name of the link will equal the plural value of the model."
            },
            "model": {
              "$ref": "#/definitions/ExtensionK8sModel",
              "description": "The model for which this nav item links to."
            },
            "id": {
              "type": "string",
              "description": "A unique identifier for this item."
            },
            "perspective": {
              "type": "string",
              "description": "The perspective ID to which this item belongs to. If not specified, contributes to the default perspective."
            },
            "section": {
              "type": "string",
              "description": "Navigation section to which this item belongs to. If not specified, render this item as a top level link."
            },
            "dataAttributes": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Adds data attributes to the DOM."
            },
            "startsWith": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Mark this item as active when the URL starts with one of these paths."
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. `insertBefore` takes precedence."
            }
          },
          "required": [
            "id",
            "model"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to contribute a navigation item that points to a namespaced resource details page. The K8s model of that resource can be used to define the navigation item."
    },
    "ResourceClusterNavItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.navigation/resource-cluster"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "description": "Overrides the default name. If not supplied the name of the link will equal the plural value of the model."
            },
            "model": {
              "$ref": "#/definitions/ExtensionK8sModel",
              "description": "The model for which this nav item links to."
            },
            "id": {
              "type": "string",
              "description": "A unique identifier for this item."
            },
            "perspective": {
              "type": "string",
              "description": "The perspective ID to which this item belongs to. If not specified, contributes to the default perspective."
            },
            "section": {
              "type": "string",
              "description": "Navigation section to which this item belongs to. If not specified, render this item as a top level link."
            },
            "dataAttributes": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Adds data attributes to the DOM."
            },
            "startsWith": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Mark this item as active when the URL starts with one of these paths."
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. `insertBefore` takes precedence."
            }
          },
          "required": [
            "id",
            "model"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to contribute a navigation item that points to a cluster resource details page. The K8s model of that resource can be used to define the navigation item."
    },
    "Separator": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.navigation/separator"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "A unique identifier for this item."
            },
            "perspective": {
              "type": "string",
              "description": "The perspective ID to which this item belongs to. If not specified, contributes to the default perspective."
            },
            "section": {
              "type": "string",
              "description": "Navigation section to which this item belongs to. If not specified, render this item as a top level link."
            },
            "dataAttributes": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Adds data attributes to the DOM."
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. `insertBefore` takes precedence."
            }
          },
          "required": [
            "id"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to add a separator between navigation items in the navigation."
    },
    "NavSection": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.navigation/section"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "name": {
              "type": "string",
              "description": "Name of this section. If not supplied, only a separator will be shown above the section."
            },
            "id": {
              "type": "string",
              "description": "A unique identifier for this item."
            },
            "perspective": {
              "type": "string",
              "description": "The perspective ID to which this item belongs to. If not specified, contributes to the default perspective."
            },
            "dataAttributes": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              },
              "description": "Adds data attributes to the DOM."
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. `insertBefore` takes precedence."
            }
          },
          "required": [
            "id"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to define a new section of navigation items in the navigation tab."
    },
    "FileUpload": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.file-upload"
        },
        "properties": {
          "type": "object",
          "properties": {
            "fileExtensions": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Supported file extensions."
            },
            "handler": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function which handles the file drop action."
            }
          },
          "required": [
            "fileExtensions",
            "handler"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to provide a handler for the file drop action on specific file extensions."
    },
    "ModelMetadata": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.model-metadata"
        },
        "properties": {
          "type": "object",
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sGroupModel",
              "description": "The model to customize. May specify only a group, or optional version and kind."
            },
            "badge": {
              "$ref": "#/definitions/ModelBadge",
              "description": "Whether to consider this model reference as tech preview or dev preview."
            },
            "color": {
              "type": "string",
              "description": "The color to associate to this model."
            },
            "label": {
              "type": "string",
              "description": "Override the label. Requires `kind` be provided."
            },
            "labelPlural": {
              "type": "string",
              "description": "Override the plural label. Requires `kind` be provided."
            },
            "abbr": {
              "type": "string",
              "description": "Customize the abbreviation. Defaults to All uppercase chars in the kind up to 4 characters long. Requires `kind` be provided."
            }
          },
          "required": [
            "model"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Customize the display of models by overriding values retrieved and generated through API discovery."
    },
    "ExtensionK8sGroupModel": {
      "type": "object",
      "properties": {
        "group": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "kind": {
          "type": "string"
        }
      },
      "required": [
        "group"
      ],
      "additionalProperties": false
    },
    "ModelBadge": {
      "type": "string",
      "enum": [
        "dev",
        "tech"
      ]
    },
    "AlertAction": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.alert-action"
        },
        "properties": {
          "type": "object",
          "properties": {
            "alert": {
              "type": "string",
              "description": "Alert name as defined by `alert.rule.name` property"
            },
            "text": {
              "type": "string",
              "description": "Action text"
            },
            "action": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function to perform side effect"
            }
          },
          "required": [
            "alert",
            "text",
            "action"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to trigger a specific action when a specific Prometheus alert is observed by the Console based on its `rule.name` value."
    },
    "StorageProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.storage-provider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "description": "Displayed name of the provider."
            },
            "Component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Provider specific component to render."
            }
          },
          "required": [
            "name",
            "Component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to contribute a new storage provider to select, when attaching storage and a provider specific component."
    },
    "TelemetryListener": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.telemetry/listener"
        },
        "properties": {
          "type": "object",
          "properties": {
            "listener": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Listen for telemetry events"
            }
          },
          "required": [
            "listener"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This component can be used to register a listener function receiving telemetry events. These events include user identification, page navigation, and other application specific events. The listener may use this data for reporting and analytics purposes."
    },
    "SupportedCatalogExtensions": {
      "anyOf": [
        {
          "$ref": "#/definitions/CatalogItemType"
        },
        {
          "$ref": "#/definitions/CatalogItemTypeMetadata"
        },
        {
          "$ref": "#/definitions/CatalogItemProvider"
        },
        {
          "$ref": "#/definitions/CatalogItemFilter"
        },
        {
          "$ref": "#/definitions/CatalogItemMetadataProvider"
        }
      ]
    },
    "CatalogItemType": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.catalog/item-type"
        },
        "properties": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type for the catalog item."
            },
            "title": {
              "type": "string",
              "description": "Title for the catalog item."
            },
            "catalogDescription": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "$ref": "#/definitions/EncodedCodeRef"
                }
              ],
              "description": "Description for the type specific catalog."
            },
            "typeDescription": {
              "type": "string",
              "description": "Description for the catalog item type."
            },
            "filters": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/CatalogItemAttribute"
              },
              "description": "Custom filters specific to the catalog item."
            },
            "groupings": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/CatalogItemAttribute"
              },
              "description": "Custom groupings specific to the catalog item."
            }
          },
          "required": [
            "type",
            "title"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension allows plugins to contribute a new type of catalog item. For example, a Helm plugin can define a new catalog item type as HelmCharts that it wants to contribute to the Developer Catalog."
    },
    "CatalogItemAttribute": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string"
        },
        "attribute": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      },
      "required": [
        "label",
        "attribute"
      ],
      "additionalProperties": false
    },
    "CatalogItemTypeMetadata": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.catalog/item-type-metadata"
        },
        "properties": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "description": "Type for the catalog item."
            },
            "filters": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/CatalogItemAttribute"
              },
              "description": "Custom filters specific to the catalog item."
            },
            "groupings": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/CatalogItemAttribute"
              },
              "description": "Custom groupings specific to the catalog item."
            }
          },
          "required": [
            "type"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension allows plugins to contribute extra metadata like custom filters or groupings for any catalog item type. For example, a plugin can attach a custom filter for HelmCharts that can filter based on chart provider."
    },
    "CatalogItemProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.catalog/item-provider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "catalogId": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "The unique identifier for the catalog this provider contributes to."
            },
            "type": {
              "type": "string",
              "description": "Type ID for the catalog item type."
            },
            "title": {
              "type": "string",
              "description": "Title for the catalog item provider"
            },
            "provider": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Fetch items and normalize it for the catalog. Value is a react effect hook."
            },
            "priority": {
              "type": "number",
              "description": "Priority for this provider. Defaults to 0. Higher priority providers may override catalog items provided by other providers."
            }
          },
          "required": [
            "catalogId",
            "type",
            "title",
            "provider"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension allows plugins to contribute a provider for a catalog item type. For example, a Helm Plugin can add a provider that fetches all the Helm Charts. This extension can also be used by other plugins to add more items to a specific catalog item type."
    },
    "CatalogItemFilter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.catalog/item-filter"
        },
        "properties": {
          "type": "object",
          "properties": {
            "catalogId": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "The unique identifier for the catalog this provider contributes to."
            },
            "type": {
              "type": "string",
              "description": "Type ID for the catalog item type."
            },
            "filter": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Filters items of a specific type. Value is a function that takes CatalogItem[] and returns a subset based on the filter criteria."
            }
          },
          "required": [
            "catalogId",
            "type",
            "filter"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used for plugins to contribute a handler that can filter specific catalog items. For example, the plugin can contribute a filter that filters helm charts from specific provider."
    },
    "CatalogItemMetadataProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.catalog/item-metadata"
        },
        "properties": {
          "type": "object",
          "properties": {
            "catalogId": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "The unique identifier for the catalog this provider contributes to."
            },
            "type": {
              "type": "string",
              "description": "Type ID for the catalog item type."
            },
            "provider": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "A hook which returns a function that will be used to provide metadata to catalog items of a specific type."
            }
          },
          "required": [
            "catalogId",
            "type",
            "provider"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to contribute a provider that adds extra metadata to specific catalog items."
    },
    "SupportedActionExtensions": {
      "anyOf": [
        {
          "$ref": "#/definitions/ActionProvider"
        },
        {
          "$ref": "#/definitions/ResourceActionProvider"
        },
        {
          "$ref": "#/definitions/ActionGroup"
        },
        {
          "$ref": "#/definitions/ActionFilter"
        }
      ]
    },
    "ActionProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.action/provider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "contextId": {
              "type": "string",
              "description": "The context ID helps to narrow the scope of contributed actions to a particular area of the application. Ex - topology, helm"
            },
            "provider": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "A react hook which returns actions for the given scope. If contextId = `resource` then the scope will always be a K8s resource object"
            }
          },
          "required": [
            "contextId",
            "provider"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "ActionProvider contributes a hook that returns list of actions for specific context"
    },
    "ResourceActionProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.action/resource-provider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sKindVersionModel",
              "description": "The model for which this provider provides actions for."
            },
            "provider": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "A react hook which returns actions for the given resource model"
            }
          },
          "required": [
            "model",
            "provider"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "ResourceActionProvider contributes a hook that returns list of actions for specific resource model"
    },
    "ExtensionK8sKindVersionModel": {
      "type": "object",
      "properties": {
        "group": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "kind": {
          "type": "string"
        }
      },
      "required": [
        "version",
        "kind"
      ],
      "additionalProperties": false
    },
    "ActionGroup": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.action/group"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "ID used to identify the action section."
            },
            "label": {
              "type": "string",
              "description": "The label to display in the UI. Required for submenus."
            },
            "submenu": {
              "type": "boolean",
              "description": "Whether this group should be displayed as submenu"
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. insertBefore takes precedence."
            }
          },
          "required": [
            "id"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "ActionGroup contributes an action group that can also be a submenu"
    },
    "ActionFilter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.action/filter"
        },
        "properties": {
          "type": "object",
          "properties": {
            "contextId": {
              "type": "string",
              "description": "The context ID helps to narrow the scope of contributed actions to a particular area of the application. Ex - topology, helm"
            },
            "filter": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "A function which will filter actions based on some conditions. scope: The scope in which actions should be provided for. Note: hook may be required if we want to remove the ModifyCount action from a deployment with HPA"
            }
          },
          "required": [
            "contextId",
            "filter"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "ActionFilter can be used to filter an action"
    },
    "SupportedTopologyDetailsExtensions": {
      "anyOf": [
        {
          "$ref": "#/definitions/DetailsTab"
        },
        {
          "$ref": "#/definitions/DetailsTabSection"
        },
        {
          "$ref": "#/definitions/DetailsResourceLink"
        },
        {
          "$ref": "#/definitions/DetailsResourceAlert"
        },
        {
          "$ref": "#/definitions/PodAdapter"
        },
        {
          "$ref": "#/definitions/BuildAdapter"
        },
        {
          "$ref": "#/definitions/NetworkAdapter"
        }
      ]
    },
    "DetailsTab": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/details/tab"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "A unique identifier for this details tab."
            },
            "label": {
              "type": "string",
              "description": "The tab label to display in the UI."
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. insertBefore takes precedence."
            }
          },
          "required": [
            "id",
            "label"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "DetailsTab contributes a tab for the topology details panel."
    },
    "DetailsTabSection": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/details/tab-section"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "A unique identifier for this details tab section."
            },
            "tab": {
              "type": "string",
              "description": "The parent tab ID that this section should contribute to."
            },
            "provider": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "A hook that returns a component or null/undefined that will be rendered in the topology sidebar. SDK component: <Section title={<optional>}>... padded area </Section>"
            },
            "section": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Returns a section for the graph element or undefined if not provided.",
              "deprecated": "Fallback if no provider is defined. renderNull is a no-op already."
            },
            "insertBefore": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item before the item referenced here. For arrays, the first one found in order is used."
            },
            "insertAfter": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Insert this item after the item referenced here. For arrays, the first one found in order is used. insertBefore takes precedence."
            }
          },
          "required": [
            "id",
            "tab",
            "provider",
            "section"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "DetailsTabSection contributes a section for a specific tab in topology details panel."
    },
    "DetailsResourceLink": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/details/resource-link"
        },
        "properties": {
          "type": "object",
          "properties": {
            "priority": {
              "type": "number",
              "description": "A higher priority factory will get the first chance to create the link."
            },
            "link": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Return the resource link if provided, otherwise undefined. Use ResourceIcon and ResourceLink for styles."
            }
          },
          "required": [
            "link"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "DetailsResourceLink contributes a link for specific topology context or graph element."
    },
    "DetailsResourceAlert": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/details/resource-alert"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "The ID of this alert. Used to save state if the alert shouldn't be shown after dismissed."
            },
            "contentProvider": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Hook to return the contents of the Alert."
            }
          },
          "required": [
            "id",
            "contentProvider"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "DetailsResourceAlert contributes an alert for specific topology context or graph element."
    },
    "PodAdapter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/adapter/pod"
        },
        "properties": {
          "type": "object",
          "properties": {
            "adapt": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "adapter to adapt element to data that can be used by Pod component."
            }
          },
          "required": [
            "adapt"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "PodAdapter contributes an adapter to adapt element to data that can be used by Pod component"
    },
    "BuildAdapter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/adapter/build"
        },
        "properties": {
          "type": "object",
          "properties": {
            "adapt": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "adapter to adapt element to data that can be used by Build component."
            }
          },
          "required": [
            "adapt"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "BuildAdapter contributes an adapter to adapt element to data that can be used by Build component"
    },
    "NetworkAdapter": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/adapter/network"
        },
        "properties": {
          "type": "object",
          "properties": {
            "adapt": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "adapter to adapt element to data that can be used by Networking component."
            }
          },
          "required": [
            "adapt"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "NetworkAdpater contributes an adapter to adapt element to data that can be used by Networking component"
    },
    "RoutePage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.page/route"
        },
        "properties": {
          "type": "object",
          "properties": {
            "perspective": {
              "type": "string",
              "description": "The perspective to which this page belongs to. If not specified, contributes to all perspectives."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered when the route matches."
            },
            "path": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              ],
              "description": "Valid URL path or array of paths that `path-to-regexp@^1.7.0` understands."
            },
            "exact": {
              "type": "boolean",
              "description": "When true, will only match if the path matches the `location.pathname` exactly."
            }
          },
          "required": [
            "component",
            "path"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds new page to Console router.\n\nUnder the hood we use React Router. See https://v5.reactrouter.com/\n\nNote: This extension should not be used for resource list and details page. For adding both list and details page for a resource use the [console.navigation/resource-ns](#consolenavigationresource-ns) extension, instead, which renders elementary fields."
    },
    "ResourceListPage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.page/resource/list"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sGroupKindModel",
              "description": "The model for which this resource page links to."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered when the route matches."
            }
          },
          "required": [
            "component",
            "model"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds new resource list page to Console router."
    },
    "ExtensionK8sGroupKindModel": {
      "type": "object",
      "properties": {
        "group": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "kind": {
          "type": "string"
        }
      },
      "required": [
        "group",
        "kind"
      ],
      "additionalProperties": false
    },
    "ResourceTabPage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.page/resource/tab"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered when the route matches."
            },
            "name": {
              "type": "string",
              "description": "The name of the tab."
            },
            "href": {
              "type": "string",
              "description": "The optional href for the tab link. If not provided, the first `path` is used."
            },
            "exact": {
              "type": "boolean",
              "description": "When true, will only match if the path matches the `location.pathname` exactly."
            },
            "model": {
              "$ref": "#/definitions/ExtensionK8sGroupKindModel",
              "description": "The model for which this resource page links to."
            }
          },
          "required": [
            "component",
            "model",
            "name"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "deprecated": "- Use `console.tab/horizontalNav` instead\nAdds new resource tab page to Console router."
    },
    "ResourceDetailsPage": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.page/resource/details"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sGroupKindModel",
              "description": "The model for which this resource page links to."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered when the route matches."
            }
          },
          "required": [
            "component",
            "model"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds new resource details page to Console router."
    },
    "DashboardsTab": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/tab"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "A unique tab identifier, used as tab link `href` and when adding cards to this tab."
            },
            "navSection": {
              "type": "string",
              "enum": [
                "home",
                "storage"
              ],
              "description": "NavSection to which the tab belongs to"
            },
            "title": {
              "type": "string",
              "description": "The title of the tab."
            }
          },
          "required": [
            "id",
            "navSection",
            "title"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new dashboard tab, placed after the Overview tab."
    },
    "DashboardsCard": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/card"
        },
        "properties": {
          "type": "object",
          "properties": {
            "tab": {
              "type": "string",
              "description": "The id of the dashboard tab to which the card will be added."
            },
            "position": {
              "type": "string",
              "enum": [
                "LEFT",
                "RIGHT",
                "MAIN"
              ],
              "description": "The grid position of the card on the dashboard."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Dashboard card component."
            },
            "span": {
              "$ref": "#/definitions/CardSpan",
              "description": "Card's vertical span in the column. Ignored for small screens, defaults to 12."
            }
          },
          "required": [
            "tab",
            "position",
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new dashboard card."
    },
    "CardSpan": {
      "$ref": "#/definitions/OverviewCardSpan",
      "deprecated": "use OverviewCardSpan type instead"
    },
    "OverviewCardSpan": {
      "type": "number",
      "enum": [
        4,
        6,
        12
      ]
    },
    "DashboardsOverviewHealthPrometheusSubsystem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/health/prometheus"
        },
        "properties": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "The display name of the subsystem."
            },
            "queries": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "The Prometheus queries"
            },
            "healthHandler": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Resolve the subsystem's health."
            },
            "additionalResource": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Additional resource which will be fetched and passed to `healthHandler`."
            },
            "popupComponent": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Loader for popup content. If defined, a health item will be represented as a link which opens popup with given content."
            },
            "popupTitle": {
              "type": "string",
              "description": "The title of the popover."
            },
            "popupClassname": {
              "type": "string",
              "description": "Optional classname for the popup top-level component."
            },
            "popupKeepOnOutsideClick": {
              "type": "boolean",
              "description": "If true, the popup will stay open when clicked outside of its boundary. Default: false"
            },
            "disallowedControlPlaneTopology": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Control plane topology for which the subsystem should be hidden."
            }
          },
          "required": [
            "title",
            "queries",
            "healthHandler"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a health subsystem to the status card of Overview dashboard where the source of status is Prometheus."
    },
    "DashboardsOverviewHealthURLSubsystem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/health/url"
        },
        "properties": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "The display name of the subsystem."
            },
            "url": {
              "type": "string",
              "description": "The URL to fetch data from. It will be prefixed with base k8s URL."
            },
            "healthHandler": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Resolve the subsystem's health."
            },
            "additionalResource": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Additional resource which will be fetched and passed to `healthHandler`."
            },
            "popupComponent": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Loader for popup content. If defined, a health item will be represented as a link which opens popup with given content."
            },
            "popupTitle": {
              "type": "string",
              "description": "The title of the popover."
            }
          },
          "required": [
            "title",
            "url",
            "healthHandler"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a health subsystem to the status card of Overview dashboard where the source of status is a K8s REST API."
    },
    "DashboardsOverviewHealthResourceSubsystem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/health/resource"
        },
        "properties": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "The display name of the subsystem."
            },
            "resources": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Kubernetes resources which will be fetched and passed to `healthHandler`."
            },
            "healthHandler": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Resolve the subsystem's health."
            },
            "popupComponent": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Loader for popup content. If defined, a health item will be represented as a link which opens popup with given content."
            },
            "popupTitle": {
              "type": "string",
              "description": "The title of the popover."
            }
          },
          "required": [
            "title",
            "resources",
            "healthHandler"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a health subsystem to the status card of Overview dashboard where the source of status is a K8s Resource."
    },
    "DashboardsOverviewHealthOperator": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/health/operator"
        },
        "properties": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "Title of operators section in the popup."
            },
            "resources": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Kubernetes resources which will be fetched and passed to `healthHandler`."
            },
            "getOperatorsWithStatuses": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Resolves status for the operators."
            },
            "operatorRowLoader": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Loader for popup row component."
            },
            "viewAllLink": {
              "type": "string",
              "description": "Links to all resources page. If not provided then a list page of the first resource from resources prop is used."
            }
          },
          "required": [
            "title",
            "resources"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a health subsystem to the status card of Overview dashboard where the source of status is a K8s REST API."
    },
    "DashboardsInventoryItemGroup": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/inventory/item/group"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "The id of the status group."
            },
            "icon": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "React component representing the status group icon."
            }
          },
          "required": [
            "id",
            "icon"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds an inventory status group."
    },
    "DashboardsOverviewInventoryItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/inventory/item"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "model": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The model for `resource` which will be fetched. Used to get the model's `label` or `abbr`."
            },
            "mapper": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function which maps various statuses to groups."
            },
            "additionalResources": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Additional resources which will be fetched and passed to the `mapper` function."
            }
          },
          "required": [
            "model"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a resource tile to the overview inventory card."
    },
    "DashboardsOverviewInventoryItemReplacement": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/inventory/item/replacement"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "model": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The model for `resource` which will be fetched. Used to get the model's `label` or `abbr`."
            },
            "mapper": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function which maps various statuses to groups."
            },
            "additionalResources": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Additional resources which will be fetched and passed to the `mapper` function."
            }
          },
          "required": [
            "model"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Replaces an overview inventory card."
    },
    "DashboardsProjectOverviewInventoryItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/project/overview/item"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "model": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The model for `resource` which will be fetched. Used to get the model's `label` or `abbr`."
            },
            "mapper": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function which maps various statuses to groups."
            },
            "additionalResources": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Additional resources which will be fetched and passed to the `mapper` function."
            }
          },
          "required": [
            "model"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a resource tile to the project overview inventory card."
    },
    "DashboardsOverviewResourceActivity": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/activity/resource"
        },
        "properties": {
          "type": "object",
          "properties": {
            "k8sResource": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The utilization item to be replaced."
            },
            "isActivity": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function which determines if the given resource represents the action. If not defined, every resource represents activity."
            },
            "getTimestamp": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Timestamp for the given action, which will be used for ordering."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The action component."
            }
          },
          "required": [
            "k8sResource",
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds an activity to the Activity Card of Overview Dashboard where the triggering of activity is based on watching a K8s resource."
    },
    "DashboardsOverviewPrometheusActivity": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/prometheus/activity/resource"
        },
        "properties": {
          "type": "object",
          "properties": {
            "queries": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Queries to watch"
            },
            "isActivity": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function which determines if the given resource represents the action. If not defined, every resource represents activity."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The action component."
            }
          },
          "required": [
            "queries",
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds an activity to the Activity Card of Prometheus Overview Dashboard where the triggering of activity is based on watching a K8s resource."
    },
    "TopologyComponentFactory": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/component/factory"
        },
        "properties": {
          "type": "object",
          "properties": {
            "getFactory": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Getter for a ViewComponentFactory"
            }
          },
          "required": [
            "getFactory"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Getter for a ViewComponentFactory"
    },
    "TopologyCreateConnector": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/create/connector"
        },
        "properties": {
          "type": "object",
          "properties": {
            "getCreateConnector": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Getter for the create connector function"
            }
          },
          "required": [
            "getCreateConnector"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Getter for the create connector function"
    },
    "TopologyDataModelFactory": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/data/factory"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "Unique ID for the factory."
            },
            "priority": {
              "type": "number",
              "description": "Priority for the factory"
            },
            "resources": {
              "$ref": "#/definitions/WatchK8sResourcesGeneric",
              "description": "Resources to be fetched from useK8sWatchResources hook."
            },
            "workloadKeys": {
              "type": "array",
              "items": {
                "type": "string"
              },
              "description": "Keys in resources containing workloads."
            },
            "getDataModel": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Getter for the data model factory"
            },
            "isResourceDepicted": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Getter for function to determine if a resource is depicted by this model factory"
            },
            "getDataModelReconciler": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Getter for function to reconcile data model after all extensions' models have loaded"
            }
          },
          "required": [
            "id",
            "priority"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Topology Data Model Factory Extension"
    },
    "WatchK8sResourcesGeneric": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "properties": {
          "model": {
            "$ref": "#/definitions/ExtensionK8sGroupKindModel"
          },
          "opts": {
            "type": "object",
            "properties": {
              "kind": {
                "$ref": "#/definitions/K8sResourceKindReference",
                "deprecated": "Use groupVersionKind instead. The kind property will be removed in a future release."
              },
              "groupVersionKind": {
                "$ref": "#/definitions/K8sGroupVersionKind"
              },
              "name": {
                "type": "string"
              },
              "namespace": {
                "type": "string"
              },
              "isList": {
                "type": "boolean"
              },
              "selector": {
                "$ref": "#/definitions/Selector"
              },
              "namespaced": {
                "type": "boolean"
              },
              "limit": {
                "type": "number"
              },
              "fieldSelector": {
                "type": "string"
              },
              "optional": {
                "type": "boolean"
              },
              "partialMetadata": {
                "type": "boolean"
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      }
    },
    "K8sResourceKindReference": {
      "type": "string",
      "description": "The canonical, unique identifier for a Kubernetes resource type. Maintains backwards-compatibility with references using the `kind` string field."
    },
    "K8sGroupVersionKind": {
      "type": "object",
      "properties": {
        "group": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "kind": {
          "type": "string"
        }
      },
      "required": [
        "version",
        "kind"
      ],
      "additionalProperties": false
    },
    "Selector": {
      "type": "object",
      "properties": {
        "matchLabels": {
          "$ref": "#/definitions/MatchLabels"
        },
        "matchExpressions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MatchExpression"
          }
        }
      },
      "additionalProperties": false
    },
    "MatchLabels": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "MatchExpression": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "operator": {
          "anyOf": [
            {
              "$ref": "#/definitions/Operator"
            },
            {
              "type": "string"
            }
          ]
        },
        "values": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "required": [
        "key",
        "operator"
      ],
      "additionalProperties": false
    },
    "Operator": {
      "type": "string",
      "enum": [
        "Exists",
        "DoesNotExist",
        "In",
        "NotIn",
        "Equals",
        "NotEqual",
        "GreaterThan",
        "LessThan",
        "NotEquals"
      ]
    },
    "TopologyDisplayFilters": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/display/filters"
        },
        "properties": {
          "type": "object",
          "properties": {
            "getTopologyFilters": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Getter for topology filters specific to the extension"
            },
            "applyDisplayOptions": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function to apply filters to the model"
            }
          },
          "required": [
            "getTopologyFilters",
            "applyDisplayOptions"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Topology Display Filters Extension"
    },
    "TopologyDecoratorProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/decorator/provider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "id for topology decorator specific to the extension"
            },
            "priority": {
              "type": "number",
              "description": "priority for topology decorator specific to the extension"
            },
            "quadrant": {
              "$ref": "#/definitions/TopologyQuadrant",
              "description": "quadrant for topology decorator specific to the extension"
            },
            "decorator": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "decorator specific to the extension"
            }
          },
          "required": [
            "id",
            "priority",
            "quadrant",
            "decorator"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Topology Decorator Provider Extension"
    },
    "TopologyQuadrant": {
      "type": "string",
      "enum": [
        "upperLeft",
        "upperRight",
        "lowerLeft",
        "lowerRight"
      ]
    },
    "TopologyRelationshipProvider": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.topology/relationship/provider"
        },
        "properties": {
          "type": "object",
          "properties": {
            "provides": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "use to determine if a connection can be created between the source and target node"
            },
            "tooltip": {
              "type": "string",
              "description": "tooltip to show when connector operation is hovering over the drop target ex: \"Create a Visual Connector\""
            },
            "create": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "callback to execute when connector is drop over target node to create a connection"
            },
            "priority": {
              "type": "number",
              "description": "priority for relationship, higher will be preferred in case of multiple"
            }
          },
          "required": [
            "provides",
            "tooltip",
            "create",
            "priority"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Topology relationship provider connector extension"
    },
    "CreateResource": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.resource/create"
        },
        "properties": {
          "type": "object",
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sModel",
              "description": "The model for which this create resource page will be rendered."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered when the model matches"
            }
          },
          "required": [
            "model",
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension allows plugins to provide a custom component (ie wizard or form) for specific resources, which will be rendered, when users try to create a new resource instance."
    },
    "UserPreferenceGroup": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.user-preference/group"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "ID used to identify the user preference group."
            },
            "label": {
              "type": "string",
              "description": "The label of the user preference group."
            },
            "insertBefore": {
              "type": "string",
              "description": "ID of user preference group before which this group should be placed."
            },
            "insertAfter": {
              "type": "string",
              "description": "ID of user preference group after which this group should be placed."
            }
          },
          "required": [
            "id",
            "label"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to add a group on the console user-preferences page. It will appear as a vertical tab option on the console user-preferences page."
    },
    "UserPreferenceItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.user-preference/item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "ID used to identify the user preference item and referenced in insertAfter and insertBefore to define the item order."
            },
            "groupId": {
              "type": "string",
              "description": "IDs used to identify the user preference groups the item would belong to."
            },
            "label": {
              "type": "string",
              "description": "The label of the user preference."
            },
            "description": {
              "type": "string",
              "description": "The description of the user preference."
            },
            "field": {
              "$ref": "#/definitions/UserPreferenceField",
              "description": "The input field options used to render the values to set the user preference."
            },
            "insertBefore": {
              "type": "string",
              "description": "ID of user preference item before which this item should be placed."
            },
            "insertAfter": {
              "type": "string",
              "description": "ID of user preference item after which this item should be placed."
            }
          },
          "required": [
            "id",
            "groupId",
            "label",
            "description",
            "field"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to add an item to the user preferences group on the console user preferences page."
    },
    "UserPreferenceField": {
      "anyOf": [
        {
          "$ref": "#/definitions/UserPreferenceDropdownField"
        },
        {
          "$ref": "#/definitions/UserPreferenceCheckboxField"
        },
        {
          "$ref": "#/definitions/UserPreferenceCustomField"
        }
      ]
    },
    "UserPreferenceDropdownField": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "dropdown"
        },
        "userSettingsKey": {
          "type": "string"
        },
        "defaultValue": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "options": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "value": {
                "type": "string"
              },
              "label": {
                "type": "string"
              },
              "description": {
                "type": "string"
              }
            },
            "required": [
              "value",
              "label"
            ],
            "additionalProperties": false
          }
        }
      },
      "required": [
        "type",
        "userSettingsKey",
        "options"
      ],
      "additionalProperties": false
    },
    "UserPreferenceCheckboxField": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "checkbox"
        },
        "userSettingsKey": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "trueValue": {
          "$ref": "#/definitions/UserPreferenceCheckboxFieldValue"
        },
        "falseValue": {
          "$ref": "#/definitions/UserPreferenceCheckboxFieldValue"
        },
        "defaultValue": {
          "$ref": "#/definitions/UserPreferenceCheckboxFieldValue"
        },
        "description": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "userSettingsKey",
        "label",
        "trueValue",
        "falseValue"
      ],
      "additionalProperties": false
    },
    "UserPreferenceCheckboxFieldValue": {
      "type": [
        "string",
        "number",
        "boolean"
      ]
    },
    "UserPreferenceCustomField": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "const": "custom"
        },
        "component": {
          "$ref": "#/definitions/EncodedCodeRef"
        },
        "props": {
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/JSONSchema7Type"
          }
        }
      },
      "required": [
        "type",
        "component"
      ],
      "additionalProperties": false
    },
    "JSONSchema7Type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "$ref": "#/definitions/JSONSchema7Object"
        },
        {
          "$ref": "#/definitions/JSONSchema7Array"
        },
        {
          "type": "null"
        }
      ],
      "description": "Primitive type"
    },
    "JSONSchema7Object": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/JSONSchema7Type"
      }
    },
    "JSONSchema7Array": {
      "type": "array",
      "items": {
        "$ref": "#/definitions/JSONSchema7Type"
      }
    },
    "Perspective": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.perspective"
        },
        "properties": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "The perspective identifier."
            },
            "name": {
              "type": "string",
              "description": "The perspective display name."
            },
            "icon": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The perspective display icon."
            },
            "default": {
              "type": "boolean",
              "description": "Whether the perspective is the default. There can only be one default."
            },
            "defaultPins": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/ExtensionK8sModel"
              },
              "description": "Default pinned resources on the nav"
            },
            "landingPageURL": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The function to get perspective landing page URL."
            },
            "importRedirectURL": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The function to get a relative redirect URL for import flow."
            },
            "usePerspectiveDetection": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The hook to detect default perspective"
            }
          },
          "required": [
            "id",
            "name",
            "icon",
            "landingPageURL",
            "importRedirectURL"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension contributes a new perspective to the console which enables customization of the navigation menu."
    },
    "HorizontalNavTab": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.tab/horizontalNav"
        },
        "properties": {
          "type": "object",
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sKindVersionModel",
              "description": "The model for which this provider show tab."
            },
            "page": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string"
                },
                "href": {
                  "type": "string"
                }
              },
              "required": [
                "name",
                "href"
              ],
              "additionalProperties": false,
              "description": "The page to be show in horizontal tab. It takes tab name as name and href of the tab"
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered when the route matches."
            }
          },
          "required": [
            "model",
            "page",
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to add a tab on the resource details page."
    },
    "NavTab": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.tab"
        },
        "properties": {
          "type": "object",
          "properties": {
            "contextId": {
              "type": "string",
              "description": "Context ID assigned to the horizontal nav in which the tab will be injected. Possible values:\n- `dev-console-observe`"
            },
            "name": {
              "type": "string",
              "description": "The display label of the tab"
            },
            "href": {
              "type": "string",
              "description": "The href appended to the existing URL"
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Tab content component."
            }
          },
          "required": [
            "contextId",
            "name",
            "href",
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a tab to a horizontal nav matching the `contextId`."
    },
    "ClusterOverviewInventoryItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.cluster-overview/inventory-item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered."
            }
          },
          "required": [
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new inventory item into cluster overview page."
    },
    "ClusterOverviewUtilizationItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.cluster-overview/utilization-item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "The title of the utilization item."
            },
            "getUtilizationQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus utilization query."
            },
            "humanize": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Convert prometheus data to human readable form."
            },
            "getTotalQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus total query."
            },
            "getRequestQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus request query."
            },
            "getLimitQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus limit query."
            },
            "TopConsumerPopover": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Shows Top consumer popover instead of plain value"
            }
          },
          "required": [
            "title",
            "getUtilizationQuery",
            "humanize"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new cluster overview utilization item."
    },
    "ClusterOverviewMultilineUtilizationItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.cluster-overview/multiline-utilization-item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "The title of the utilization item."
            },
            "getUtilizationQueries": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus utilization query."
            },
            "humanize": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Convert prometheus data to human readable form."
            },
            "TopConsumerPopovers": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Shows Top consumer popover instead of plain value"
            }
          },
          "required": [
            "title",
            "getUtilizationQueries",
            "humanize"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new cluster overview multiline utilization item."
    },
    "OverviewDetailItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/overview/detail/item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The value, based on the DetailItem component"
            }
          },
          "required": [
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "deprecated": "use CustomOverviewDetailItem type instead"
    },
    "CustomOverviewDetailItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.dashboards/custom/overview/detail/item"
        },
        "properties": {
          "type": "object",
          "additionalProperties": false,
          "properties": {
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The value, rendered by the OverviewDetailItem component"
            },
            "isLoading": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function returning the loading state of the component"
            },
            "error": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Function returning errors to be displayed by the component"
            },
            "title": {
              "type": "string",
              "description": "Details card title"
            },
            "valueClassName": {
              "type": "string",
              "description": "Value for a className"
            }
          },
          "required": [
            "component",
            "title"
          ]
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds an item to the Details card of Overview Dashboard"
    },
    "ProjectOverviewUtilizationItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.project-overview/utilization-item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "title": {
              "type": "string",
              "description": "The title of the utilization item."
            },
            "getUtilizationQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus utilization query."
            },
            "humanize": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Convert prometheus data to human readable form."
            },
            "getTotalQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus total query."
            },
            "getRequestQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus request query."
            },
            "getLimitQuery": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Prometheus limit query."
            },
            "TopConsumerPopover": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "Shows Top consumer popover instead of plain value"
            }
          },
          "required": [
            "title",
            "getUtilizationQuery",
            "humanize"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new project overview utilization item."
    },
    "ProjectOverviewInventoryItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.project-overview/inventory-item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "The component to be rendered."
            }
          },
          "required": [
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new inventory item into project overview page."
    },
    "StorageClassProvisioner": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.storage-class/provisioner"
        },
        "properties": {
          "type": "object",
          "properties": {
            "CSI": {
              "$ref": "#/definitions/ProvisionerDetails"
            },
            "OTHERS": {
              "$ref": "#/definitions/ProvisionerDetails"
            }
          },
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new storage class provisioner as an option during storage class creation."
    },
    "ProvisionerDetails": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "provisioner": {
          "type": "string"
        },
        "allowVolumeExpansion": {
          "anyOf": [
            {
              "$ref": "#/definitions/EncodedCodeRef"
            },
            {
              "type": "boolean"
            }
          ]
        },
        "volumeBindingMode": {
          "type": "string"
        },
        "documentationLink": {
          "$ref": "#/definitions/EncodedCodeRef"
        },
        "parameters": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "hintText": {
                "type": "string"
              },
              "value": {
                "type": "string"
              },
              "values": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              },
              "visible": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/EncodedCodeRef"
                  },
                  {
                    "type": "boolean"
                  }
                ]
              },
              "required": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/EncodedCodeRef"
                  },
                  {
                    "type": "boolean"
                  }
                ]
              },
              "validation": {
                "$ref": "#/definitions/EncodedCodeRef"
              },
              "format": {
                "$ref": "#/definitions/EncodedCodeRef"
              },
              "Component": {
                "$ref": "#/definitions/EncodedCodeRef"
              },
              "type": {
                "type": "string",
                "const": "checkbox"
              },
              "validationMsg": {
                "type": "string"
              }
            },
            "required": [
              "name",
              "hintText"
            ],
            "additionalProperties": false
          }
        },
        "mutator": {
          "$ref": "#/definitions/EncodedCodeRef"
        }
      },
      "required": [
        "title",
        "provisioner",
        "allowVolumeExpansion"
      ],
      "additionalProperties": false
    },
    "DetailsItem": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.resource/details-item"
        },
        "properties": {
          "type": "object",
          "properties": {
            "model": {
              "$ref": "#/definitions/ExtensionK8sModel",
              "description": "The subject resource's API group, version, and kind."
            },
            "id": {
              "type": "string",
              "description": "A unique identifier."
            },
            "column": {
              "$ref": "#/definitions/DetailsItemColumn",
              "description": "Determines if the item will appear in the 'left' or 'right' column of the resource summary on the details page. Default: 'right'"
            },
            "title": {
              "type": "string",
              "description": "The details item title."
            },
            "description": {
              "type": "string",
              "description": "An optional description that will appear in the title popover."
            },
            "path": {
              "type": "string",
              "description": "An optional, fully-qualified path to a resource property to used as the details item value. Only [primitive type](https://developer.mozilla.org/en-US/docs/Glossary/Primitive) values can be rendered directly. Use the component property to handle other data types."
            },
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "An optional React component that will render the details item value."
            },
            "sortWeight": {
              "type": "number",
              "description": "An optional sort weight, relative to all other details items in the same column. Represented by any valid [JavaScript Number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type). Items in each column are sorted independently, lowest to highest. Items without sort weights are sorted after items with sort weights."
            }
          },
          "required": [
            "model",
            "id",
            "column",
            "title"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Adds a new details item to the default resource summary on the details page."
    },
    "DetailsItemColumn": {
      "type": "string",
      "enum": [
        "right",
        "left"
      ]
    },
    "CreateProjectModal": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string",
          "const": "console.create-project-modal"
        },
        "properties": {
          "type": "object",
          "properties": {
            "component": {
              "$ref": "#/definitions/EncodedCodeRef",
              "description": "A component to render in place of the create project modal"
            }
          },
          "required": [
            "component"
          ],
          "additionalProperties": false
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "This extension can be used to pass a component that will be rendered in place of the standard create project modal."
    },
    "CustomExtension": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "type": {
          "type": "string"
        },
        "properties": {
          "type": "object"
        },
        "flags": {
          "$ref": "#/definitions/ExtensionFlags"
        }
      },
      "required": [
        "properties",
        "type"
      ],
      "description": "Custom Console extension with arbitrary `type` and `properties`.\n\nThis is a special type representing all non-standard Console extension declarations.\n\nThis allows dynamic plugins to consume extensions which are specific to other plugins."
    }
  }
}