VNLEWIKIСоздавайте истории. Соединяйте миры.
Русский
Руководство VNLE

Справочник полей JSON

Исполняемые данные и содержимое

format и containerVersion определяют контейнер. execution содержит точки входа и узлы, content — тексты, переводы и каталоги. UUID связывают таблицы. Не ищите записи по отображаемым названиям. JSON не допускает комментариев, поэтому пояснения вынесены отдельно, чтобы пример оставался корректным JSON.

// Explanation only — not a JSON file
// execution.entries[entryId].nodeRef -> execution.nodes[nodeId]
// node.text.textRef -> content.texts[textId].sourceMessage
// content.translations[locale][textId].message -> translated segments
// dialogue.continuation.nodeRef -> next node
// end -> stop; never keep advancing

story.json

Переключение языков и отсутствие переводов

Храните язык отдельно от текущего узла. При смене языка заново получите тот же textRef: используйте перевод для locale, если он есть, иначе sourceMessage. Отсутствие таблицы языка означает отсутствие переводов. allowEmpty разрешает намеренно пустой текст. Подставляйте значения с учётом их типа и формата, а не выводите JSON в виде строки. Отпечаток оригинала помогает определить устаревший перевод; один workflowStatus не подтверждает его актуальность.

Ниже перечислены все определения, доступные в текущей схеме экспорта истории, со всеми свойствами, вариантами и ограничениями. Раздел Schema раскрывает также вложенные правила. При additionalProperties = false дополнительные поля не допускаются.

JSON Schema · Draft 2020-12

Capability

ПолеТип / обязательностьЗначение / правила
Schema · Capability
{
  "type": "string",
  "pattern": "^[a-z][a-z0-9.-]*$",
  "title": "Capability"
}

ContentAsset

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
mediaTypestring · обязательноMIME-тип медиаданных.
relativePathRelativePath · обязательноПроверенный относительный путь к ресурсу; нельзя использовать его как путь файловой системы без проверки.
contentHashHash · обязательноSHA-256 содержимого указанного медиафайла.
displayNamestring · обязательноПонятное человеку отображаемое название ресурса.
licenseNotestringПримечание о лицензии ресурса; автоматическая юридическая проверка не выполняется.
widthintegerСтруктуру и допустимые значения см. в типе и схеме.
{"minimum":0,"maximum":2147483647}
heightintegerСтруктуру и допустимые значения см. в типе и схеме.
{"minimum":0,"maximum":2147483647}
byteSizeintegerСтруктуру и допустимые значения см. в типе и схеме.
{"minimum":0,"maximum":2147483647}
originalNamestringСтруктуру и допустимые значения см. в типе и схеме.
Schema · ContentAsset
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "mediaType": {
      "type": "string"
    },
    "relativePath": {
      "$ref": "#/$defs/RelativePath"
    },
    "contentHash": {
      "$ref": "#/$defs/Hash"
    },
    "displayName": {
      "type": "string"
    },
    "licenseNote": {
      "type": "string"
    },
    "width": {
      "type": "integer",
      "minimum": 0,
      "maximum": 2147483647
    },
    "height": {
      "type": "integer",
      "minimum": 0,
      "maximum": 2147483647
    },
    "byteSize": {
      "type": "integer",
      "minimum": 0,
      "maximum": 2147483647
    },
    "originalName": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "mediaType",
    "relativePath",
    "contentHash",
    "displayName"
  ],
  "additionalProperties": false,
  "title": "ContentAsset"
}

ContentCharacter

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
keyKey · обязательноСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
nameTextRefId · обязательноТекстовый идентификатор для локализованного имени.
colorstring · обязательноЦвет отображения персонажа, а не логическое значение.
{"pattern":"^#[0-9a-fA-F]{6}$"}
defaultPortraitRefIdРесурс стандартного портрета персонажа; не включается в универсальный экспорт.
emotionsobject · обязательноID эмоции → определение эмоции.
{"additionalProperties":{"$ref":"#/$defs/Emotion"}}
emotions[key]EmotionСтруктуру и допустимые значения см. в типе и схеме.
Schema · ContentCharacter
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "nameTextRef": {
      "$ref": "#/$defs/Id"
    },
    "color": {
      "type": "string",
      "pattern": "^#[0-9a-fA-F]{6}$"
    },
    "defaultPortraitRef": {
      "$ref": "#/$defs/Id"
    },
    "emotions": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/Emotion"
      }
    }
  },
  "required": [
    "id",
    "name",
    "key",
    "nameTextRef",
    "color",
    "emotions"
  ],
  "additionalProperties": false,
  "title": "ContentCharacter"
}

ContentCommandDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
keyKey · обязательноСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
categorystring · обязательноКатегория каталога для организации определения.
inputsArray<ParameterDefinition> · обязательноИменованные типизированные входные параметры сигнатуры.
outcomesArray<OutcomeDefinition> · обязательноИменованные исходы команды и их контракты или привязки.
{"minItems":1}
descriptionstringАвторское описание, а не исполняемая инструкция.
Schema · ContentCommandDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "category": {
      "type": "string"
    },
    "inputs": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ParameterDefinition"
      }
    },
    "outcomes": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/OutcomeDefinition"
      },
      "minItems": 1
    },
    "description": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "key",
    "category",
    "inputs",
    "outcomes"
  ],
  "additionalProperties": false,
  "title": "ContentCommandDefinition"
}

ContentItemDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
keyKey · обязательноСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
nameTextRefId · обязательноТекстовый идентификатор для локализованного имени.
descriptionTextRefIdТекстовый идентификатор для локализованного описания.
iconAssetRefIdID ресурса для значка в каталоге.
Schema · ContentItemDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "nameTextRef": {
      "$ref": "#/$defs/Id"
    },
    "descriptionTextRef": {
      "$ref": "#/$defs/Id"
    },
    "iconAssetRef": {
      "$ref": "#/$defs/Id"
    }
  },
  "required": [
    "id",
    "name",
    "key",
    "nameTextRef"
  ],
  "additionalProperties": false,
  "title": "ContentItemDefinition"
}

ContentLocationDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
keyKey · обязательноСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
nameTextRefId · обязательноТекстовый идентификатор для локализованного имени.
descriptionTextRefIdТекстовый идентификатор для локализованного описания.
previewAssetRefIdID ресурса предпросмотра.
Schema · ContentLocationDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "nameTextRef": {
      "$ref": "#/$defs/Id"
    },
    "descriptionTextRef": {
      "$ref": "#/$defs/Id"
    },
    "previewAssetRef": {
      "$ref": "#/$defs/Id"
    }
  },
  "required": [
    "id",
    "name",
    "key",
    "nameTextRef"
  ],
  "additionalProperties": false,
  "title": "ContentLocationDefinition"
}

ContentMinigameDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
keyKey · обязательноСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
nameTextRefIdТекстовый идентификатор для локализованного имени.
commandRefId · обязательноИдентификатор команды игры для выполнения.
Schema · ContentMinigameDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "nameTextRef": {
      "$ref": "#/$defs/Id"
    },
    "commandRef": {
      "$ref": "#/$defs/Id"
    }
  },
  "required": [
    "id",
    "name",
    "key",
    "commandRef"
  ],
  "additionalProperties": false,
  "title": "ContentMinigameDefinition"
}

ContentQuestDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
keyKey · обязательноСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
titleTextRefId · обязательноТекстовый идентификатор локализованного заголовка.
descriptionTextRefIdТекстовый идентификатор для локализованного описания.
objectiveDefinitionsArray<QuestObjective> · обязательноID цели задания → определение цели.
Schema · ContentQuestDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "titleTextRef": {
      "$ref": "#/$defs/Id"
    },
    "descriptionTextRef": {
      "$ref": "#/$defs/Id"
    },
    "objectiveDefinitions": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/QuestObjective"
      }
    }
  },
  "required": [
    "id",
    "name",
    "key",
    "titleTextRef",
    "objectiveDefinitions"
  ],
  "additionalProperties": false,
  "title": "ContentQuestDefinition"
}

ContentTextEntry

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
keyKeyСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
categorystring · обязательноКатегория каталога для организации определения.
sourceMessageСообщение · обязательноИсходное сообщение из текстовых сегментов и подстановочных полей.
placeholdersobject · обязательноКлюч подстановочного поля → определение типа и формата.
{"additionalProperties":{"$ref":"#/$defs/PlaceholderDefinition"}}
placeholders[key]PlaceholderDefinitionСтруктуру и допустимые значения см. в типе и схеме.
externalUseboolean · обязательноПомечает текст, используемый вне графа узлов.
Schema · ContentTextEntry
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "category": {
      "type": "string"
    },
    "sourceMessage": {
      "$ref": "#/$defs/Message"
    },
    "placeholders": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/PlaceholderDefinition"
      }
    },
    "externalUse": {
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "category",
    "sourceMessage",
    "placeholders",
    "externalUse"
  ],
  "additionalProperties": false,
  "title": "ContentTextEntry"
}

ContentVariableDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
keyKey · обязательноСтабильный читаемый ключ; идентификаторы остаются техническими ссылками.
valueTypeScalarType · обязательноКонтракт ожидаемого значения, включая допустимые типы сущностей.
defaultValueScalarValue · обязательноТипизированное начальное значение или значение по умолчанию.
descriptionstringАвторское описание, а не исполняемая инструкция.
Schema · ContentVariableDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "key": {
      "$ref": "#/$defs/Key"
    },
    "valueType": {
      "$ref": "#/$defs/ScalarType"
    },
    "defaultValue": {
      "$ref": "#/$defs/ScalarValue"
    },
    "description": {
      "type": "string"
    }
  },
  "required": [
    "id",
    "name",
    "key",
    "valueType",
    "defaultValue"
  ],
  "additionalProperties": false,
  "title": "ContentVariableDefinition"
}

Emotion

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
portraitRefIdРесурс портрета для эмоции; не включается в универсальный экспорт.
Schema · Emotion
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "portraitRef": {
      "$ref": "#/$defs/Id"
    }
  },
  "required": [
    "id",
    "name"
  ],
  "additionalProperties": false,
  "title": "Emotion"
}

EntityType

ПолеТип / обязательностьЗначение / правила
Schema · EntityType
{
  "type": "string",
  "enum": [
    "item",
    "quest",
    "location",
    "minigame",
    "asset"
  ],
  "title": "EntityType"
}

EntryRef

ПолеТип / обязательностьЗначение / правила
flowRefId · обязательноID сцены или подыстории.
entryRefId · обязательноID точки входа внутри указанного сценария.
Schema · EntryRef
{
  "type": "object",
  "properties": {
    "flowRef": {
      "$ref": "#/$defs/Id"
    },
    "entryRef": {
      "$ref": "#/$defs/Id"
    }
  },
  "required": [
    "flowRef",
    "entryRef"
  ],
  "additionalProperties": false,
  "title": "EntryRef"
}

ExecutableChoiceOption

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
textExecutableTextUse · обязательноДля текстовых сегментов: буквальный текст. Для использования текста: textRef и bindings.
conditionExecutableConditionУсловие, проверяемое перед ветвлением или включением варианта ответа.
effectsArray<ExecutableEffect> · обязательноИзменения состояния, применяемые узлом действия в заданном порядке.
continuationExecutableContinuation · обязательноПродолжение после завершения узла.
Schema · ExecutableChoiceOption
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "text": {
      "$ref": "#/$defs/ExecutableTextUse"
    },
    "condition": {
      "$ref": "#/$defs/ExecutableCondition"
    },
    "effects": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ExecutableEffect"
      }
    },
    "continuation": {
      "$ref": "#/$defs/ExecutableContinuation"
    }
  },
  "required": [
    "id",
    "text",
    "effects",
    "continuation"
  ],
  "additionalProperties": false,
  "title": "ExecutableChoiceOption"
}

