1
0
Fork 0

add schema tool, add new world command to editor
Run Docker Build / build (push) Successful in 13s Details
Run Python Build / build (push) Successful in 27s Details

This commit is contained in:
Sean Sube 2024-06-16 21:06:35 -05:00
parent 2f26d4e883
commit 8a2af99fd4
Signed by: ssube
GPG Key ID: 3EED7B957D362AF1
8 changed files with 3640 additions and 15 deletions

818
schemas/character.json Normal file
View File

@ -0,0 +1,818 @@
{
"$defs": {
"BooleanEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"toggle": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Toggle"
}
},
"required": [
"name"
],
"title": "BooleanEffectPattern",
"type": "object"
},
"BooleanEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"toggle": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Toggle"
}
},
"required": [
"name"
],
"title": "BooleanEffectResult",
"type": "object"
},
"Calendar": {
"properties": {
"events": {
"items": {
"$ref": "#/$defs/CalendarEvent"
},
"title": "Events",
"type": "array"
}
},
"title": "Calendar",
"type": "object"
},
"CalendarEvent": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"turn": {
"title": "Turn",
"type": "integer"
}
},
"required": [
"name",
"turn"
],
"title": "CalendarEvent",
"type": "object"
},
"EffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"application": {
"enum": [
"permanent",
"temporary"
],
"title": "Application",
"type": "string"
},
"attributes": {
"items": {
"anyOf": [
{
"$ref": "#/$defs/StringEffectPattern"
},
{
"$ref": "#/$defs/FloatEffectPattern"
},
{
"$ref": "#/$defs/IntEffectPattern"
},
{
"$ref": "#/$defs/BooleanEffectPattern"
}
]
},
"title": "Attributes",
"type": "array"
},
"cooldown": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cooldown"
},
"duration": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"last_used": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Used"
},
"uses": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Uses"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "effect_pattern",
"default": "effect_pattern",
"enum": [
"effect_pattern"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description",
"application"
],
"title": "EffectPattern",
"type": "object"
},
"EffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"attributes": {
"items": {
"anyOf": [
{
"$ref": "#/$defs/BooleanEffectResult"
},
{
"$ref": "#/$defs/FloatEffectResult"
},
{
"$ref": "#/$defs/IntEffectResult"
},
{
"$ref": "#/$defs/StringEffectResult"
}
]
},
"title": "Attributes",
"type": "array"
},
"duration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "effect_result",
"default": "effect_result",
"enum": [
"effect_result"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description"
],
"title": "EffectResult",
"type": "object"
},
"FloatEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "FloatEffectPattern",
"type": "object"
},
"FloatEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "FloatEffectResult",
"type": "object"
},
"FloatRange": {
"properties": {
"min": {
"title": "Min",
"type": "number"
},
"max": {
"title": "Max",
"type": "number"
},
"interval": {
"default": 1.0,
"title": "Interval",
"type": "number"
}
},
"required": [
"min",
"max"
],
"title": "FloatRange",
"type": "object"
},
"IntEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "IntEffectPattern",
"type": "object"
},
"IntEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "IntEffectResult",
"type": "object"
},
"IntRange": {
"properties": {
"min": {
"title": "Min",
"type": "integer"
},
"max": {
"title": "Max",
"type": "integer"
},
"interval": {
"default": 1,
"title": "Interval",
"type": "integer"
}
},
"required": [
"min",
"max"
],
"title": "IntRange",
"type": "object"
},
"Item": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"active_effects": {
"items": {
"$ref": "#/$defs/EffectResult"
},
"title": "Active Effects",
"type": "array"
},
"attributes": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"title": "Attributes",
"type": "object"
},
"effects": {
"items": {
"$ref": "#/$defs/EffectPattern"
},
"title": "Effects",
"type": "array"
},
"items": {
"items": {
"$ref": "#/$defs/Item"
},
"title": "Items",
"type": "array"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "item",
"default": "item",
"enum": [
"item"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description"
],
"title": "Item",
"type": "object"
},
"Planner": {
"properties": {
"calendar": {
"$ref": "#/$defs/Calendar"
},
"notes": {
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
}
},
"title": "Planner",
"type": "object"
},
"StringEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"append": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Append"
},
"prepend": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Prepend"
},
"set": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
}
},
"required": [
"name"
],
"title": "StringEffectPattern",
"type": "object"
},
"StringEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"append": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Append"
},
"prepend": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Prepend"
},
"set": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
}
},
"required": [
"name"
],
"title": "StringEffectResult",
"type": "object"
}
},
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"backstory": {
"title": "Backstory",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"planner": {
"$ref": "#/$defs/Planner"
},
"active_effects": {
"items": {
"$ref": "#/$defs/EffectResult"
},
"title": "Active Effects",
"type": "array"
},
"attributes": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"title": "Attributes",
"type": "object"
},
"items": {
"items": {
"$ref": "#/$defs/Item"
},
"title": "Items",
"type": "array"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "character",
"default": "character",
"enum": [
"character"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"backstory",
"description"
],
"title": "Character",
"type": "object"
}

