{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://tutti.local/schemas/workbench-snapshot.v1.json", "title": "WorkbenchSnapshotV1", "type": "object", "additionalProperties": false, "required": ["schemaVersion", "nodes"], "properties": { "schemaVersion": { "const": 1 }, "nodes": { "type": "array", "maxItems": 128, "items": { "$ref": "#/$defs/node" } }, "nodeStack": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "activeNodeId": { "type": ["string", "null"] }, "spaces": { "type": "array", "items": { "$ref": "#/$defs/space" } }, "activeSpaceId": { "type": ["string", "null"] }, "layoutBasis": { "$ref": "#/$defs/layoutBasis" }, "lockedLayout": { "$ref": "#/$defs/lockedLayout" }, "metadata": { "type": "object" } }, "$defs": { "frame": { "type": "object", "additionalProperties": false, "required": ["x", "y", "width", "height"], "properties": { "x": { "type": "number" }, "y": { "type": "number" }, "width": { "type": "number", "minimum": 160 }, "height": { "type": "number", "minimum": 120 } } }, "size": { "type": "object", "additionalProperties": false, "required": ["width", "height"], "properties": { "width": { "type": "number", "exclusiveMinimum": 0 }, "height": { "type": "number", "exclusiveMinimum": 0 } } }, "safeArea": { "type": "object", "additionalProperties": false, "required": ["top", "right", "bottom", "left"], "properties": { "top": { "type": "number", "minimum": 0 }, "right": { "type": "number", "minimum": 0 }, "bottom": { "type": "number", "minimum": 0 }, "left": { "type": "number", "minimum": 0 } } }, "layoutConstraints": { "type": "object", "additionalProperties": false, "required": ["minWidth", "minHeight", "surfacePadding", "safeArea"], "properties": { "minWidth": { "type": "number", "minimum": 0 }, "minHeight": { "type": "number", "minimum": 0 }, "surfacePadding": { "type": "number", "minimum": 0 }, "safeArea": { "$ref": "#/$defs/safeArea" } } }, "layoutBasis": { "type": "object", "additionalProperties": false, "required": ["surfaceSize", "layoutConstraints"], "properties": { "surfaceSize": { "$ref": "#/$defs/size" }, "layoutConstraints": { "$ref": "#/$defs/layoutConstraints" } } }, "layoutPreset": { "type": "object", "additionalProperties": false, "required": ["kind"], "properties": { "kind": { "enum": ["balanced", "row", "column"] } } }, "normalizedFrame": { "type": "object", "additionalProperties": false, "required": ["x", "y", "width", "height"], "properties": { "x": { "type": "number", "minimum": 0, "maximum": 1 }, "y": { "type": "number", "minimum": 0, "maximum": 1 }, "width": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 }, "height": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 } } }, "lockedLayout": { "type": "object", "additionalProperties": false, "required": ["preset", "nodeIDs"], "properties": { "preset": { "$ref": "#/$defs/layoutPreset" }, "nodeIDs": { "type": "array", "minItems": 2, "uniqueItems": true, "items": { "type": "string", "minLength": 1, "maxLength": 160 } }, "normalizedFrames": { "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 160 }, "additionalProperties": { "$ref": "#/$defs/normalizedFrame" } } } }, "node": { "type": "object", "additionalProperties": false, "required": ["id", "kind", "title", "frame"], "properties": { "id": { "type": "string", "minLength": 1, "maxLength": 160 }, "kind": { "type": "string", "minLength": 1, "maxLength": 120 }, "title": { "type": "string", "maxLength": 240 }, "frame": { "$ref": "#/$defs/frame" }, "displayMode": { "enum": ["floating", "fullscreen"] }, "restoreFrame": { "anyOf": [{ "$ref": "#/$defs/frame" }, { "type": "null" }] }, "isMinimized": { "type": "boolean" }, "minimizedAtUnixMs": { "type": ["integer", "null"], "minimum": 0 }, "data": true, "adapterState": { "type": "object" } } }, "space": { "type": "object", "additionalProperties": false, "required": ["id", "name", "nodeIds"], "properties": { "id": { "type": "string", "minLength": 1 }, "name": { "type": "string" }, "nodeIds": { "type": "array", "items": { "type": "string", "minLength": 1 } }, "frame": { "anyOf": [{ "$ref": "#/$defs/frame" }, { "type": "null" }] }, "data": true } } } }