ExecutableCondition

ПолеТип / обязательностьЗначение / правила
[oneOf 1].kind"compare" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 1].leftExecutableOperand · обязательноТипизированный левый операнд сравнения.
[oneOf 1].operator"eq" | "ne" | "lt" | "lte" | "gt" | "gte" · обязательноОператор сравнения или логический оператор; допустимые значения приведены в вариантах.
[oneOf 1].rightExecutableOperand · обязательноТипизированный правый операнд сравнения.
[oneOf 2].kind"all" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 2].childrenArray<ExecutableCondition> · обязательноДочерние условия составного выражения.
[oneOf 3].kind"any" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 3].childrenArray<ExecutableCondition> · обязательноДочерние условия составного выражения.
[oneOf 4].kind"not" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 4].childExecutableCondition · обязательноДочернее условие унарного оператора.
Schema · ExecutableCondition
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "compare"
        },
        "left": {
          "$ref": "#/$defs/ExecutableOperand"
        },
        "operator": {
          "type": "string",
          "enum": [
            "eq",
            "ne",
            "lt",
            "lte",
            "gt",
            "gte"
          ]
        },
        "right": {
          "$ref": "#/$defs/ExecutableOperand"
        }
      },
      "required": [
        "kind",
        "left",
        "operator",
        "right"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "all"
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ExecutableCondition"
          }
        }
      },
      "required": [
        "kind",
        "children"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "any"
        },
        "children": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ExecutableCondition"
          }
        }
      },
      "required": [
        "kind",
        "children"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "not"
        },
        "child": {
          "$ref": "#/$defs/ExecutableCondition"
        }
      },
      "required": [
        "kind",
        "child"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ExecutableCondition"
}

ExecutableContinuation

ПолеТип / обязательностьЗначение / правила
[oneOf 1].kind"node" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 1].nodeRefId · обязательноID следующего исполняемого узла.
[oneOf 2].kind"end" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
Schema · ExecutableContinuation
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "node"
        },
        "nodeRef": {
          "$ref": "#/$defs/Id"
        }
      },
      "required": [
        "kind",
        "nodeRef"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "end"
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ExecutableContinuation"
}

ExecutableEffect

ПолеТип / обязательностьЗначение / правила
[oneOf 1].kind"set" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 1].variableRefId · обязательноИдентификатор переменной для чтения или записи.
[oneOf 1].valueExecutableOperand · обязательноКонстанта; её тип должен совпадать с объявленным.
[oneOf 2].kind"add" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 2].variableRefId · обязательноИдентификатор переменной для чтения или записи.
[oneOf 2].valueExecutableOperand · обязательноКонстанта; её тип должен совпадать с объявленным.
[oneOf 3].kind"subtract" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 3].variableRefId · обязательноИдентификатор переменной для чтения или записи.
[oneOf 3].valueExecutableOperand · обязательноКонстанта; её тип должен совпадать с объявленным.
Schema · ExecutableEffect
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "set"
        },
        "variableRef": {
          "$ref": "#/$defs/Id"
        },
        "value": {
          "$ref": "#/$defs/ExecutableOperand"
        }
      },
      "required": [
        "kind",
        "variableRef",
        "value"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "add"
        },
        "variableRef": {
          "$ref": "#/$defs/Id"
        },
        "value": {
          "$ref": "#/$defs/ExecutableOperand"
        }
      },
      "required": [
        "kind",
        "variableRef",
        "value"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "subtract"
        },
        "variableRef": {
          "$ref": "#/$defs/Id"
        },
        "value": {
          "$ref": "#/$defs/ExecutableOperand"
        }
      },
      "required": [
        "kind",
        "variableRef",
        "value"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ExecutableEffect"
}

ExecutableEmptyChoice

ПолеТип / обязательностьЗначение / правила
[oneOf 1].kind"continue" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 1].continuationExecutableContinuation · обязательноПродолжение после завершения узла.
[oneOf 2].kind"fault" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
Schema · ExecutableEmptyChoice
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "continue"
        },
        "continuation": {
          "$ref": "#/$defs/ExecutableContinuation"
        }
      },
      "required": [
        "kind",
        "continuation"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "fault"
        }
      },
      "required": [
        "kind"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ExecutableEmptyChoice"
}

ExecutableNode