705
schemas/item.json Normal file
View File

@ -0,0 +1,705 @@
{
"$defs": {
"BooleanEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"toggle": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Toggle"
}
},
"required": [
"name"
],
"title": "BooleanEffectPattern",
"type": "object"
},
"BooleanEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"toggle": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Toggle"
}
},
"required": [
"name"
],
"title": "BooleanEffectResult",
"type": "object"
},
"EffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"application": {
"enum": [
"permanent",
"temporary"
],
"title": "Application",
"type": "string"
},
"attributes": {
"items": {
"anyOf": [
{
"$ref": "#/$defs/StringEffectPattern"
},
{
"$ref": "#/$defs/FloatEffectPattern"
},
{
"$ref": "#/$defs/IntEffectPattern"
},
{
"$ref": "#/$defs/BooleanEffectPattern"
}
]
},
"title": "Attributes",
"type": "array"
},
"cooldown": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cooldown"
},
"duration": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"last_used": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Used"
},
"uses": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Uses"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "effect_pattern",
"default": "effect_pattern",
"enum": [
"effect_pattern"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description",
"application"
],
"title": "EffectPattern",
"type": "object"
},
"EffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"attributes": {
"items": {
"anyOf": [
{
"$ref": "#/$defs/BooleanEffectResult"
},
{
"$ref": "#/$defs/FloatEffectResult"
},
{
"$ref": "#/$defs/IntEffectResult"
},
{
"$ref": "#/$defs/StringEffectResult"
}
]
},
"title": "Attributes",
"type": "array"
},
"duration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "effect_result",
"default": "effect_result",
"enum": [
"effect_result"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description"
],
"title": "EffectResult",
"type": "object"
},
"FloatEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "FloatEffectPattern",
"type": "object"
},
"FloatEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "FloatEffectResult",
"type": "object"
},
"FloatRange": {
"properties": {
"min": {
"title": "Min",
"type": "number"
},
"max": {
"title": "Max",
"type": "number"
},
"interval": {
"default": 1.0,
"title": "Interval",
"type": "number"
}
},
"required": [
"min",
"max"
],
"title": "FloatRange",
"type": "object"
},
"IntEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "IntEffectPattern",
"type": "object"
},
"IntEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "IntEffectResult",
"type": "object"
},
"IntRange": {
"properties": {
"min": {
"title": "Min",
"type": "integer"
},
"max": {
"title": "Max",
"type": "integer"
},
"interval": {
"default": 1,
"title": "Interval",
"type": "integer"
}
},
"required": [
"min",
"max"
],
"title": "IntRange",
"type": "object"
},
"Item": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"active_effects": {
"items": {
"$ref": "#/$defs/EffectResult"
},
"title": "Active Effects",
"type": "array"
},
"attributes": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"title": "Attributes",
"type": "object"
},
"effects": {
"items": {
"$ref": "#/$defs/EffectPattern"
},
"title": "Effects",
"type": "array"
},
"items": {
"items": {
"$ref": "#/$defs/Item"
},
"title": "Items",
"type": "array"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "item",
"default": "item",
"enum": [
"item"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description"
],
"title": "Item",
"type": "object"
},
"StringEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"append": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Append"
},
"prepend": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Prepend"
},
"set": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
}
},
"required": [
"name"
],
"title": "StringEffectPattern",
"type": "object"
},
"StringEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"append": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Append"
},
"prepend": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Prepend"
},
"set": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
}
},
"required": [
"name"
],
"title": "StringEffectResult",
"type": "object"
}
},
"allOf": [
{
"$ref": "#/$defs/Item"
}
]
}

