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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
mediaType | string · 필수 | 미디어 콘텐츠의 MIME 유형. |
relativePath | RelativePath · 필수 | 검증된 상대 에셋 경로입니다. 확인 없이 파일 시스템 경로로 사용하지 마세요. |
contentHash | Hash · 필수 | 참조 된 미디어 바이트의 SHA-256. |
displayName | string · 필수 | 사람이 읽기 쉬운 에셋 표시 이름입니다. |
licenseNote | string | 에셋 라이선스에 관한 메모입니다. 법적 검토가 자동으로 수행되지는 않습니다. |
width | integer | 구조와 허용되는 값은 유형 및 스키마를 참고하세요.
{"minimum":0,"maximum":2147483647} |
height | integer | 구조와 허용되는 값은 유형 및 스키마를 참고하세요.
{"minimum":0,"maximum":2147483647} |
byteSize | integer | 구조와 허용되는 값은 유형 및 스키마를 참고하세요.
{"minimum":0,"maximum":2147483647} |
originalName | string | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
key | Key · 필수 | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
nameTextRef | Id · 필수 | 로컬 이름에 대한 텍스트 ID. |
color | string · 필수 | 캐릭터의 표시 색상이며, 로직에 사용하는 값이 아닙니다.
{"pattern":"^#[0-9a-fA-F]{6}$"} |
defaultPortraitRef | Id | 기본 캐릭터 초상화 에셋입니다. 범용 내보내기에는 포함되지 않습니다. |
emotions | object · 필수 | 감정 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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
key | Key · 필수 | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
category | string · 필수 | 정의를 구성하는 데 사용되는 카탈로그 범주. |
inputs | Array<ParameterDefinition> · 필수 | 이름과 유형이 지정된 시그니처 입력입니다. |
outcomes | Array<OutcomeDefinition> · 필수 | 명령이 반환할 수 있는 결과의 이름과 해당 데이터 규약 및 바인딩입니다.
{"minItems":1} |
description | string | 작성자가 입력한 설명이며, 실행 가능한 명령이 아닙니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
key | Key · 필수 | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
nameTextRef | Id · 필수 | 로컬 이름에 대한 텍스트 ID. |
descriptionTextRef | Id | 현지화된 설명에 사용하는 텍스트 ID입니다. |
iconAssetRef | Id | 카탈로그 아이콘을 위한 Asset ID. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
key | Key · 필수 | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
nameTextRef | Id · 필수 | 로컬 이름에 대한 텍스트 ID. |
descriptionTextRef | Id | 현지화된 설명에 사용하는 텍스트 ID입니다. |
previewAssetRef | Id | 미리보기 리소스의 자산 ID. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
key | Key · 필수 | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
nameTextRef | Id | 로컬 이름에 대한 텍스트 ID. |
commandRef | Id · 필수 | 실행할 게임 명령의 ID. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
key | Key · 필수 | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
titleTextRef | Id · 필수 | 현지화 제목의 텍스트 ID. |
descriptionTextRef | Id | 현지화된 설명에 사용하는 텍스트 ID입니다. |
objectiveDefinitions | Array<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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
key | Key | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
category | string · 필수 | 정의를 구성하는 데 사용되는 카탈로그 범주. |
sourceMessage | 메시지 · 필수 | 텍스트와 자리표시자 세그먼트로 구성된 원문 메시지입니다. |
placeholders | object · 필수 | 자리표시자 키 → 자료형과 서식 정의입니다.
{"additionalProperties":{"$ref":"#/$defs/PlaceholderDefinition"}} |
placeholders[key] | PlaceholderDefinition | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
externalUse | boolean · 필수 | 노드 그래프 밖에서 사용하는 텍스트임을 표시합니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
key | Key · 필수 | 읽기 쉬운 고정 키입니다. 기술적인 참조에는 계속 ID를 사용합니다. |
valueType | ScalarType · 필수 | 허용되는 엔티티 유형을 포함한 예상 값의 데이터 규약입니다. |
defaultValue | ScalarValue · 필수 | 유형이 지정된 초기값 또는 기본값입니다. |
description | string | 작성자가 입력한 설명이며, 실행 가능한 명령이 아닙니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
portraitRef | Id | 표정에 사용하는 초상화 에셋입니다. 범용 내보내기에는 포함되지 않습니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
entryRef | Id · 필수 | 지정된 흐름 안의 시작점 ID입니다. |
Schema · EntryRef
{
"type": "object",
"properties": {
"flowRef": {
"$ref": "#/$defs/Id"
},
"entryRef": {
"$ref": "#/$defs/Id"
}
},
"required": [
"flowRef",
"entryRef"
],
"additionalProperties": false,
"title": "EntryRef"
}
ExecutableChoiceOption
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].left | ExecutableOperand · 필수 | 자료형이 지정된 왼쪽 비교 피연산자입니다. |
[oneOf 1].operator | "eq" | "ne" | "lt" | "lte" | "gt" | "gte" · 필수 | 비교/ 논리 연산자; 허용된 값은 변종에 나타납니다. |
[oneOf 1].right | ExecutableOperand · 필수 | 자료형이 지정된 오른쪽 비교 피연산자입니다. |
[oneOf 2].kind | "all" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 2].children | Array<ExecutableCondition> · 필수 | 복합 표현식의 하위 조건입니다. |
[oneOf 3].kind | "any" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 3].children | Array<ExecutableCondition> · 필수 | 복합 표현식의 하위 조건입니다. |
[oneOf 4].kind | "not" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 4].child | ExecutableCondition · 필수 | 단항 연산자의 하위 조건입니다. |
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].nodeRef | Id · 필수 | 다음 실행 가능한 노드 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].variableRef | Id · 필수 | 읽거나 쓰기 할 수있는 변수의 ID. |
[oneOf 1].value | ExecutableOperand · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다. |
[oneOf 2].kind | "add" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 2].variableRef | Id · 필수 | 읽거나 쓰기 할 수있는 변수의 ID. |
[oneOf 2].value | ExecutableOperand · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다. |
[oneOf 3].kind | "subtract" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 3].variableRef | Id · 필수 | 읽거나 쓰기 할 수있는 변수의 ID. |
[oneOf 3].value | ExecutableOperand · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다. |
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].continuation | ExecutableContinuation · 필수 | 노드 실행이 끝난 뒤의 다음 진행 정보입니다. |
[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].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 1].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 1].kind | "dialogue" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 1].text | ExecutableTextUse · 필수 | 텍스트 세그먼트에서는 실제 문자열입니다. 텍스트 사용 정보에서는 textRef와 bindings입니다. |
[oneOf 1].speakerRef | Id | 화자 캐릭터 ID입니다. 없으면 지정된 화자가 없다는 뜻입니다. |
[oneOf 1].emotionRef | Id | 이 대화에서 선택한 캐릭터의 감정입니다. |
[oneOf 1].continuation | ExecutableContinuation · 필수 | 노드 실행이 끝난 뒤의 다음 진행 정보입니다. |
[oneOf 2].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 2].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 2].kind | "choice" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 2].optionOrder | Array<Id> · 필수 | 표시 순서대로 나열된 선택지 ID입니다. |
[oneOf 2].options | object · 필수 | 선택지 ID → 텍스트, 조건, 다음 진행 정보를 담은 선택지입니다.
{"additionalProperties":{"$ref":"#/$defs/ExecutableChoiceOption"}} |
[oneOf 2].options[key] | ExecutableChoiceOption | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
[oneOf 2].whenEmpty | ExecutableEmptyChoice · 필수 | 사용 가능한 선택지가 없을 때의 동작입니다. |
[oneOf 3].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 3].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 3].kind | "branch" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 3].condition | ExecutableCondition · 필수 | 분기하거나 선택지를 활성화하기 전에 평가하는 조건입니다. |
[oneOf 3].whenTrue | ExecutableContinuation · 필수 | 조건이 참일 때의 다음 진행 정보입니다. |
[oneOf 3].whenFalse | ExecutableContinuation · 필수 | 조건이 거짓일 때의 다음 진행 정보입니다. |
[oneOf 4].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 4].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 4].kind | "action" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 4].effects | Array<ExecutableEffect> · 필수 | 액션 노드가 순서대로 적용하는 상태 변경 효과입니다. |
[oneOf 4].continuation | ExecutableContinuation · 필수 | 노드 실행이 끝난 뒤의 다음 진행 정보입니다. |
[oneOf 5].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 5].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 5].kind | "command" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 5].commandRef | Id · 필수 | 실행할 게임 명령의 ID. |
[oneOf 5].arguments | object · 필수 | 호출에 전달하는 이름이 있는 인수 값입니다.
{"additionalProperties":{"$ref":"#/$defs/ExecutableOperand"}} |
[oneOf 5].arguments[key] | ExecutableOperand | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
[oneOf 5].outcomes | object · 필수 | 명령이 반환할 수 있는 결과의 이름과 해당 데이터 규약 및 바인딩입니다.
{"additionalProperties":{"$ref":"#/$defs/ExecutableOutcomeBinding"}} |
[oneOf 5].outcomes[key] | ExecutableOutcomeBinding | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
[oneOf 6].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 6].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 6].kind | "jump" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 6].target | EntryRef · 필수 | 변수나 시작점처럼 자료형이 지정된 대상 참조입니다. 정확한 구조는 해당 변형을 확인하세요. |
[oneOf 7].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 7].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 7].kind | "end" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 8].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 8].flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
[oneOf 8].kind | "call" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 8].target | EntryRef · 필수 | 변수나 시작점처럼 자료형이 지정된 대상 참조입니다. 정확한 구조는 해당 변형을 확인하세요. |
[oneOf 8].continuation | ExecutableContinuation · 필수 | 노드 실행이 끝난 뒤의 다음 진행 정보입니다. |
[oneOf 9].id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
[oneOf 9].flowRef | Id · 필수 | 장면 또는 서브스토리의 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].value | TypedValue · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다. |
[oneOf 2].kind | "variable" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
[oneOf 2].variableRef | Id · 필수 | 읽거나 쓰기 할 수있는 변수의 ID. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
resultBindings | object · 필수 | 명령 결과 이름 → 반환 값을 저장할 대상 변수입니다.
{"additionalProperties":{"$ref":"#/$defs/Id"}} |
resultBindings[key] | Id | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
continuation | ExecutableContinuation · 필수 | 노드 실행이 끝난 뒤의 다음 진행 정보입니다. |
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" · 필수 | 이 데이터 컨테이너에 대한 정확한 형식 식별자. |
containerVersion | 1 · 필수 | 스토리 컨테이너 정수 버전; 현재 1. |
storyBuildId | Hash · 필수 | 정규화된 실행 데이터의 SHA-256입니다. 콘텐츠만 변경하면 바뀌지 않습니다. |
execution | ExecutionContract · 필수 | 자료형이 지정된 실행 규약입니다. |
content | object · 필수 | 실행 정보와 분리된 언어 및 카탈로그 데이터입니다.
{"additionalProperties":false} |
content.sourceLocale | Locale · 필수 | 원문 언어입니다. 번역이 없을 때도 이 언어를 사용합니다. |
content.locales | Array<Locale> · 필수 | 원문 언어를 포함해 내보내기에 선언된 언어 목록입니다.
{"minItems":1} |
content.fallbackPolicy | FallbackPolicy · 필수 | 현재 값은 source이며, 번역이 없으면 원문을 사용합니다. |
content.texts | object · 필수 | 텍스트 ID → 원문 메시지, 자리표시자, 메타데이터입니다.
{"additionalProperties":{"$ref":"#/$defs/ContentTextEntry"}} |
content.texts[key] | ContentTextEntry | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.translations | object · 필수 | 언어 → 텍스트 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.characters | object · 필수 | 캐릭터 ID → 번역된 이름과 감정이 있는 캐릭터입니다.
{"additionalProperties":{"$ref":"#/$defs/ContentCharacter"}} |
content.characters[key] | ContentCharacter | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.quests | object · 필수 | 퀘스트 ID → 목표를 포함한 퀘스트 정의입니다.
{"additionalProperties":{"$ref":"#/$defs/ContentQuestDefinition"}} |
content.quests[key] | ContentQuestDefinition | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.items | object · 필수 | 아이템 ID → 아이템 정의입니다.
{"additionalProperties":{"$ref":"#/$defs/ContentItemDefinition"}} |
content.items[key] | ContentItemDefinition | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.locations | object · 필수 | 위치 ID → 위치 정의.
{"additionalProperties":{"$ref":"#/$defs/ContentLocationDefinition"}} |
content.locations[key] | ContentLocationDefinition | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.minigames | object · 필수 | 미니게임 ID → 정의입니다. 실제 플레이는 호스트 게임에서 구현합니다.
{"additionalProperties":{"$ref":"#/$defs/ContentMinigameDefinition"}} |
content.minigames[key] | ContentMinigameDefinition | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.assets | object · 필수 | 에셋 ID → 미디어 정의입니다. 범용 내보내기는 현재 엔진용으로 해석된 에셋을 제공하지 않습니다.
{"additionalProperties":{"$ref":"#/$defs/ContentAsset"}} |
content.assets[key] | ContentAsset | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.variableDefinitions | object · 필수 | 작성자가 정의한 변수이며 이름과 텍스트 참조를 포함합니다.
{"additionalProperties":{"$ref":"#/$defs/ContentVariableDefinition"}} |
content.variableDefinitions[key] | ContentVariableDefinition | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
content.commandDefinitions | object · 필수 | 작성자가 정의한 명령이며 텍스트 참조를 포함합니다.
{"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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
textRef | Id · 필수 | content.texts와 해당 텍스트 규약에 대한 참조입니다. |
bindings | object · 필수 | 자리표시자 또는 매개변수 이름 → 자료형이 지정된 피연산자입니다.
{"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" · 필수 | 이 데이터 컨테이너에 대한 정확한 형식 식별자. |
contractVersion | RuntimeVersion · 필수 | 실행 호환성 버전입니다. 메이저와 마이너 버전으로 구성됩니다. |
projectId | Id · 필수 | 소스 프로젝트의 안정적인 ID. |
requiredCapabilities | Array<Capability> · 필수 | 완전한 런타임 어댑터가 시작 전에 확인해야 하는 지원 기능입니다. |
limits | object · 필수 | 자동 실행과 재귀의 제한입니다.
{"additionalProperties":false} |
limits.maxAutomaticTransitions | 1000 · 필수 | 사용자 입력없이 최대 자동 전환. |
limits.maxConditionDepth | 32 · 필수 | 조건의 최대 중첩 깊이입니다. |
limits.maxConditionTerms | 1024 · 필수 | 조건 항목의 최대 개수입니다. |
limits.maxCallDepth | 32 · 필수 | 하위 이야기 호출의 최대 중첩 깊이입니다. |
entries | object · 필수 | 시작점 ID → 흐름과 노드 참조입니다.
{"additionalProperties":{"$ref":"#/$defs/RuntimeEntry"}} |
entries[key] | RuntimeEntry | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
nodes | object · 필수 | 노드 ID → 실행 가능한 노드입니다. kind가 필드를 결정합니다.
{"additionalProperties":{"$ref":"#/$defs/ExecutableNode"}} |
nodes[key] | ExecutableNode | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
variables | object · 필수 | 변수 ID → 자료형이 지정된 런타임 변수 정의입니다.
{"additionalProperties":{"$ref":"#/$defs/RuntimeVariable"}} |
variables[key] | RuntimeVariable | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
commands | object · 필수 | 명령 ID → 자료형이 지정된 런타임 시그니처입니다.
{"additionalProperties":{"$ref":"#/$defs/RuntimeSignature"}} |
commands[key] | RuntimeSignature | 구조와 허용되는 값은 유형 및 스키마를 참고하세요. |
textContracts | object · 필수 | 텍스트 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" · 필수 | 유효한 변형을 선택하는 구분 값입니다. |
segments | Array<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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
results | Array<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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
valueType | ValueType · 필수 | 허용되는 엔티티 유형을 포함한 예상 값의 데이터 규약입니다. |
defaultValue | TypedValue | 유형이 지정된 초기값 또는 기본값입니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
displayName | string · 필수 | 사람이 읽기 쉬운 에셋 표시 이름입니다. |
valueType | ScalarType · 필수 | 허용되는 엔티티 유형을 포함한 예상 값의 데이터 규약입니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
labelTextRef | Id · 필수 | 로컬 라벨의 텍스트 ID. |
descriptionTextRef | Id | 현지화된 설명에 사용하는 텍스트 ID입니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
name | string · 필수 | 작성자가 지정한 이름입니다. 참조 키로 사용하지 마세요. |
valueType | ValueType · 필수 | 허용되는 엔티티 유형을 포함한 예상 값의 데이터 규약입니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
flowRef | Id · 필수 | 장면 또는 서브스토리의 ID입니다. |
nodeRef | Id · 필수 | 다음 실행 가능한 노드 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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
inputs | Array<object> · 필수 | 이름과 유형이 지정된 시그니처 입력입니다. |
outcomes | Array<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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
id | Id · 필수 | 안정적인 ID입니다. 표시 이름은 키로 사용하지 않습니다. |
valueType | ScalarType · 필수 | 허용되는 엔티티 유형을 포함한 예상 값의 데이터 규약입니다. |
defaultValue | ScalarValue · 필수 | 유형이 지정된 초기값 또는 기본값입니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
major | 1 · 필수 | 호환되지 않는 메이저 버전입니다. 지원하지 않는 버전은 거부하세요. |
minor | 1 · 필수 | 주요 버전의 확장 버전. |
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].value | boolean · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다. |
[oneOf 2].type | "integer" · 필수 | 자료형 구분 값입니다. 허용 값은 상위 스키마에 따라 달라집니다. |
[oneOf 2].value | integer · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다.
{"minimum":-2147483648,"maximum":2147483647} |
[oneOf 3].type | "string" · 필수 | 자료형 구분 값입니다. 허용 값은 상위 스키마에 따라 달라집니다. |
[oneOf 3].value | string · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다. |
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
| 필드 | 유형 / 필수 | 의미 / 규칙 |
|---|
textRef | Id · 필수 | content.texts와 해당 텍스트 규약에 대한 참조입니다. |
locale | Locale · 필수 | 이 번역 항목에 대한 Locale 코드. |
message | 메시지 · 필수 | 자리표시자 규약을 지키는 번역된 메시지입니다. |
allowEmpty | boolean · 필수 | 의도적으로 빈 번역을 허용합니다. |
workflowStatus | "draft" | "translated" | "reviewed" · 필수 | 번역 작업 흐름 상태, 런타임 지점이 아닙니다. |
basedOnSourceFingerprint | Hash · 필수 | 이 번역의 기준이 된 원문입니다. 일치하지 않으면 오래된 번역입니다. |
reviewedContextFingerprint | Hash | 번역을 검토했을 때의 컨텍스트 지문입니다. |
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].entityType | EntityType · 필수 | 엔티티 참조에 사용하는 카탈로그 유형입니다. |
[oneOf 2].value | Id · 필수 | 리터럴 값입니다. 선언된 자료형과 일치해야 합니다. |
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].entityType | EntityType · 필수 | 엔티티 참조에 사용하는 카탈로그 유형입니다. |
Schema · ValueType
{
"oneOf": [
{
"$ref": "#/$defs/ScalarType"
},
{
"type": "object",
"properties": {
"kind": {
"const": "reference"
},
"entityType": {
"$ref": "#/$defs/EntityType"
}
},
"required": [
"kind",
"entityType"
],
"additionalProperties": false
}
],
"title": "ValueType"
}