ПолеТип / обязательностьЗначение / правила
[oneOf 1].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 1].flowRefId · обязательноID сцены или подыстории.
[oneOf 1].kind"dialogue" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 1].textExecutableTextUse · обязательноДля текстовых сегментов: буквальный текст. Для использования текста: textRef и bindings.
[oneOf 1].speakerRefIdID говорящего персонажа; отсутствие означает, что персонаж не назначен.
[oneOf 1].emotionRefIdЭмоция персонажа, выбранная для этого диалога.
[oneOf 1].continuationExecutableContinuation · обязательноПродолжение после завершения узла.
[oneOf 2].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 2].flowRefId · обязательноID сцены или подыстории.
[oneOf 2].kind"choice" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 2].optionOrderArray<Id> · обязательноID вариантов ответа в порядке отображения.
[oneOf 2].optionsobject · обязательноID варианта → вариант с текстом, условием и продолжением.
{"additionalProperties":{"$ref":"#/$defs/ExecutableChoiceOption"}}
[oneOf 2].options[key]ExecutableChoiceOptionСтруктуру и допустимые значения см. в типе и схеме.
[oneOf 2].whenEmptyExecutableEmptyChoice · обязательноПоведение при отсутствии доступных вариантов ответа.
[oneOf 3].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 3].flowRefId · обязательноID сцены или подыстории.
[oneOf 3].kind"branch" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 3].conditionExecutableCondition · обязательноУсловие, проверяемое перед ветвлением или включением варианта ответа.
[oneOf 3].whenTrueExecutableContinuation · обязательноПродолжение, когда условие истинно.
[oneOf 3].whenFalseExecutableContinuation · обязательноПродолжение, когда условие ложное.
[oneOf 4].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 4].flowRefId · обязательноID сцены или подыстории.
[oneOf 4].kind"action" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 4].effectsArray<ExecutableEffect> · обязательноИзменения состояния, применяемые узлом действия в заданном порядке.
[oneOf 4].continuationExecutableContinuation · обязательноПродолжение после завершения узла.
[oneOf 5].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 5].flowRefId · обязательноID сцены или подыстории.
[oneOf 5].kind"command" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 5].commandRefId · обязательноИдентификатор команды игры для выполнения.
[oneOf 5].argumentsobject · обязательноЗначения именованных аргументов, передаваемые вызову.
{"additionalProperties":{"$ref":"#/$defs/ExecutableOperand"}}
[oneOf 5].arguments[key]ExecutableOperandСтруктуру и допустимые значения см. в типе и схеме.
[oneOf 5].outcomesobject · обязательноИменованные исходы команды и их контракты или привязки.
{"additionalProperties":{"$ref":"#/$defs/ExecutableOutcomeBinding"}}
[oneOf 5].outcomes[key]ExecutableOutcomeBindingСтруктуру и допустимые значения см. в типе и схеме.
[oneOf 6].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 6].flowRefId · обязательноID сцены или подыстории.
[oneOf 6].kind"jump" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 6].targetEntryRef · обязательноТипизированная ссылка на цель, например переменную или точку входа; точная структура указана в соответствующем варианте.
[oneOf 7].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 7].flowRefId · обязательноID сцены или подыстории.
[oneOf 7].kind"end" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 8].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 8].flowRefId · обязательноID сцены или подыстории.
[oneOf 8].kind"call" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 8].targetEntryRef · обязательноТипизированная ссылка на цель, например переменную или точку входа; точная структура указана в соответствующем варианте.
[oneOf 8].continuationExecutableContinuation · обязательноПродолжение после завершения узла.
[oneOf 9].idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
[oneOf 9].flowRefId · обязательноID сцены или подыстории.
[oneOf 9].kind"return" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
Schema · ExecutableNode
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "dialogue"
        },
        "text": {
          "$ref": "#/$defs/ExecutableTextUse"
        },
        "speakerRef": {
          "$ref": "#/$defs/Id"
        },
        "emotionRef": {
          "$ref": "#/$defs/Id"
        },
        "continuation": {
          "$ref": "#/$defs/ExecutableContinuation"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind",
        "text",
        "continuation"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "choice"
        },
        "optionOrder": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Id"
          },
          "uniqueItems": true
        },
        "options": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ExecutableChoiceOption"
          }
        },
        "whenEmpty": {
          "$ref": "#/$defs/ExecutableEmptyChoice"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind",
        "optionOrder",
        "options",
        "whenEmpty"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "branch"
        },
        "condition": {
          "$ref": "#/$defs/ExecutableCondition"
        },
        "whenTrue": {
          "$ref": "#/$defs/ExecutableContinuation"
        },
        "whenFalse": {
          "$ref": "#/$defs/ExecutableContinuation"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind",
        "condition",
        "whenTrue",
        "whenFalse"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "action"
        },
        "effects": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ExecutableEffect"
          }
        },
        "continuation": {
          "$ref": "#/$defs/ExecutableContinuation"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind",
        "effects",
        "continuation"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "command"
        },
        "commandRef": {
          "$ref": "#/$defs/Id"
        },
        "arguments": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ExecutableOperand"
          }
        },
        "outcomes": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ExecutableOutcomeBinding"
          }
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind",
        "commandRef",
        "arguments",
        "outcomes"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "jump"
        },
        "target": {
          "$ref": "#/$defs/EntryRef"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind",
        "target"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "end"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "call"
        },
        "target": {
          "$ref": "#/$defs/EntryRef"
        },
        "continuation": {
          "$ref": "#/$defs/ExecutableContinuation"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind",
        "target",
        "continuation"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "id": {
          "$ref": "#/$defs/Id"
        },
        "flowRef": {
          "$ref": "#/$defs/Id"
        },
        "kind": {
          "const": "return"
        }
      },
      "required": [
        "id",
        "flowRef",
        "kind"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ExecutableNode"
}

ExecutableOperand

ПолеТип / обязательностьЗначение / правила
[oneOf 1].kind"literal" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 1].valueTypedValue · обязательноКонстанта; её тип должен совпадать с объявленным.
[oneOf 2].kind"variable" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 2].variableRefId · обязательноИдентификатор переменной для чтения или записи.
Schema · ExecutableOperand
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "literal"
        },
        "value": {
          "$ref": "#/$defs/TypedValue"
        }
      },
      "required": [
        "kind",
        "value"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "variable"
        },
        "variableRef": {
          "$ref": "#/$defs/Id"
        }
      },
      "required": [
        "kind",
        "variableRef"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ExecutableOperand"
}

ExecutableOutcomeBinding

ПолеТип / обязательностьЗначение / правила
resultBindingsobject · обязательноИмя результата команды → переменная назначения для возвращаемого значения.
{"additionalProperties":{"$ref":"#/$defs/Id"}}
resultBindings[key]IdСтруктуру и допустимые значения см. в типе и схеме.
continuationExecutableContinuation · обязательноПродолжение после завершения узла.
Schema · ExecutableOutcomeBinding
{
  "type": "object",
  "properties": {
    "resultBindings": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/Id"
      }
    },
    "continuation": {
      "$ref": "#/$defs/ExecutableContinuation"
    }
  },
  "required": [
    "resultBindings",
    "continuation"
  ],
  "additionalProperties": false,
  "title": "ExecutableOutcomeBinding"
}