953
schemas/room.json Normal file
View File

@ -0,0 +1,953 @@
{
"$defs": {
"BooleanEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"toggle": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Toggle"
}
},
"required": [
"name"
],
"title": "BooleanEffectPattern",
"type": "object"
},
"BooleanEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"toggle": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"default": null,
"title": "Toggle"
}
},
"required": [
"name"
],
"title": "BooleanEffectResult",
"type": "object"
},
"Calendar": {
"properties": {
"events": {
"items": {
"$ref": "#/$defs/CalendarEvent"
},
"title": "Events",
"type": "array"
}
},
"title": "Calendar",
"type": "object"
},
"CalendarEvent": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"turn": {
"title": "Turn",
"type": "integer"
}
},
"required": [
"name",
"turn"
],
"title": "CalendarEvent",
"type": "object"
},
"Character": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"backstory": {
"title": "Backstory",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"planner": {
"$ref": "#/$defs/Planner"
},
"active_effects": {
"items": {
"$ref": "#/$defs/EffectResult"
},
"title": "Active Effects",
"type": "array"
},
"attributes": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"title": "Attributes",
"type": "object"
},
"items": {
"items": {
"$ref": "#/$defs/Item"
},
"title": "Items",
"type": "array"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "character",
"default": "character",
"enum": [
"character"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"backstory",
"description"
],
"title": "Character",
"type": "object"
},
"EffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"application": {
"enum": [
"permanent",
"temporary"
],
"title": "Application",
"type": "string"
},
"attributes": {
"items": {
"anyOf": [
{
"$ref": "#/$defs/StringEffectPattern"
},
{
"$ref": "#/$defs/FloatEffectPattern"
},
{
"$ref": "#/$defs/IntEffectPattern"
},
{
"$ref": "#/$defs/BooleanEffectPattern"
}
]
},
"title": "Attributes",
"type": "array"
},
"cooldown": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Cooldown"
},
"duration": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"last_used": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Last Used"
},
"uses": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Uses"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "effect_pattern",
"default": "effect_pattern",
"enum": [
"effect_pattern"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description",
"application"
],
"title": "EffectPattern",
"type": "object"
},
"EffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"attributes": {
"items": {
"anyOf": [
{
"$ref": "#/$defs/BooleanEffectResult"
},
{
"$ref": "#/$defs/FloatEffectResult"
},
{
"$ref": "#/$defs/IntEffectResult"
},
{
"$ref": "#/$defs/StringEffectResult"
}
]
},
"title": "Attributes",
"type": "array"
},
"duration": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Duration"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "effect_result",
"default": "effect_result",
"enum": [
"effect_result"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description"
],
"title": "EffectResult",
"type": "object"
},
"FloatEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "FloatEffectPattern",
"type": "object"
},
"FloatEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "FloatEffectResult",
"type": "object"
},
"FloatRange": {
"properties": {
"min": {
"title": "Min",
"type": "number"
},
"max": {
"title": "Max",
"type": "number"
},
"interval": {
"default": 1.0,
"title": "Interval",
"type": "number"
}
},
"required": [
"min",
"max"
],
"title": "FloatRange",
"type": "object"
},
"IntEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/$defs/IntRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"$ref": "#/$defs/FloatRange"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "IntEffectPattern",
"type": "object"
},
"IntEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"set": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
},
"offset": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"title": "Offset"
},
"multiply": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"title": "Multiply"
}
},
"required": [
"name"
],
"title": "IntEffectResult",
"type": "object"
},
"IntRange": {
"properties": {
"min": {
"title": "Min",
"type": "integer"
},
"max": {
"title": "Max",
"type": "integer"
},
"interval": {
"default": 1,
"title": "Interval",
"type": "integer"
}
},
"required": [
"min",
"max"
],
"title": "IntRange",
"type": "object"
},
"Item": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"active_effects": {
"items": {
"$ref": "#/$defs/EffectResult"
},
"title": "Active Effects",
"type": "array"
},
"attributes": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"title": "Attributes",
"type": "object"
},
"effects": {
"items": {
"$ref": "#/$defs/EffectPattern"
},
"title": "Effects",
"type": "array"
},
"items": {
"items": {
"$ref": "#/$defs/Item"
},
"title": "Items",
"type": "array"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "item",
"default": "item",
"enum": [
"item"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description"
],
"title": "Item",
"type": "object"
},
"Planner": {
"properties": {
"calendar": {
"$ref": "#/$defs/Calendar"
},
"notes": {
"items": {
"type": "string"
},
"title": "Notes",
"type": "array"
}
},
"title": "Planner",
"type": "object"
},
"Portal": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"destination": {
"title": "Destination",
"type": "string"
},
"attributes": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"title": "Attributes",
"type": "object"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "portal",
"default": "portal",
"enum": [
"portal"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description",
"destination"
],
"title": "Portal",
"type": "object"
},
"StringEffectPattern": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"append": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Append"
},
"prepend": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Prepend"
},
"set": {
"anyOf": [
{
"type": "string"
},
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
}
},
"required": [
"name"
],
"title": "StringEffectPattern",
"type": "object"
},
"StringEffectResult": {
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"append": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Append"
},
"prepend": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Prepend"
},
"set": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"title": "Set"
}
},
"required": [
"name"
],
"title": "StringEffectResult",
"type": "object"
}
},
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"characters": {
"items": {
"$ref": "#/$defs/Character"
},
"title": "Characters",
"type": "array"
},
"active_effects": {
"items": {
"$ref": "#/$defs/EffectResult"
},
"title": "Active Effects",
"type": "array"
},
"attributes": {
"additionalProperties": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "number"
},
{
"type": "integer"
},
{
"type": "string"
}
]
},
"title": "Attributes",
"type": "object"
},
"items": {
"items": {
"$ref": "#/$defs/Item"
},
"title": "Items",
"type": "array"
},
"portals": {
"items": {
"$ref": "#/$defs/Portal"
},
"title": "Portals",
"type": "array"
},
"id": {
"title": "Id",
"type": "string"
},
"type": {
"const": "room",
"default": "room",
"enum": [
"room"
],
"title": "Type",
"type": "string"
}
},
"required": [
"name",
"description"
],
"title": "Room",
"type": "object"
}

