{
    "$defs": {
        "AlternativeDocumentationConfigurationModel": {
            "additionalProperties": false,
            "description": "Configure an alternative part when documenting the tutorial.",
            "properties": {
                "text_after": {
                    "default": "",
                    "description": "Text after documenting this part.",
                    "title": "Text After",
                    "type": "string"
                },
                "text_before": {
                    "default": "",
                    "description": "Text before documenting this part.",
                    "title": "Text Before",
                    "type": "string"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                }
            },
            "title": "File part runtime configuration",
            "type": "object"
        },
        "AlternativeModel": {
            "additionalProperties": false,
            "description": "A tutorial part that has several different alternatives.\n\nWhen rendering documentation, alternatives are rendered in tabs. When running a tutorial, the runner has\nto specify exactly one (or at most one, if `required=False`) of the alternatives that should be run.\n\nAn alternative can contain parts for files or commands.",
            "properties": {
                "alternatives": {
                    "additionalProperties": {
                        "oneOf": [
                            {
                                "$ref": "#/$defs/CommandsPartModel"
                            },
                            {
                                "$ref": "#/$defs/FilePartModel"
                            }
                        ]
                    },
                    "title": "Alternatives",
                    "type": "object"
                },
                "chdir": {
                    "anyOf": [
                        {
                            "format": "path",
                            "type": "string"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "Change working directory to this path *after* this Alternatives block. This change affects all subsequent commands. This value is rendered as a template with the current context.",
                    "title": "Chdir"
                },
                "doc": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/AlternativeDocumentationConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "text_after": "",
                        "text_before": "",
                        "update_context": {}
                    },
                    "title": "Doc"
                },
                "id": {
                    "default": "",
                    "description": "ID that can be used to reference the specific part.",
                    "title": "Id",
                    "type": "string"
                },
                "index": {
                    "default": 0,
                    "description": "Index of the part in the tutorial.",
                    "title": "Index",
                    "type": "integer"
                },
                "name": {
                    "default": "",
                    "description": "Human-readable name of the part.",
                    "title": "Name",
                    "type": "string"
                },
                "required": {
                    "default": true,
                    "description": "Whether one of the alternatives is required.",
                    "title": "Required",
                    "type": "boolean"
                },
                "run": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/AlternativeRuntimeConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "options": {},
                        "update_context": {}
                    },
                    "title": "Run"
                },
                "type": {
                    "const": "alternatives",
                    "default": "alternatives",
                    "title": "Type",
                    "type": "string"
                }
            },
            "required": [
                "alternatives"
            ],
            "title": "Alternatives",
            "type": "object"
        },
        "AlternativeRuntimeConfigurationModel": {
            "additionalProperties": false,
            "description": "Configure an alternative part when running the tutorial.",
            "properties": {
                "options": {
                    "additionalProperties": true,
                    "description": "Custom options for the selected runtime backend.",
                    "title": "Options",
                    "type": "object"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                }
            },
            "title": "File part runtime configuration",
            "type": "object"
        },
        "CleanupCommandModel": {
            "additionalProperties": false,
            "description": "Command to clean up artifacts created by the current part.",
            "properties": {
                "clear_environment": {
                    "default": false,
                    "description": "Clear the environment.",
                    "title": "Clear Environment",
                    "type": "boolean"
                },
                "command": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "items": {
                                "type": "string"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "Command that cleans up artifacts created by the main command.",
                    "title": "Command"
                },
                "environment": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional environment variables for the process.",
                    "title": "Environment",
                    "type": "object"
                },
                "show_output": {
                    "default": true,
                    "description": "Set to `False` to always hide the output of this command.",
                    "title": "Show Output",
                    "type": "boolean"
                },
                "status_code": {
                    "default": 0,
                    "maximum": 255,
                    "minimum": 0,
                    "title": "Status Code",
                    "type": "integer"
                },
                "update_environment": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Update the environment for all subsequent commands.",
                    "title": "Update Environment",
                    "type": "object"
                }
            },
            "required": [
                "command"
            ],
            "title": "CleanupCommandModel",
            "type": "object"
        },
        "CommandDocumentationConfigurationModel": {
            "additionalProperties": false,
            "description": "Documentation configuration for a single command.",
            "properties": {
                "output": {
                    "default": "",
                    "description": "The output to show when rendering the command.",
                    "title": "Output",
                    "type": "string"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                }
            },
            "title": "CommandDocumentationConfigurationModel",
            "type": "object"
        },
        "CommandModel": {
            "additionalProperties": false,
            "description": "A single command to run in this part.",
            "properties": {
                "chdir": {
                    "anyOf": [
                        {
                            "format": "path",
                            "type": "string"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "Change working directory to this path *after* running this command. This change affects all subsequent commands. This value is rendered as a template with the current context.",
                    "title": "Chdir"
                },
                "command": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "items": {
                                "type": "string"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "The command to run.",
                    "title": "Command"
                },
                "doc": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/CommandDocumentationConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "output": "",
                        "update_context": {}
                    },
                    "description": "The documentation configuration (or `False` to skip at runtime).",
                    "title": "Doc"
                },
                "run": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/CommandRuntimeConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "cleanup": [],
                        "clear_environment": false,
                        "environment": {},
                        "options": {},
                        "show_output": true,
                        "status_code": 0,
                        "stdin": null,
                        "test": [],
                        "update_context": {},
                        "update_environment": {}
                    },
                    "description": "The runtime configuration (or `False` to skip at runtime).",
                    "title": "Run"
                }
            },
            "required": [
                "command"
            ],
            "title": "CommandModel",
            "type": "object"
        },
        "CommandRuntimeConfigurationModel": {
            "additionalProperties": false,
            "description": "Runtime configuration for a single command.",
            "properties": {
                "cleanup": {
                    "default": [],
                    "items": {
                        "$ref": "#/$defs/CleanupCommandModel"
                    },
                    "title": "Cleanup",
                    "type": "array"
                },
                "clear_environment": {
                    "default": false,
                    "description": "Clear the environment.",
                    "title": "Clear Environment",
                    "type": "boolean"
                },
                "environment": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional environment variables for the process.",
                    "title": "Environment",
                    "type": "object"
                },
                "options": {
                    "additionalProperties": true,
                    "description": "Custom options for the selected runtime backend.",
                    "title": "Options",
                    "type": "object"
                },
                "show_output": {
                    "default": true,
                    "description": "Set to `False` to always hide the output of this command.",
                    "title": "Show Output",
                    "type": "boolean"
                },
                "status_code": {
                    "default": 0,
                    "maximum": 255,
                    "minimum": 0,
                    "title": "Status Code",
                    "type": "integer"
                },
                "stdin": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/StdinCommandModel"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null
                },
                "test": {
                    "default": [],
                    "items": {
                        "anyOf": [
                            {
                                "$ref": "#/$defs/TestCommandModel"
                            },
                            {
                                "$ref": "#/$defs/TestPortModel"
                            },
                            {
                                "$ref": "#/$defs/TestOutputModel"
                            }
                        ]
                    },
                    "title": "Test",
                    "type": "array"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                },
                "update_environment": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Update the environment for all subsequent commands.",
                    "title": "Update Environment",
                    "type": "object"
                }
            },
            "title": "CommandRuntimeConfigurationModel",
            "type": "object"
        },
        "CommandsDocumentationConfigurationModel": {
            "additionalProperties": false,
            "description": "Documentation configuration for an entire commands part.",
            "properties": {
                "text_after": {
                    "default": "",
                    "description": "Text after documenting this part.",
                    "title": "Text After",
                    "type": "string"
                },
                "text_before": {
                    "default": "",
                    "description": "Text before documenting this part.",
                    "title": "Text Before",
                    "type": "string"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                }
            },
            "title": "CommandsDocumentationConfigurationModel",
            "type": "object"
        },
        "CommandsPartModel": {
            "additionalProperties": false,
            "description": "A tutorial part consisting of one or more commands.",
            "properties": {
                "commands": {
                    "items": {
                        "$ref": "#/$defs/CommandModel"
                    },
                    "title": "Commands",
                    "type": "array"
                },
                "doc": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/CommandsDocumentationConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "text_after": "",
                        "text_before": "",
                        "update_context": {}
                    },
                    "title": "Doc"
                },
                "id": {
                    "default": "",
                    "description": "ID that can be used to reference the specific part.",
                    "title": "Id",
                    "type": "string"
                },
                "index": {
                    "default": 0,
                    "description": "Index of the part in the tutorial.",
                    "title": "Index",
                    "type": "integer"
                },
                "name": {
                    "default": "",
                    "description": "Human-readable name of the part.",
                    "title": "Name",
                    "type": "string"
                },
                "run": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/CommandsRuntimeConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "options": {},
                        "update_context": {}
                    },
                    "title": "Run"
                },
                "type": {
                    "const": "commands",
                    "default": "commands",
                    "title": "Type",
                    "type": "string"
                }
            },
            "required": [
                "commands"
            ],
            "title": "Command part",
            "type": "object"
        },
        "CommandsRuntimeConfigurationModel": {
            "additionalProperties": false,
            "description": "Runtime configuration for an entire commands part.",
            "properties": {
                "options": {
                    "additionalProperties": true,
                    "description": "Custom options for the selected runtime backend.",
                    "title": "Options",
                    "type": "object"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                }
            },
            "title": "CommandsRuntimeConfigurationModel",
            "type": "object"
        },
        "ConfigurationModel": {
            "additionalProperties": false,
            "description": "Initial configuration of a tutorial.",
            "properties": {
                "context": {
                    "additionalProperties": true,
                    "description": "Initial context for both documentation and runtime.",
                    "title": "Context",
                    "type": "object"
                },
                "doc": {
                    "$ref": "#/$defs/DocumentationConfigurationModel",
                    "default": {
                        "alternatives": {},
                        "context": {
                            "cwd": "~",
                            "doc": true,
                            "host": "host",
                            "prompt_template": "{{ user }}@{{ host }}:{{ cwd }}{% if user == 'root' %}#{% else %}${% endif %} ",
                            "run": false,
                            "user": "user"
                        }
                    }
                },
                "run": {
                    "$ref": "#/$defs/RuntimeConfigurationModel",
                    "default": {
                        "alternatives": {},
                        "clear_environment": false,
                        "context": {
                            "cwd": "/home/docs/checkouts/readthedocs.org/user_builds/structured-tutorials/checkouts/latest",
                            "doc": false,
                            "run": true
                        },
                        "environment": {},
                        "git_export": false,
                        "required_executables": [],
                        "runner": {
                            "options": {},
                            "path": "structured_tutorials.runners.local.LocalTutorialRunner"
                        },
                        "temporary_directory": false
                    }
                }
            },
            "title": "Tutorial Configuration",
            "type": "object"
        },
        "DocumentationAlternativeConfigurationModel": {
            "additionalProperties": false,
            "description": "Additional documentation configuration for alternatives.",
            "properties": {
                "context": {
                    "additionalProperties": true,
                    "description": "Key/value pairs for the initial context for an alternative.",
                    "title": "Context",
                    "type": "object"
                },
                "name": {
                    "default": "",
                    "description": "Name of the alternative (used e.g. in tab titles).",
                    "title": "Name",
                    "type": "string"
                }
            },
            "title": "Additional configuration for alternatives.",
            "type": "object"
        },
        "DocumentationAlternativesConfigurationModel": {
            "additionalProperties": {
                "$ref": "#/$defs/DocumentationAlternativeConfigurationModel"
            },
            "description": "Configuration for alternatives when rendering documentation.",
            "title": "DocumentationAlternativesConfigurationModel",
            "type": "object"
        },
        "DocumentationConfigurationModel": {
            "additionalProperties": false,
            "description": "Initial configuration for rendering the tutorial as documentation.",
            "properties": {
                "alternatives": {
                    "$ref": "#/$defs/DocumentationAlternativesConfigurationModel"
                },
                "context": {
                    "additionalProperties": true,
                    "description": "Key/value pairs for the initial context when rendering templates.",
                    "title": "Context",
                    "type": "object"
                }
            },
            "title": "Documentation Configuration",
            "type": "object"
        },
        "FileDocumentationConfigurationModel": {
            "additionalProperties": false,
            "description": "Configure a file part when rendering it as documentation.\n\nFor the `language`, `caption`, `linenos`, `lineno_start`, `emphasize_lines` and `name` options, please\nconsult the [sphinx documentation](https://www.sphinx-doc.org/en/master/usage/restructuredtext/directives.html#directive-code-block).",
            "properties": {
                "caption": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": "",
                    "description": "The caption. Defaults to the `destination` of this part. This value is rendered as a template with the current context.",
                    "title": "Caption"
                },
                "emphasize_lines": {
                    "default": "",
                    "title": "Emphasize Lines",
                    "type": "string"
                },
                "ignore_spelling": {
                    "default": false,
                    "description": "If true, wrap the caption in `:spelling:ignore:` (see [sphinxcontrib.spelling](https://sphinxcontrib-spelling.readthedocs.io/en/latest/)).",
                    "title": "Ignore Spelling",
                    "type": "boolean"
                },
                "language": {
                    "default": "",
                    "description": "The language used for the code block directive.",
                    "title": "Language",
                    "type": "string"
                },
                "lineno_start": {
                    "anyOf": [
                        {
                            "minimum": 0,
                            "type": "integer"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": false,
                    "title": "Lineno Start"
                },
                "linenos": {
                    "default": false,
                    "title": "Linenos",
                    "type": "boolean"
                },
                "name": {
                    "default": "",
                    "title": "Name",
                    "type": "string"
                },
                "text_after": {
                    "default": "",
                    "description": "Text after documenting this part.",
                    "title": "Text After",
                    "type": "string"
                },
                "text_before": {
                    "default": "",
                    "description": "Text before documenting this part.",
                    "title": "Text Before",
                    "type": "string"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                }
            },
            "title": "File part documentation configuration",
            "type": "object"
        },
        "FilePartModel": {
            "additionalProperties": false,
            "description": "A tutorial part for creating a file.\n\nNote that exactly one of `contents` or `source` is required.",
            "properties": {
                "contents": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "Contents of the file. This value is rendered as a template with the current context.",
                    "title": "Contents (template)"
                },
                "destination": {
                    "description": "The destination path of the file. This value is rendered as a template with the current context.",
                    "title": "Destination (template)",
                    "type": "string"
                },
                "doc": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/FileDocumentationConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "caption": "",
                        "emphasize_lines": "",
                        "ignore_spelling": false,
                        "language": "",
                        "lineno_start": false,
                        "linenos": false,
                        "name": "",
                        "text_after": "",
                        "text_before": "",
                        "update_context": {}
                    },
                    "title": "Doc"
                },
                "id": {
                    "default": "",
                    "description": "ID that can be used to reference the specific part.",
                    "title": "Id",
                    "type": "string"
                },
                "index": {
                    "default": 0,
                    "description": "Index of the part in the tutorial.",
                    "title": "Index",
                    "type": "integer"
                },
                "name": {
                    "default": "",
                    "description": "Human-readable name of the part.",
                    "title": "Name",
                    "type": "string"
                },
                "run": {
                    "anyOf": [
                        {
                            "$ref": "#/$defs/FileRuntimeConfigurationModel"
                        },
                        {
                            "const": false,
                            "type": "boolean"
                        }
                    ],
                    "default": {
                        "options": {},
                        "update_context": {}
                    },
                    "title": "Run"
                },
                "source": {
                    "anyOf": [
                        {
                            "format": "path",
                            "type": "string"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "The source path of the file to create. Unless `template` is `False`, the file is loaded into memory and rendered as template.",
                    "title": "Source (template)"
                },
                "template": {
                    "default": true,
                    "description": "Whether the file contents should be rendered in a template.",
                    "title": "Template",
                    "type": "boolean"
                },
                "type": {
                    "const": "file",
                    "default": "file",
                    "title": "Type",
                    "type": "string"
                }
            },
            "required": [
                "destination"
            ],
            "title": "File part",
            "type": "object"
        },
        "FileRuntimeConfigurationModel": {
            "additionalProperties": false,
            "description": "Configure a file part when running the tutorial.",
            "properties": {
                "options": {
                    "additionalProperties": true,
                    "description": "Custom options for the selected runtime backend.",
                    "title": "Options",
                    "type": "object"
                },
                "update_context": {
                    "additionalProperties": true,
                    "title": "Update Context",
                    "type": "object"
                }
            },
            "title": "File part runtime configuration",
            "type": "object"
        },
        "PromptModel": {
            "additionalProperties": false,
            "description": "Allows you to inspect the current state of the tutorial manually.",
            "properties": {
                "default": {
                    "default": true,
                    "description": "For type=`confirm`, the default if the user just presses enter.",
                    "title": "Default",
                    "type": "boolean"
                },
                "error": {
                    "default": "State was not confirmed.",
                    "description": "For `type=confirm`, the error message if the user does not confirm the current state. {TEMPLATE_DESCRIPTION} The context will also include the `response` variable, representing the user response.",
                    "title": "Error",
                    "type": "string"
                },
                "id": {
                    "default": "",
                    "description": "ID that can be used to reference the specific part.",
                    "title": "Id",
                    "type": "string"
                },
                "index": {
                    "default": 0,
                    "description": "Index of the part in the tutorial.",
                    "title": "Index",
                    "type": "integer"
                },
                "name": {
                    "default": "",
                    "description": "Human-readable name of the part.",
                    "title": "Name",
                    "type": "string"
                },
                "prompt": {
                    "description": "The prompt text. This value is rendered as a template with the current context.",
                    "title": "Prompt",
                    "type": "string"
                },
                "response": {
                    "default": "enter",
                    "enum": [
                        "enter",
                        "confirm"
                    ],
                    "title": "Response",
                    "type": "string"
                },
                "type": {
                    "const": "prompt",
                    "default": "prompt",
                    "title": "Type",
                    "type": "string"
                }
            },
            "required": [
                "prompt"
            ],
            "title": "Prompt Configuration",
            "type": "object"
        },
        "RunnerConfig": {
            "description": "Configuration for the runner itself.",
            "properties": {
                "options": {
                    "additionalProperties": true,
                    "title": "Options",
                    "type": "object"
                },
                "path": {
                    "default": "structured_tutorials.runners.local.LocalTutorialRunner",
                    "title": "Path",
                    "type": "string"
                }
            },
            "title": "RunnerConfig",
            "type": "object"
        },
        "RuntimeAlternativeConfigurationModel": {
            "additionalProperties": false,
            "description": "Additional runtime configuration for alternatives.",
            "properties": {
                "context": {
                    "additionalProperties": true,
                    "description": "Key/value pairs for the initial context for an alternative.",
                    "title": "Context",
                    "type": "object"
                },
                "environment": {
                    "additionalProperties": {
                        "anyOf": [
                            {
                                "type": "string"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "description": "Additional environment variables for all commands.",
                    "title": "Environment",
                    "type": "object"
                },
                "required_executables": {
                    "default": [],
                    "description": "Required executables.",
                    "items": {
                        "type": "string"
                    },
                    "title": "Required Executables",
                    "type": "array"
                }
            },
            "title": "Additional configuration for alternatives.",
            "type": "object"
        },
        "RuntimeAlternativesConfigurationModel": {
            "additionalProperties": {
                "$ref": "#/$defs/RuntimeAlternativeConfigurationModel"
            },
            "description": "Configuration for alternatives at runtime.",
            "title": "RuntimeAlternativesConfigurationModel",
            "type": "object"
        },
        "RuntimeConfigurationModel": {
            "additionalProperties": false,
            "description": "Initial configuration for running the tutorial.",
            "properties": {
                "alternatives": {
                    "$ref": "#/$defs/RuntimeAlternativesConfigurationModel"
                },
                "clear_environment": {
                    "default": false,
                    "description": "Clear the environment for all commands.",
                    "title": "Clear Environment",
                    "type": "boolean"
                },
                "context": {
                    "additionalProperties": true,
                    "description": "Key/value pairs for the initial context when rendering templates.",
                    "title": "Context",
                    "type": "object"
                },
                "environment": {
                    "additionalProperties": {
                        "anyOf": [
                            {
                                "type": "string"
                            },
                            {
                                "type": "null"
                            }
                        ]
                    },
                    "description": "Additional environment variables for all commands.Set a value to `None` to clear it from the global environment.",
                    "title": "Environment",
                    "type": "object"
                },
                "git_export": {
                    "default": false,
                    "description": "Export a git archive to a temporary directory before running the tutorial.",
                    "title": "Git Export",
                    "type": "boolean"
                },
                "required_executables": {
                    "default": [],
                    "description": "Required executables.",
                    "items": {
                        "type": "string"
                    },
                    "title": "Required Executables",
                    "type": "array"
                },
                "runner": {
                    "$ref": "#/$defs/RunnerConfig",
                    "default": {
                        "options": {},
                        "path": "structured_tutorials.runners.local.LocalTutorialRunner"
                    }
                },
                "temporary_directory": {
                    "default": false,
                    "description": "Switch to an empty temporary directory before running the tutorial.",
                    "title": "Temporary Directory",
                    "type": "boolean"
                }
            },
            "title": "Runtime Configuration",
            "type": "object"
        },
        "StdinCommandModel": {
            "description": "Standard input for a command.",
            "properties": {
                "contents": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "Contents of the file. This value is rendered as a template with the current context.",
                    "title": "Contents (template)"
                },
                "source": {
                    "anyOf": [
                        {
                            "format": "path",
                            "type": "string"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "The source path of the file to create. Unless `template` is `False`, the file is loaded into memory and rendered as template.",
                    "title": "Source (template)"
                },
                "template": {
                    "default": true,
                    "description": "Whether the file contents should be rendered in a template.",
                    "title": "Template",
                    "type": "boolean"
                }
            },
            "title": "StdinCommandModel",
            "type": "object"
        },
        "TestCommandModel": {
            "additionalProperties": false,
            "description": "Test a command by running another command.",
            "properties": {
                "backoff_factor": {
                    "default": 0,
                    "minimum": 0,
                    "title": "Backoff Factor",
                    "type": "number"
                },
                "clear_environment": {
                    "default": false,
                    "description": "Clear the environment.",
                    "title": "Clear Environment",
                    "type": "boolean"
                },
                "command": {
                    "anyOf": [
                        {
                            "type": "string"
                        },
                        {
                            "items": {
                                "type": "string"
                            },
                            "type": "array"
                        }
                    ],
                    "description": "The command to run.",
                    "title": "Command"
                },
                "delay": {
                    "default": 0,
                    "minimum": 0,
                    "title": "Delay",
                    "type": "number"
                },
                "environment": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Additional environment variables for the process.",
                    "title": "Environment",
                    "type": "object"
                },
                "retry": {
                    "default": 0,
                    "minimum": 0,
                    "title": "Retry",
                    "type": "integer"
                },
                "show_output": {
                    "default": true,
                    "description": "Set to `False` to always hide the output of this command.",
                    "title": "Show Output",
                    "type": "boolean"
                },
                "status_code": {
                    "default": 0,
                    "maximum": 255,
                    "minimum": 0,
                    "title": "Status Code",
                    "type": "integer"
                },
                "update_environment": {
                    "additionalProperties": {
                        "type": "string"
                    },
                    "description": "Update the environment for all subsequent commands.",
                    "title": "Update Environment",
                    "type": "object"
                }
            },
            "required": [
                "command"
            ],
            "title": "TestCommandModel",
            "type": "object"
        },
        "TestOutputModel": {
            "additionalProperties": false,
            "description": "Test a command by checking the output of a command.",
            "properties": {
                "character_count": {
                    "anyOf": [
                        {
                            "minimum": 0,
                            "type": "integer"
                        },
                        {
                            "maxItems": 2,
                            "minItems": 2,
                            "prefixItems": [
                                {
                                    "anyOf": [
                                        {
                                            "minimum": 0,
                                            "type": "integer"
                                        },
                                        {
                                            "type": "null"
                                        }
                                    ]
                                },
                                {
                                    "anyOf": [
                                        {
                                            "minimum": 0,
                                            "type": "integer"
                                        },
                                        {
                                            "type": "null"
                                        }
                                    ]
                                }
                            ],
                            "type": "array"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "Test for the given character count.",
                    "title": "Character Count"
                },
                "line_count": {
                    "anyOf": [
                        {
                            "minimum": 0,
                            "type": "integer"
                        },
                        {
                            "maxItems": 2,
                            "minItems": 2,
                            "prefixItems": [
                                {
                                    "anyOf": [
                                        {
                                            "minimum": 0,
                                            "type": "integer"
                                        },
                                        {
                                            "type": "null"
                                        }
                                    ]
                                },
                                {
                                    "anyOf": [
                                        {
                                            "minimum": 0,
                                            "type": "integer"
                                        },
                                        {
                                            "type": "null"
                                        }
                                    ]
                                }
                            ],
                            "type": "array"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "Test for the given line count.",
                    "title": "Line Count"
                },
                "regex": {
                    "anyOf": [
                        {
                            "format": "regex",
                            "type": "string"
                        },
                        {
                            "type": "null"
                        }
                    ],
                    "default": null,
                    "description": "A regular expression to test.",
                    "title": "Regex"
                },
                "stream": {
                    "default": "stdout",
                    "description": "The output stream to use.",
                    "enum": [
                        "stdout",
                        "stderr"
                    ],
                    "title": "Stream",
                    "type": "string"
                },
                "strip": {
                    "default": true,
                    "description": "Whether to strip the output before testing.",
                    "title": "Strip",
                    "type": "boolean"
                }
            },
            "title": "TestOutputModel",
            "type": "object"
        },
        "TestPortModel": {
            "additionalProperties": false,
            "description": "Test a command by checking if a port is open.",
            "properties": {
                "backoff_factor": {
                    "default": 0,
                    "minimum": 0,
                    "title": "Backoff Factor",
                    "type": "number"
                },
                "delay": {
                    "default": 0,
                    "minimum": 0,
                    "title": "Delay",
                    "type": "number"
                },
                "host": {
                    "description": "The host to connect to.",
                    "title": "Host",
                    "type": "string"
                },
                "port": {
                    "description": "The port to connect to.",
                    "maximum": 65535,
                    "minimum": 0,
                    "title": "Port",
                    "type": "integer"
                },
                "retry": {
                    "default": 0,
                    "minimum": 0,
                    "title": "Retry",
                    "type": "integer"
                }
            },
            "required": [
                "host",
                "port"
            ],
            "title": "TestPortModel",
            "type": "object"
        }
    },
    "additionalProperties": false,
    "description": "Root structure for the entire tutorial.",
    "properties": {
        "configuration": {
            "$ref": "#/$defs/ConfigurationModel",
            "default": {
                "context": {},
                "doc": {
                    "alternatives": {},
                    "context": {
                        "cwd": "~",
                        "doc": true,
                        "host": "host",
                        "prompt_template": "{{ user }}@{{ host }}:{{ cwd }}{% if user == 'root' %}#{% else %}${% endif %} ",
                        "run": false,
                        "user": "user"
                    }
                },
                "run": {
                    "alternatives": {},
                    "clear_environment": false,
                    "context": {
                        "cwd": "/home/docs/checkouts/readthedocs.org/user_builds/structured-tutorials/checkouts/latest",
                        "doc": false,
                        "run": true
                    },
                    "environment": {},
                    "git_export": false,
                    "required_executables": [],
                    "runner": {
                        "options": {},
                        "path": "structured_tutorials.runners.local.LocalTutorialRunner"
                    },
                    "temporary_directory": false
                }
            }
        },
        "parts": {
            "description": "The individual parts of this tutorial.",
            "items": {
                "oneOf": [
                    {
                        "$ref": "#/$defs/CommandsPartModel"
                    },
                    {
                        "$ref": "#/$defs/FilePartModel"
                    },
                    {
                        "$ref": "#/$defs/PromptModel"
                    },
                    {
                        "$ref": "#/$defs/AlternativeModel"
                    }
                ]
            },
            "title": "Parts",
            "type": "array"
        },
        "root": {
            "description": "Directory from which relative file paths are resolved. Defaults to the path of the tutorial file.",
            "format": "path",
            "required": false,
            "title": "Root",
            "type": "string"
        }
    },
    "required": [
        "parts"
    ],
    "title": "Tutorial",
    "type": "object"
}