ExecutableStory

ПолеТип / обязательностьЗначение / правила
format"vnle.story" · обязательноИдентификатор точного формата для этого контейнера данных.
containerVersion1 · обязательноЦелочисленная версия контейнера истории; сейчас 1.
storyBuildIdHash · обязательноSHA-256 канонических данных исполнения; изменения только содержания не изменяют его.
executionExecutionContract · обязательноТипизированный контракт исполнения.
contentobject · обязательноЯзыковые и каталожные данные отделены от исполнения.
{"additionalProperties":false}
content.sourceLocaleLocale · обязательноИсходный язык текстов; используется также при отсутствии перевода.
content.localesArray<Locale> · обязательноЗаявленные языки экспорта, включая исходный.
{"minItems":1}
content.fallbackPolicyFallbackPolicy · обязательноСейчас source: при отсутствии перевода используется оригинал.
content.textsobject · обязательноID текста → исходное сообщение, подстановочные поля и метаданные.
{"additionalProperties":{"$ref":"#/$defs/ContentTextEntry"}}
content.texts[key]ContentTextEntryСтруктуру и допустимые значения см. в типе и схеме.
content.translationsobject · обязательноКод языка → ID текста → перевод; при отсутствии записи используется оригинал.
{"additionalProperties":{"type":"object","propertyNames":{"pattern":"^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"},"additionalProperties":{"$ref":"#/$defs/Translation"},"minProperties":1}}
content.translations[key]objectСтруктуру и допустимые значения см. в типе и схеме.
content.charactersobject · обязательноИдентификатор персонажа — персонаж с локализованными именами и эмоциями.
{"additionalProperties":{"$ref":"#/$defs/ContentCharacter"}}
content.characters[key]ContentCharacterСтруктуру и допустимые значения см. в типе и схеме.
content.questsobject · обязательноID задания → определение задания с целями.
{"additionalProperties":{"$ref":"#/$defs/ContentQuestDefinition"}}
content.quests[key]ContentQuestDefinitionСтруктуру и допустимые значения см. в типе и схеме.
content.itemsobject · обязательноID предмета → определение предмета.
{"additionalProperties":{"$ref":"#/$defs/ContentItemDefinition"}}
content.items[key]ContentItemDefinitionСтруктуру и допустимые значения см. в типе и схеме.
content.locationsobject · обязательноИдентификатор местоположения — определение местоположения.
{"additionalProperties":{"$ref":"#/$defs/ContentLocationDefinition"}}
content.locations[key]ContentLocationDefinitionСтруктуру и допустимые значения см. в типе и схеме.
content.minigamesobject · обязательноID мини-игры → определение; игровой процесс реализует сама игра.
{"additionalProperties":{"$ref":"#/$defs/ContentMinigameDefinition"}}
content.minigames[key]ContentMinigameDefinitionСтруктуру и допустимые значения см. в типе и схеме.
content.assetsobject · обязательноID ресурса → определение медиа; универсальный экспорт пока не содержит разрешённых ресурсов движка.
{"additionalProperties":{"$ref":"#/$defs/ContentAsset"}}
content.assets[key]ContentAssetСтруктуру и допустимые значения см. в типе и схеме.
content.variableDefinitionsobject · обязательноОпределения переменных, заданные автором, с именами и ссылками на текст.
{"additionalProperties":{"$ref":"#/$defs/ContentVariableDefinition"}}
content.variableDefinitions[key]ContentVariableDefinitionСтруктуру и допустимые значения см. в типе и схеме.
content.commandDefinitionsobject · обязательноАвторские определения команд, включая текстовые ссылки.
{"additionalProperties":{"$ref":"#/$defs/ContentCommandDefinition"}}
content.commandDefinitions[key]ContentCommandDefinitionСтруктуру и допустимые значения см. в типе и схеме.
Schema · ExecutableStory
{
  "type": "object",
  "properties": {
    "format": {
      "const": "vnle.story"
    },
    "containerVersion": {
      "const": 1
    },
    "storyBuildId": {
      "$ref": "#/$defs/Hash"
    },
    "execution": {
      "$ref": "#/$defs/ExecutionContract"
    },
    "content": {
      "type": "object",
      "properties": {
        "sourceLocale": {
          "$ref": "#/$defs/Locale"
        },
        "locales": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/Locale"
          },
          "minItems": 1,
          "uniqueItems": true
        },
        "fallbackPolicy": {
          "$ref": "#/$defs/FallbackPolicy"
        },
        "texts": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentTextEntry"
          }
        },
        "translations": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$"
          },
          "additionalProperties": {
            "type": "object",
            "propertyNames": {
              "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
            },
            "additionalProperties": {
              "$ref": "#/$defs/Translation"
            },
            "minProperties": 1
          }
        },
        "characters": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentCharacter"
          }
        },
        "quests": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentQuestDefinition"
          }
        },
        "items": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentItemDefinition"
          }
        },
        "locations": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentLocationDefinition"
          }
        },
        "minigames": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentMinigameDefinition"
          }
        },
        "assets": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentAsset"
          }
        },
        "variableDefinitions": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentVariableDefinition"
          }
        },
        "commandDefinitions": {
          "type": "object",
          "propertyNames": {
            "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
          },
          "additionalProperties": {
            "$ref": "#/$defs/ContentCommandDefinition"
          }
        }
      },
      "required": [
        "sourceLocale",
        "locales",
        "fallbackPolicy",
        "texts",
        "translations",
        "characters",
        "quests",
        "items",
        "locations",
        "minigames",
        "assets",
        "variableDefinitions",
        "commandDefinitions"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "format",
    "containerVersion",
    "storyBuildId",
    "execution",
    "content"
  ],
  "additionalProperties": false,
  "title": "ExecutableStory"
}