1000
schemas/world.json Normal file

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,15 @@ from typing import List, Tuple
from dotenv import load_dotenv
from packit.utils import logger_with_colors
from taleweave.context import get_dungeon_master, get_game_systems, set_game_systems
from taleweave.engine import load_or_initialize_system_data
from taleweave.context import (
get_dungeon_master,
get_game_config,
get_game_systems,
set_game_config,
set_game_systems,
subscribe,
)
from taleweave.engine import load_or_generate_world, load_or_initialize_system_data
from taleweave.game_system import GameSystem
from taleweave.generate import (
generate_character,
@ -15,9 +22,11 @@ from taleweave.generate import (
generate_room,
link_rooms,
)
from taleweave.main import load_prompt_library
from taleweave.main import get_world_prompt, load_prompt_library
from taleweave.models.base import dump_model
from taleweave.models.config import DEFAULT_CONFIG, Config
from taleweave.models.entity import World, WorldState
from taleweave.models.event import GenerateEvent
from taleweave.plugins import load_plugin
from taleweave.utils.file import load_yaml, save_yaml
from taleweave.utils.search import (
@ -41,8 +50,19 @@ logger = logger_with_colors(__name__)
load_dotenv(environ.get("TALEWEAVE_ENV", ".env"), override=True)
def generate_listener(event: GenerateEvent):
if event.entity:
logger.info(f"Generating {event.entity.type} named {event.entity.name}")
else:
logger.info(event.name)
subscribe(GenerateEvent, generate_listener)
def parse_args():
parser = argparse.ArgumentParser(description="Taleweave Editor")
parser = argparse.ArgumentParser(description="TaleWeave AI Editor")
parser.add_argument("--config", type=str, help="Configuration file to load")
parser.add_argument("--prompts", type=str, nargs="*", help="Prompt files to load")
parser.add_argument("--state", type=str, help="State file to edit")
parser.add_argument("--world", type=str, help="World file to edit")
@ -51,6 +71,28 @@ def parse_args():
subparsers = parser.add_subparsers(dest="command", help="Command to execute")
subparsers.required = True
# Set up the 'new' command
new_parser = subparsers.add_parser("new", help="Create a new world")
new_parser.add_argument("name", type=str, help="Name of the new world")
new_parser.add_argument("--rooms", type=int, help="Number of rooms to generate")
new_parser.add_argument(
"--world-flavor",
type=str,
default="",
help="Some additional flavor text for the generated world",
)
new_parser.add_argument(
"--world-template",
type=str,
help="The template file to load the world prompt from",
)
new_parser.add_argument(
"--world-theme",
type=str,
default="fantasy",
help="The theme of the generated world",
)
# Set up the 'list' command
list_parser = subparsers.add_parser("list", help="List entities of a specific type")
list_parser.add_argument(
@ -157,6 +199,19 @@ def save_world(state_file, world_file, world: World, state: WorldState | None):
save_yaml(f, dump_model(World, world))
def command_new(args):
logger.info(f"Creating new world {args.name}")
config = get_game_config()
systems = get_game_systems()
prompt = get_world_prompt(args)
world, state_file, _ = load_or_generate_world(
args.name, args.state, config, [], systems, prompt, room_count=args.rooms
)
save_world(state_file, args.name, world, None)
def command_list(args):
world, _ = load_world(args.state, args.world)
logger.info(f"Listing {args.type}s from world {world.name}")
@ -349,6 +404,7 @@ def command_link(args):
COMMAND_TABLE = {
"new": command_new,
"list": command_list,
"describe": command_describe,
"create": command_create,
@ -365,6 +421,14 @@ def main():
load_prompt_library(args)
if args.config:
with open(args.config, "r") as f:
config = Config(**load_yaml(f))
else:
config = DEFAULT_CONFIG
set_game_config(config)
# load game systems before executing commands
systems: List[GameSystem] = []
for system_name in args.systems or []:

View File

@ -13,7 +13,7 @@ Actions = Dict[str, Callable]
class Item(BaseModel):
name: str
description: str
actions: Actions = Field(default_factory=dict)
# actions: Actions = Field(default_factory=dict)
active_effects: List[EffectResult] = Field(default_factory=list)
attributes: Attributes = Field(default_factory=dict)
effects: List[EffectPattern] = Field(default_factory=list)
@ -28,7 +28,7 @@ class Character(BaseModel):
backstory: str
description: str
planner: Planner = Field(default_factory=Planner)
actions: Actions = Field(default_factory=dict)
# actions: Actions = Field(default_factory=dict)
active_effects: List[EffectResult] = Field(default_factory=list)
attributes: Attributes = Field(default_factory=dict)
items: List[Item] = Field(default_factory=list)
@ -41,7 +41,7 @@ class Portal(BaseModel):
name: str
description: str
destination: str
actions: Actions = Field(default_factory=dict)
# actions: Actions = Field(default_factory=dict)
attributes: Attributes = Field(default_factory=dict)
id: str = Field(default_factory=uuid)
type: Literal["portal"] = "portal"
@ -52,7 +52,7 @@ class Room(BaseModel):
name: str
description: str
characters: List[Character] = Field(default_factory=list)
actions: Actions = Field(default_factory=dict)
# actions: Actions = Field(default_factory=dict)
active_effects: List[EffectResult] = Field(default_factory=list)
attributes: Attributes = Field(default_factory=dict)
items: List[Item] = Field(default_factory=list)

86
taleweave/schema.py Normal file
View File

@ -0,0 +1,86 @@
from argparse import ArgumentParser
from json import dumps
from pydantic import TypeAdapter
from taleweave.models.entity import Character, Item, Portal, Room, World
from taleweave.utils.file import load_yaml
from taleweave.utils.world import describe_entity
MODELS = {
"character": Character,
"item": Item,
"portal": Portal,
"room": Room,
"world": World,
}
def parse_args():
parser = ArgumentParser(
description="Generate or validate a schema for the TaleWeave AI models"
)
subparsers = parser.add_subparsers(dest="command", required=True)
subparsers.required = True
generate_parser = subparsers.add_parser(
"generate", help="Generate a schema for a model"
)
generate_parser.add_argument(
"model",
type=str,
choices=list(MODELS.keys()),
help="The name of the model to generate a schema for",
)
validate_parser = subparsers.add_parser(
"validate", help="Validate a JSON file against a model schema"
)
validate_parser.add_argument(
"model",
type=str,
choices=list(MODELS.keys()),
help="The name of the model to validate against",
)
validate_parser.add_argument(
"file",
type=str,
help="The path to the JSON file to validate",
)
return parser.parse_args()
def command_generate(args):
model = MODELS[args.model]
schema = TypeAdapter(model).json_schema()
print(dumps(schema, indent=2))
def command_validate(args):
model = MODELS[args.model]
with open(args.file, "r") as file:
data = load_yaml(file)
entity = model(**data)
if isinstance(entity, World):
print(entity)
else:
print(describe_entity(entity))
COMMANDS = {
"generate": command_generate,
"validate": command_validate,
}
def main():
args = parse_args()
command = COMMANDS[args.command]
command(args)
if __name__ == "__main__":
main()

View File

@ -42,13 +42,11 @@ def world_result_parser(value, agent, **kwargs):
logger.debug(f"parsing action for {agent.name}: {value}")
current_character = get_character_for_agent(agent)
current_room = next(
(room for room in current_world.rooms if current_character in room.characters),
None,
)
if current_character:
current_room = find_containing_room(current_world, current_character)
set_current_room(current_room)
set_current_character(current_character)
set_current_room(current_room)
set_current_character(current_character)
return function_result(value, agent=agent, **kwargs)
@ -66,7 +64,7 @@ def prompt_character_action(
room_directions = [portal.name for portal in room.portals]
character_attributes = format_attributes(character)
# character_effects = [effect.name for effect in character.active_effects]
character_effects = [effect.name for effect in character.active_effects]
character_items = [item.name for item in character.items]
# set up a result parser for the agent
@ -140,6 +138,7 @@ def prompt_character_action(
format_prompt(
"world_simulate_character_action",
actions=action_names,
character_effects=character_effects,
character_items=character_items,
attributes=character_attributes,
directions=room_directions,