ExecutableTextUse

ПолеТип / обязательностьЗначение / правила
textRefId · обязательноСсылка на content.texts и его текстовый контракт.
bindingsobject · обязательноИмя подстановочного поля или параметра → типизированный операнд.
{"additionalProperties":{"$ref":"#/$defs/ExecutableOperand"}}
bindings[key]ExecutableOperandСтруктуру и допустимые значения см. в типе и схеме.
Schema · ExecutableTextUse
{
  "type": "object",
  "properties": {
    "textRef": {
      "$ref": "#/$defs/Id"
    },
    "bindings": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/ExecutableOperand"
      }
    }
  },
  "required": [
    "textRef",
    "bindings"
  ],
  "additionalProperties": false,
  "title": "ExecutableTextUse"
}

ExecutionContract

ПолеТип / обязательностьЗначение / правила
format"vnle.execution" · обязательноИдентификатор точного формата для этого контейнера данных.
contractVersionRuntimeVersion · обязательноВерсия совместимости исполнения: основной и дополнительный номера.
projectIdId · обязательноСтабильный идентификатор исходного проекта.
requiredCapabilitiesArray<Capability> · обязательноВозможности, которые полноценный адаптер исполнения обязан проверить перед запуском.
limitsobject · обязательноПределы автоматического исполнения и рекурсии.
{"additionalProperties":false}
limits.maxAutomaticTransitions1000 · обязательноМаксимальное число автоматических переходов без ввода пользователя.
limits.maxConditionDepth32 · обязательноМаксимальная глубина вложенности условий.
limits.maxConditionTerms1024 · обязательноМаксимальное число элементов условия.
limits.maxCallDepth32 · обязательноМаксимальная глубина вложенных вызовов подысторий.
entriesobject · обязательноID точки входа → ссылки на сценарий и узел.
{"additionalProperties":{"$ref":"#/$defs/RuntimeEntry"}}
entries[key]RuntimeEntryСтруктуру и допустимые значения см. в типе и схеме.
nodesobject · обязательноID узла → исполняемый узел; kind определяет его поля.
{"additionalProperties":{"$ref":"#/$defs/ExecutableNode"}}
nodes[key]ExecutableNodeСтруктуру и допустимые значения см. в типе и схеме.
variablesobject · обязательноID переменной → типизированное определение переменной времени выполнения.
{"additionalProperties":{"$ref":"#/$defs/RuntimeVariable"}}
variables[key]RuntimeVariableСтруктуру и допустимые значения см. в типе и схеме.
commandsobject · обязательноID команды → типизированная сигнатура времени выполнения.
{"additionalProperties":{"$ref":"#/$defs/RuntimeSignature"}}
commands[key]RuntimeSignatureСтруктуру и допустимые значения см. в типе и схеме.
textContractsobject · обязательноID текста → контракты подстановочных полей, необходимые для исполнения.
{"additionalProperties":{"$ref":"#/$defs/PlaceholderContract"}}
textContracts[key]PlaceholderContractСтруктуру и допустимые значения см. в типе и схеме.
Schema · ExecutionContract
{
  "type": "object",
  "properties": {
    "format": {
      "const": "vnle.execution"
    },
    "contractVersion": {
      "$ref": "#/$defs/RuntimeVersion"
    },
    "projectId": {
      "$ref": "#/$defs/Id"
    },
    "requiredCapabilities": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/Capability"
      },
      "uniqueItems": true
    },
    "limits": {
      "type": "object",
      "properties": {
        "maxAutomaticTransitions": {
          "const": 1000
        },
        "maxConditionDepth": {
          "const": 32
        },
        "maxConditionTerms": {
          "const": 1024
        },
        "maxCallDepth": {
          "const": 32
        }
      },
      "required": [
        "maxAutomaticTransitions",
        "maxConditionDepth",
        "maxConditionTerms",
        "maxCallDepth"
      ],
      "additionalProperties": false
    },
    "entries": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/RuntimeEntry"
      }
    },
    "nodes": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/ExecutableNode"
      }
    },
    "variables": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/RuntimeVariable"
      }
    },
    "commands": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/RuntimeSignature"
      }
    },
    "textContracts": {
      "type": "object",
      "propertyNames": {
        "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
      },
      "additionalProperties": {
        "$ref": "#/$defs/PlaceholderContract"
      }
    }
  },
  "required": [
    "format",
    "contractVersion",
    "projectId",
    "requiredCapabilities",
    "limits",
    "entries",
    "nodes",
    "variables",
    "commands",
    "textContracts"
  ],
  "additionalProperties": false,
  "title": "ExecutionContract"
}

FallbackPolicy

ПолеТип / обязательностьЗначение / правила
Schema · FallbackPolicy
{
  "type": "string",
  "enum": [
    "block",
    "source"
  ],
  "title": "FallbackPolicy"
}

Hash

ПолеТип / обязательностьЗначение / правила
Schema · Hash
{
  "type": "string",
  "pattern": "^sha256:[0-9a-f]{64}$",
  "title": "Hash"
}

Id

ПолеТип / обязательностьЗначение / правила
Schema · Id
{
  "type": "string",
  "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
  "title": "Id"
}

Key

ПолеТип / обязательностьЗначение / правила
Schema · Key
{
  "type": "string",
  "pattern": "^[A-Za-z][A-Za-z0-9_.-]{0,127}$",
  "title": "Key"
}

Locale

ПолеТип / обязательностьЗначение / правила
Schema · Locale
{
  "type": "string",
  "pattern": "^[A-Za-z]{2,8}(-[A-Za-z0-9]{1,8})*$",
  "title": "Locale"
}

Сообщение

ПолеТип / обязательностьЗначение / правила
kind"segments" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
segmentsArray<object | object> · обязательноТекстовые сегменты и подстановочные поля сообщения в заданном порядке.
Schema · Message
{
  "type": "object",
  "properties": {
    "kind": {
      "const": "segments"
    },
    "segments": {
      "type": "array",
      "items": {
        "oneOf": [
          {
            "type": "object",
            "properties": {
              "kind": {
                "const": "text"
              },
              "text": {
                "type": "string"
              }
            },
            "required": [
              "kind",
              "text"
            ],
            "additionalProperties": false
          },
          {
            "type": "object",
            "properties": {
              "kind": {
                "const": "placeholder"
              },
              "placeholderRef": {
                "$ref": "#/$defs/Id"
              }
            },
            "required": [
              "kind",
              "placeholderRef"
            ],
            "additionalProperties": false
          }
        ]
      }
    }
  },
  "required": [
    "kind",
    "segments"
  ],
  "additionalProperties": false,
  "title": "Message"
}

OutcomeDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
resultsArray<ResultDefinition> · обязательноИменованные типизированные значения, возвращаемые исходом.
Schema · OutcomeDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "results": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ResultDefinition"
      }
    }
  },
  "required": [
    "id",
    "name",
    "results"
  ],
  "additionalProperties": false,
  "title": "OutcomeDefinition"
}

ParameterDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
valueTypeValueType · обязательноКонтракт ожидаемого значения, включая допустимые типы сущностей.
defaultValueTypedValueТипизированное начальное значение или значение по умолчанию.
Schema · ParameterDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "valueType": {
      "$ref": "#/$defs/ValueType"
    },
    "defaultValue": {
      "$ref": "#/$defs/TypedValue"
    }
  },
  "required": [
    "id",
    "name",
    "valueType"
  ],
  "additionalProperties": false,
  "title": "ParameterDefinition"
}

PlaceholderContract

ПолеТип / обязательностьЗначение / правила
map[key]ScalarTypeСтруктуру и допустимые значения см. в типе и схеме.
Schema · PlaceholderContract
{
  "type": "object",
  "propertyNames": {
    "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
  },
  "additionalProperties": {
    "$ref": "#/$defs/ScalarType"
  },
  "title": "PlaceholderContract"
}

PlaceholderDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
displayNamestring · обязательноПонятное человеку отображаемое название ресурса.
valueTypeScalarType · обязательноКонтракт ожидаемого значения, включая допустимые типы сущностей.
Schema · PlaceholderDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "displayName": {
      "type": "string"
    },
    "valueType": {
      "$ref": "#/$defs/ScalarType"
    }
  },
  "required": [
    "id",
    "displayName",
    "valueType"
  ],
  "additionalProperties": false,
  "title": "PlaceholderDefinition"
}

QuestObjective

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
labelTextRefId · обязательноID текста локализованной подписи.
descriptionTextRefIdТекстовый идентификатор для локализованного описания.
Schema · QuestObjective
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "labelTextRef": {
      "$ref": "#/$defs/Id"
    },
    "descriptionTextRef": {
      "$ref": "#/$defs/Id"
    }
  },
  "required": [
    "id",
    "labelTextRef"
  ],
  "additionalProperties": false,
  "title": "QuestObjective"
}

RelativePath

ПолеТип / обязательностьЗначение / правила
Schema · RelativePath
{
  "type": "string",
  "minLength": 1,
  "maxLength": 1024,
  "title": "RelativePath"
}

ResultDefinition

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
namestring · обязательноНазвание, заданное автором; не используйте его как ключ ссылки.
valueTypeValueType · обязательноКонтракт ожидаемого значения, включая допустимые типы сущностей.
Schema · ResultDefinition
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "name": {
      "type": "string"
    },
    "valueType": {
      "$ref": "#/$defs/ValueType"
    }
  },
  "required": [
    "id",
    "name",
    "valueType"
  ],
  "additionalProperties": false,
  "title": "ResultDefinition"
}

RuntimeEntry

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
flowRefId · обязательноID сцены или подыстории.
nodeRefId · обязательноID следующего исполняемого узла.
Schema · RuntimeEntry
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "flowRef": {
      "$ref": "#/$defs/Id"
    },
    "nodeRef": {
      "$ref": "#/$defs/Id"
    }
  },
  "required": [
    "id",
    "flowRef",
    "nodeRef"
  ],
  "additionalProperties": false,
  "title": "RuntimeEntry"
}

RuntimeSignature

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
inputsArray<object> · обязательноИменованные типизированные входные параметры сигнатуры.
outcomesArray<object> · обязательноИменованные исходы команды и их контракты или привязки.
{"minItems":1}
Schema · RuntimeSignature
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "inputs": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/$defs/Id"
          },
          "valueType": {
            "$ref": "#/$defs/ValueType"
          },
          "defaultValue": {
            "$ref": "#/$defs/TypedValue"
          }
        },
        "required": [
          "id",
          "valueType"
        ],
        "additionalProperties": false
      }
    },
    "outcomes": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "$ref": "#/$defs/Id"
          },
          "results": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "$ref": "#/$defs/Id"
                },
                "valueType": {
                  "$ref": "#/$defs/ValueType"
                }
              },
              "required": [
                "id",
                "valueType"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "id",
          "results"
        ],
        "additionalProperties": false
      },
      "minItems": 1
    }
  },
  "required": [
    "id",
    "inputs",
    "outcomes"
  ],
  "additionalProperties": false,
  "title": "RuntimeSignature"
}

RuntimeVariable

ПолеТип / обязательностьЗначение / правила
idId · обязательноСтабильный ID; отображаемые названия не являются ключами.
valueTypeScalarType · обязательноКонтракт ожидаемого значения, включая допустимые типы сущностей.
defaultValueScalarValue · обязательноТипизированное начальное значение или значение по умолчанию.
Schema · RuntimeVariable
{
  "type": "object",
  "properties": {
    "id": {
      "$ref": "#/$defs/Id"
    },
    "valueType": {
      "$ref": "#/$defs/ScalarType"
    },
    "defaultValue": {
      "$ref": "#/$defs/ScalarValue"
    }
  },
  "required": [
    "id",
    "valueType",
    "defaultValue"
  ],
  "additionalProperties": false,
  "title": "RuntimeVariable"
}

RuntimeVersion

ПолеТип / обязательностьЗначение / правила
major1 · обязательноНесовместимая основная версия; отклонить неподдерживаемые версии.
minor1 · обязательноВерсия расширения в пределах основной версии.
Schema · RuntimeVersion
{
  "type": "object",
  "properties": {
    "major": {
      "const": 1
    },
    "minor": {
      "const": 1
    }
  },
  "required": [
    "major",
    "minor"
  ],
  "additionalProperties": false,
  "title": "RuntimeVersion"
}

ScalarType

ПолеТип / обязательностьЗначение / правила
Schema · ScalarType
{
  "type": "string",
  "enum": [
    "boolean",
    "integer",
    "string"
  ],
  "title": "ScalarType"
}

ScalarValue

ПолеТип / обязательностьЗначение / правила
[oneOf 1].type"boolean" · обязательноДискриминатор типа; допустимые значения зависят от содержащей его схемы.
[oneOf 1].valueboolean · обязательноКонстанта; её тип должен совпадать с объявленным.
[oneOf 2].type"integer" · обязательноДискриминатор типа; допустимые значения зависят от содержащей его схемы.
[oneOf 2].valueinteger · обязательноКонстанта; её тип должен совпадать с объявленным.
{"minimum":-2147483648,"maximum":2147483647}
[oneOf 3].type"string" · обязательноДискриминатор типа; допустимые значения зависят от содержащей его схемы.
[oneOf 3].valuestring · обязательноКонстанта; её тип должен совпадать с объявленным.
Schema · ScalarValue
{
  "oneOf": [
    {
      "type": "object",
      "properties": {
        "type": {
          "const": "boolean"
        },
        "value": {
          "type": "boolean"
        }
      },
      "required": [
        "type",
        "value"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "type": {
          "const": "integer"
        },
        "value": {
          "type": "integer",
          "minimum": -2147483648,
          "maximum": 2147483647
        }
      },
      "required": [
        "type",
        "value"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "type": {
          "const": "string"
        },
        "value": {
          "type": "string"
        }
      },
      "required": [
        "type",
        "value"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ScalarValue"
}

Translation

ПолеТип / обязательностьЗначение / правила
textRefId · обязательноСсылка на content.texts и его текстовый контракт.
localeLocale · обязательноКод языка этой записи перевода.
messageСообщение · обязательноПереведённое сообщение, соблюдающее контракт подстановочных полей.
allowEmptyboolean · обязательноРазрешить намеренно пустой перевод.
workflowStatus"draft" | "translated" | "reviewed" · обязательноСтатус рабочего процесса перевода, а не ветка времени выполнения.
basedOnSourceFingerprintHash · обязательноИсходная основа перевода; несовпадение означает, что перевод устарел.
reviewedContextFingerprintHashОтпечаток контекста на момент проверки перевода.
origin"ai"Структуру и допустимые значения см. в типе и схеме.
Schema · Translation
{
  "type": "object",
  "properties": {
    "textRef": {
      "$ref": "#/$defs/Id"
    },
    "locale": {
      "$ref": "#/$defs/Locale"
    },
    "message": {
      "$ref": "#/$defs/Message"
    },
    "allowEmpty": {
      "type": "boolean"
    },
    "workflowStatus": {
      "type": "string",
      "enum": [
        "draft",
        "translated",
        "reviewed"
      ]
    },
    "basedOnSourceFingerprint": {
      "$ref": "#/$defs/Hash"
    },
    "reviewedContextFingerprint": {
      "$ref": "#/$defs/Hash"
    },
    "origin": {
      "const": "ai"
    }
  },
  "required": [
    "textRef",
    "locale",
    "message",
    "allowEmpty",
    "workflowStatus",
    "basedOnSourceFingerprint"
  ],
  "additionalProperties": false,
  "title": "Translation"
}

TypedValue

ПолеТип / обязательностьЗначение / правила
[oneOf 2].type"reference" · обязательноДискриминатор типа; допустимые значения зависят от содержащей его схемы.
[oneOf 2].entityTypeEntityType · обязательноТип каталога для ссылки на сущность.
[oneOf 2].valueId · обязательноКонстанта; её тип должен совпадать с объявленным.
Schema · TypedValue
{
  "oneOf": [
    {
      "$ref": "#/$defs/ScalarValue"
    },
    {
      "type": "object",
      "properties": {
        "type": {
          "const": "reference"
        },
        "entityType": {
          "$ref": "#/$defs/EntityType"
        },
        "value": {
          "$ref": "#/$defs/Id"
        }
      },
      "required": [
        "type",
        "entityType",
        "value"
      ],
      "additionalProperties": false
    }
  ],
  "title": "TypedValue"
}

ValueType

ПолеТип / обязательностьЗначение / правила
[oneOf 2].kind"reference" · обязательноПоле-дискриминатор, выбирающее допустимый вариант структуры.
[oneOf 2].entityTypeEntityType · обязательноТип каталога для ссылки на сущность.
Schema · ValueType
{
  "oneOf": [
    {
      "$ref": "#/$defs/ScalarType"
    },
    {
      "type": "object",
      "properties": {
        "kind": {
          "const": "reference"
        },
        "entityType": {
          "$ref": "#/$defs/EntityType"
        }
      },
      "required": [
        "kind",
        "entityType"
      ],
      "additionalProperties": false
    }
  ],
  "title": "ValueType"
}