← WebMCP Directory

laydyne.com

laydyne.com

live Unverified (seed import) Productivity & Business 64 tools imperative implementation

Describe your space and workflow to AI. Build layouts, adapt process scenarios, and compare simulations through MCP or the built-in assistant.

First seen 2026-10-05 · Last seen 2026-10-05 · Source: webmcp.com

Answer 27 · Act 33 · Transact 4 · Score: Not yet scored

Tool inspector

edit_space

act imperative

Edit several objects and room dimensions of one floor (floor, else the active one; or the same edit on several with floors) in one atomic change. room width and depth grow or shrink the floor on its +x and +z sides (east and south); its parts and holes keep their places unless scaleContents. Order: room, remove, update, move, rotate (90°), turn (any angle), align, distribute, rotateSelection, copy, copySelection, copyArray, add, addArray, walls, openings, group. assemblies edits floor-local definitions and instances, typed parameters and sparse component overrides; detach explicitly turns an instance into ordinary parts. Read scene.modelAssemblies and use assemblyPartId/provenance from the kit. Generated parts reject ordinary updates/copies; use assemblies overrides or detach first. Surviving generated IDs are stable when arrays change; references to disappearing IDs must be retargeted in the same apply_changes. Selection operations take explicit object IDs. Updates need only an existing ID and changed fields. Add prepared parts by kind and position; sizes default to get_space.parts. For a part of any outline (an L-shaped counter, a round column), give add[].polygon: its corners on the floor instead of x/z/w/d. addArray creates a two-direction array of one prepared part; copyArray repeats an existing assembly across rows and columns. Draw slanted walls with walls and put their doors with openings rather than computing angles and corners. Coordinates are metres. Invalid edits leave the space unchanged. The result gives the new revision, changes (the part IDs added, removed and changed), the scene of the active floor, checks (counts of the quick checks of the floor that was edited: overlaps, narrow passages, doors blocked and so on; check_space gives the IDs, severity and hints) with checksFloor naming that floor, and the building in brief; result=brief leaves the scene out. After editing another floor, scene stays the active floor, checks and checksFloor are still t…

Page: /studio

Input schema

PropertyTypeRequiredDescription
assemblies object no Edit floor-local assembly definitions/instances, typed parameters and component overrides; detach explicitly makes regular parts. Generated parts cannot be edited directly.
expectedRevision string yes Use revision from the most recent get_space or successful edit.
result string no What the result gives of the edited floor: scene (every part, with the IDs the edit made) or brief (only the IDs added, removed and changed, and its checks), for large floors.
preview boolean no Check the proposed edit without applying it: returns the proposed floor and geometry issues. If it meets the user’s requirements, repeat with preview=false and the latest revision to apply it.
floor string no Floor id (get_space.building.floors) to edit; the active floor when omitted. Another floor is edited in place and stays inactive.
floors array no The same edit on several floors at once, instead of floor: typical floors copied from one another share part IDs, so an update of 'corridor' widens it on every storey listed. All of them change or none, as one Undo step; the result gives each floor's checks. Not with preview.
skipMissing boolean no With floors: on a floor that lacks a part the edit names, leave out what names it (an update, a removal, a move, an opening on that wall; the ID from a list) instead of refusing the whole edit, and list the IDs left out per floor. For storeys whose parts differ (a ground floor with a lobby under typical floors).
room object no —
scaleContents boolean no When resizing, proportionally scale floor positions and footprints; heights stay unchanged. Otherwise only room bounds change.
add array no —
place array no Place catalog items, including complete sets, in this same atomic edit. x/z is the minimum corner of the complete rotated bounds, in metres. Sizes are preserved; oversized sets are rejected. Sets get a new group unless group is specified. Use preview=true to check the proposal first.
addArray array no Place prepared parts in a two-direction array in one edit; supports boxes and polygon prisms. Each cell gets a unique ID.
update array no Change fields of existing objects by ID. null takes passageHeading, rotation, facing, y, footprint, blocks, color, group or tags back to the default, and footprint [] makes a polygon part its box again. A rotation given sets the whole turn of a part with a front, its facing included (rotation 180 again leaves it as it is). Objects with locked: true stay unchanged unless the same update sets locked: false (only when the user asks).
remove array no —
move array no Move objects by a relative offset in metres.
rotate array no Turn footprints 90° around their centres (swaps w and d; a polygon part turns its polygon, and a part with a front its facing, counter-clockwise, as turn by 90 does).
turn array no Turn parts by any angle. Multiples of 90° are stored as a w/d swap without rotation; a part with a front keeps the turn in facing, so it faces the new way.
mirror array no Mirror parts across the middle of their bounds: each goes to its mirrored place, its turn reflected (a chair then faces the other way) and its polygon base mirrored. Select a wall with its doors to mirror them together.
copy array no Duplicate objects. With dx/dz the copies form a row at that spacing (copy n sits at n×offset); otherwise each copy goes to a free spot nearby.
align array no Align objects to the shared bounding box of the given IDs.
distribute array no Distribute with equal gaps; outer objects remain in place. Rejects overlaps caused by insufficient room.
rotateSelection array no Rotate each selection 90° clockwise as one block around its bounds; preserve relative positions and shift the whole block inside the floor if needed.
copySelection array no Repeat a selection at n×(dx,dz) spacing, preserving all relative positions. Copies are unlocked. Refuses out-of-bounds copies.
copyArray array no Repeat an existing selection across rows and columns. The original selection occupies cell (0,0); other cells get unique IDs and groups. Refuses out-of-bounds copies.
walls array no Draw walls along polylines: one wall per segment, turned to its angle, all in one group (the group given, else a new one).
openings array no Put a door, window, gate or dock_door on a wall, partition or fence: an existing one, or one this batch adds with an explicit id in add (walls drawn by walls get new IDs: read them from the result, or add their openings in a later edit). Centred on the wall's line, as thick as it, at its rotation, so it opens the wall; it joins the wall's group.
group array no Put parts in a named group (they select together in the editor); null takes them out.
dock object no —
destination object no —
autoPlaceStations boolean no Explicitly allow moving both provisional robot stations into the largest connected area.
operationId string no Your own unique name for this change, such as a UUID; optional. Sending the same call again with the same operationId returns the earlier result (replayed: true) instead of applying it twice, and get_operation tells whether it applied. Use a new one for each new change.
requestGroupId string no Attach this live edit to an open request group. Requires a fixed operationId and the current owned expectedRevision. Only the advertised five editing tools support groups.
Raw JSON schema
{
  "type": "object",
  "properties": {
    "assemblies": {
      "description": "Edit floor-local assembly definitions/instances, typed parameters and component overrides; detach explicitly makes regular parts. Generated parts cannot be edited directly.",
      "type": "object",
      "properties": {
        "definitions": {
          "type": "object",
          "properties": {
            "put": {
              "maxItems": 128,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]+$"
                  },
                  "name": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "parameters": {
                    "default": [],
                    "maxItems": 32,
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40,
                              "pattern": "^[a-zA-Z0-9_-]+$"
                            },
                            "type": {
                              "type": "string",
                              "const": "number"
                            },
                            "default": {
                              "type": "number"
                            },
                            "min": {
                              "type": "number"
                            },
                            "max": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "id",
                            "type",
                            "default",
                            "min",
                            "max"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40,
                              "pattern": "^[a-zA-Z0-9_-]+$"
                            },
                            "type": {
                              "type": "string",
                              "const": "integer"
                            },
                            "default": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "min": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            },
                            "max": {
                              "type": "integer",
                              "minimum": -9007199254740991,
                              "maximum": 9007199254740991
                            }
                          },
                          "required": [
                            "id",
                            "type",
                            "default",
                            "min",
                            "max"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40,
                              "pattern": "^[a-zA-Z0-9_-]+$"
                            },
                            "type": {
                              "type": "string",
                              "const": "enum"
                            },
                            "default": {
                              "type": "string",
                              "maxLength": 60
                            },
                            "values": {
                              "minItems": 1,
                              "maxItems": 32,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "maxLength": 60
                              }
                            }
                          },
                          "required": [
                            "id",
                            "type",
                            "default",
                            "values"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    }
                  },
                  "components": {
                    "maxItems": 4096,
                    "type": "array",
                    "items": {
                      "oneOf": [
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40,
                              "pattern": "^[a-zA-Z0-9_-]+$"
                            },
                            "array": {
                              "type": "object",
                              "properties": {
                                "count": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "parameter": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 40,
                                          "pattern": "^[a-zA-Z0-9_-]+$"
                                        },
                                        "factor": {
                                          "type": "number"
                                        },
                                        "offset": {
                                          "type": "number"
                                        }
                                      },
                                      "required": [
                                        "parameter"
                                      ],
                                      "additionalProperties": false
                                    }
                                  ]
                                },
                                "dx": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "parameter": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 40,
                                          "pattern": "^[a-zA-Z0-9_-]+$"
                                        },
                                        "factor": {
                                          "type": "number"
                                        },
                                        "offset": {
                                          "type": "number"
                                        }
                                      },
                                      "required": [
                                        "parameter"
                                      ],
                                      "additionalProperties": false
                                    }
                                  ]
                                },
                                "dz": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "parameter": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 40,
                                          "pattern": "^[a-zA-Z0-9_-]+$"
                                        },
                                        "factor": {
                                          "type": "number"
                                        },
                                        "offset": {
                                          "type": "number"
                                        }
                                      },
                                      "required": [
                                        "parameter"
                                      ],
                                      "additionalProperties": false
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "count",
                                "dx",
                                "dz"
                              ],
                              "additionalProperties": false
                            },
                            "type": {
                              "type": "string",
                              "const": "part"
                            },
                            "part": {
                              "type": "object",
                              "properties": {
                                "id": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 60
                                },
                                "label": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 60
                                },
                                "kind": {
                                  "type": "string",
                                  "enum": [
                                    "wall",
                                    "column",
                                    "zone",
                                    "desk",
                                    "table",
                                    "chair",
                                    "sofa",
                                    "cabinet",
                                    "shelf",
                                    "display",
                                    "counter",
                                    "rack",
                                    "pallet",
                                    "machine",
                                    "booth",
                                    "stage",
                                    "bed",
                                    "plant",
                                    "block",
                                    "partition",
                                    "door",
                                    "window",
                                    "stairs",
                                    "elevator",
                                    "escalator",
                                    "round_table",
                                    "bookshelf",
                                    "locker",
                                    "whiteboard",
                                    "wardrobe",
                                    "kitchen",
                                    "fridge",
                                    "rug",
                                    "checkout",
                                    "fridge_case",
                                    "clothes_rack",
                                    "kiosk",
                                    "conveyor",
                                    "workbench",
                                    "roll_cage",
                                    "container",
                                    "tank",
                                    "forklift",
                                    "charger",
                                    "dock_door",
                                    "seating_row",
                                    "podium",
                                    "screen",
                                    "barrier",
                                    "building",
                                    "parking",
                                    "road",
                                    "sidewalk",
                                    "lawn",
                                    "tree",
                                    "car",
                                    "truck",
                                    "fence",
                                    "gate",
                                    "bench",
                                    "pole",
                                    "person",
                                    "toilet",
                                    "washbasin",
                                    "urinal",
                                    "atm",
                                    "pos_terminal",
                                    "coffee_machine",
                                    "oven",
                                    "dishwasher",
                                    "microwave",
                                    "stool",
                                    "parasol",
                                    "showcase",
                                    "menu_board",
                                    "planter",
                                    "sign",
                                    "shopping_cart",
                                    "cart_corral",
                                    "bicycle",
                                    "dock_shelter",
                                    "dock_leveler",
                                    "wheel_stop",
                                    "fire_extinguisher",
                                    "robot_arm",
                                    "mobile_robot",
                                    "pod",
                                    "sorter",
                                    "spiral_conveyor",
                                    "chute",
                                    "carton_erector",
                                    "aircraft",
                                    "jet_bridge",
                                    "baggage_carousel",
                                    "security_scanner",
                                    "metal_detector",
                                    "self_checkout",
                                    "platform_trolley",
                                    "crate_stack",
                                    "toilet_cubicle",
                                    "gable_roof",
                                    "barrel_roof",
                                    "solid"
                                  ]
                                },
                                "x": {
                                  "type": "number",
                                  "minimum": 0
                                },
                                "z": {
                                  "type": "number",
                                  "minimum": 0
                                },
                                "w": {
                                  "type": "number",
                                  "minimum": 0.02,
                                  "maximum": 500
                                },
                                "d": {
                                  "type": "number",
                                  "minimum": 0.02,
                                  "maximum": 500
                                },
                                "h": {
                                  "type": "number",
                                  "minimum": 0.01,
                                  "maximum": 50
                                },
                                "locked": {
                                  "type": "boolean"
                                },
                                "solid": {
                                  "type": "object",
                                  "properties": {
                                    "version": {
                                      "type": "number",
                                      "const": 1
                                    },
                                    "recipe": {
                                      "oneOf": [
                                        {
                                          "type": "object",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "const": "extrude"
                                            },
                                            "axis": {
                                              "type": "string",
                                              "enum": [
                                                "x",
                                                "y",
                                                "z"
                                              ]
                                            },
                                            "profile": {
                                              "minItems": 3,
                                              "maxItems": 32,
                                              "type": "array",
                                              "items": {
                                                "type": "object",
                                                "properties": {
                                                  "u": {
                                                    "type": "number",
                                                    "minimum": 0,
                                                    "maximum": 1
                                                  },
                                                  "v": {
                                                    "type": "number",
                                                    "minimum": 0,
                                                    "maximum": 1
                                                  }
                                                },
                                                "required": [
                                                  "u",
                                                  "v"
                                                ],
                                                "additionalProperties": false
                                              }
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "axis",
                                            "profile"
                                          ],
                                          "additionalProperties": false
                                        },
                                        {
                                          "type": "object",
                                          "properties": {
                                            "type": {
                                              "type": "string",
                                              "const": "revolve"
                                            },
                                            "profile": {
                                              "minItems": 3,
                                              "maxItems": 32,
                                              "type": "array",
                                              "items": {
                                                "type": "object",
                                                "properties": {
                                                  "u": {
                                                    "type": "number",
                                                    "minimum": 0,
                                                    "maximum": 1
                                                  },
                                                  "v": {
                                                    "type": "number",
                                                    "minimum": 0,
                                                    "maximum": 1
                                                  }
                                                },
                                                "required": [
                                                  "u",
                                                  "v"
                                                ],
                                                "additionalProperties": false
                                              }
                                            },
                                            "startDegrees": {
                                              "type": "number",
                                              "minimum": -180,
                                              "maximum": 180
                                            },
                                            "sweepDegrees": {
                                              "type": "number",
                                              "minimum": 0.1,
                                              "maximum": 360
                                            }
                                          },
                                          "required": [
                                            "type",
                                            "profile",
                                            "sweepDegrees"
                                          ],
                                          "additionalProperties": false
                                        }
                                      ]
                                    },
                                    "rotation": {
                                      "type": "object",
                                      "properties": {
                                        "x": {
                                          "type": "number",
                                          "minimum": -180,
                                          "maximum": 180
                                        },
                                        "y": {
                                          "type": "number",
                                          "minimum": -180,
                                          "maximum": 180
                                        },
                                        "z": {
                                          "type": "number",
                                          "minimum": -180,
                                          "maximum": 180
                                        }
                                      },
                                      "required": [
                                        "x",
                                        "y",
                                        "z"
                                      ],
                                      "additionalProperties": false
                                    },
                                    "mirror": {
                                      "type": "object",
                                      "properties": {
                                        "x": {
                                          "type": "boolean"
                                        },
                                        "y": {
                                          "type": "boolean"
                                        },
                                        "z": {
                                          "type": "boolean"
                                        }
                                      },
                                      "required": [
                                        "x",
                                        "y",
                                        "z"
                                      ],
                                      "additionalProperties": false
                                    }
                                  },
                                  "required": [
                                    "version",
                                    "recipe"
                                  ],
                                  "additionalProperties": false,
                                  "description": "Closed editable solid v1. Profile u/v are 0..1: extrusion section (axis y: x/z, axis x: z/y, axis z: x/y); revolve radius/height. w/d/h are reference dimensions. Mirror around reference-box centre, then right-handed X→Y→Z degree rotations around that centre, then outer plan rotation and placement. Partial revolutions (0.1..359.9 degrees) have closed end caps; exactly 360 is a full turn. No holes. Curves use deterministic 64 segments/full turn. blocks:false explicitly marks decoration; unsupported blocking 3D geometry cannot be used as a routing proxy."
                                },
                                "rotation": {
                                  "description": "Degrees counter-clockwise on the plan about the centre of the box; 0 when omitted. x/z/w/d stay the unrotated box. A multiple of 90° is stored as the turned box (w/d swapped for a quarter turn) without rotation, the turn of a part with a front kept in facing.",
                                  "type": "number",
                                  "exclusiveMinimum": -180,
                                  "maximum": 180
                                },
                                "passageHeading": {
                                  "description": "Physical positive normal of a rectangular door/dock_door/gate in its canonical box frame, degrees (-180,180]; effective heading adds rotation. 0 toward +x, 90 toward -z. Permission is selected per agent by oneWayPassages.",
                                  "type": "number",
                                  "exclusiveMinimum": -180,
                                  "maximum": 180
                                },
                                "facing": {
                                  "description": "Which way a part with a front (catalog front: true, e.g. chairs, vehicles, stairs, toilets) faces within its box: the quarter or half turn, degrees counter-clockwise on the plan, that a rotation of 90°, 180° or -90° left; 0 when omitted: front toward +z (south); 90 toward +x (east), 180 or -180 toward -z (north), -90 or 270 toward -x (west). Set it to turn the front without moving the box; rotation, turn and rotate turn the front with the box. Display only; other kinds ignore it.",
                                  "type": "number",
                                  "enum": [
                                    -180,
                                    -90,
                                    0,
                                    90,
                                    180,
                                    270
                                  ]
                                },
                                "y": {
                                  "description": "Elevation of the underside above the floor, metres; 0 when omitted.",
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 50
                                },
                                "footprint": {
                                  "description": "Polygon base as {x,z} vertices in the unrotated box (0..w, 0..d), 3-32, no self-crossing, spanning the whole box; the box when omitted.",
                                  "minItems": 3,
                                  "maxItems": 32,
                                  "type": "array",
                                  "items": {
                                    "type": "object",
                                    "properties": {
                                      "x": {
                                        "type": "number",
                                        "minimum": 0,
                                        "maximum": 500
                                      },
                                      "z": {
                                        "type": "number",
                                        "minimum": 0,
                                        "maximum": 500
                                      }
                                    },
                                    "required": [
                                      "x",
                                      "z"
                                    ],
                                    "additionalProperties": false
                                  }
                                },
                                "blocks": {
                                  "description": "Whether the part blocks movement; overrides the kind default.",
                                  "type": "boolean"
                                },
                                "color": {
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 16777215
                                },
                                "material": {
                                  "type": "object",
                                  "properties": {
                                    "materialId": {
                                      "type": "string",
                                      "minLength": 1,
                                      "maxLength": 40,
                                      "pattern": "^[a-zA-Z0-9_-]+$"
                                    },
                                    "override": {
                                      "type": "object",
                                      "properties": {
                                        "baseColor": {
                                          "type": "integer",
                                          "minimum": 0,
                                          "maximum": 16777215
                                        },
                                        "roughness": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1
                                        },
                                        "metalness": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1
                                        },
                                        "opacity": {
                                          "type": "number",
                                          "minimum": 0,
                                          "maximum": 1
                                        }
                                      },
                                      "additionalProperties": false
                                    }
                                  },
                                  "additionalProperties": false
                                },
                                "referenceIds": {
                                  "maxItems": 8,
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "minLength": 1,
                                    "maxLength": 40,
                                    "pattern": "^[a-zA-Z0-9_-]+$"
                                  }
                                },
                                "accent": {
                                  "description": "A second colour 0xRRGGBB for the members drawn apart: a rack's beams (its posts keep the structure colour), a sign's face, a door's leaf. Display only.",
                                  "type": "integer",
                                  "minimum": 0,
                                  "maximum": 16777215
                                },
                                "doorType": {
                                  "description": "How a door opens, for its plan symbol and 3D picture: hinged (one leaf, the default), double, sliding, automatic (two sliding leaves) or revolving. Doors and gates only; display only.",
                                  "type": "string",
                                  "enum": [
                                    "hinged",
                                    "double",
                                    "sliding",
                                    "automatic",
                                    "revolving"
                                  ]
                                },
                                "text": {
                                  "description": "Words shown on it: a sign or menu board carries them on its face, a floor marking (zone, parking, road, sidewalk, lawn, rug) painted on the floor. Display only.",
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 60
                                },
                                "symbol": {
                                  "description": "A symbol painted on a floor marking: arrow (along its length, turned with it), wheelchair (the accessible bay sign), crosswalk (zebra stripes across its length), bays (parking bay lines every 2.5 m along its length) or hatch (a no-go area). Floor markings only; display only.",
                                  "type": "string",
                                  "enum": [
                                    "arrow",
                                    "wheelchair",
                                    "crosswalk",
                                    "bays",
                                    "hatch"
                                  ]
                                },
                                "group": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 40
                                },
                                "tags": {
                                  "description": "Up to 8 tags, each /^[a-z0-9_-]{1,24}$/, for scenarios to refer to.",
                                  "maxItems": 8,
                                  "type": "array",
                                  "items": {
                                    "type": "string",
                                    "pattern": "^[a-z0-9_-]{1,24}$"
                                  }
                                },
                                "source": {
                                  "description": "Where its position and size come from: drawing (read off a plan), measured (on site) or assumed (a typical size, or hidden in the drawing). Display only: not part of any calculation.",
                                  "type": "string",
                                  "enum": [
                                    "drawing",
                                    "measured",
                                    "assumed"
                                  ]
                                },
                                "note": {
                                  "description": "A note for whoever checks the model (what was assumed, what to confirm on site), up to 300 characters; not drawn on the plan and not part of any calculation.",
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 300
                                }
                              },
                              "required": [
                                "id",
                                "label",
                                "kind",
                                "x",
                                "z",
                                "w",
                                "d",
                                "h"
                              ],
                              "additionalProperties": false
                            },
                            "bindings": {
                              "type": "object",
                              "propertyNames": {
                                "type": "string",
                                "enum": [
                                  "x",
                                  "z",
                                  "y",
                                  "w",
                                  "d",
                                  "h",
                                  "rotation",
                                  "color"
                                ]
                              },
                              "additionalProperties": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "string",
                                    "maxLength": 60
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "parameter": {
                                        "type": "string",
                                        "minLength": 1,
                                        "maxLength": 40,
                                        "pattern": "^[a-zA-Z0-9_-]+$"
                                      },
                                      "factor": {
                                        "type": "number"
                                      },
                                      "offset": {
                                        "type": "number"
                                      }
                                    },
                                    "required": [
                                      "parameter"
                                    ],
                                    "additionalProperties": false
                                  }
                                ]
                              }
                            }
                          },
                          "required": [
                            "id",
                            "type",
                            "part"
                          ],
                          "additionalProperties": false
                        },
                        {
                          "type": "object",
                          "properties": {
                            "id": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40,
                              "pattern": "^[a-zA-Z0-9_-]+$"
                            },
                            "array": {
                              "type": "object",
                              "properties": {
                                "count": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "parameter": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 40,
                                          "pattern": "^[a-zA-Z0-9_-]+$"
                                        },
                                        "factor": {
                                          "type": "number"
                                        },
                                        "offset": {
                                          "type": "number"
                                        }
                                      },
                                      "required": [
                                        "parameter"
                                      ],
                                      "additionalProperties": false
                                    }
                                  ]
                                },
                                "dx": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "parameter": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 40,
                                          "pattern": "^[a-zA-Z0-9_-]+$"
                                        },
                                        "factor": {
                                          "type": "number"
                                        },
                                        "offset": {
                                          "type": "number"
                                        }
                                      },
                                      "required": [
                                        "parameter"
                                      ],
                                      "additionalProperties": false
                                    }
                                  ]
                                },
                                "dz": {
                                  "anyOf": [
                                    {
                                      "type": "number"
                                    },
                                    {
                                      "type": "object",
                                      "properties": {
                                        "parameter": {
                                          "type": "string",
                                          "minLength": 1,
                                          "maxLength": 40,
                                          "pattern": "^[a-zA-Z0-9_-]+$"
                                        },
                                        "factor": {
                                          "type": "number"
                                        },
                                        "offset": {
                                          "type": "number"
                                        }
                                      },
                                      "required": [
                                        "parameter"
                                      ],
                                      "additionalProperties": false
                                    }
                                  ]
                                }
                              },
                              "required": [
                                "count",
                                "dx",
                                "dz"
                              ],
                              "additionalProperties": false
                            },
                            "type": {
                              "type": "string",
                              "const": "assembly"
                            },
                            "definition": {
                              "type": "string",
                              "minLength": 1,
                              "maxLength": 40,
                              "pattern": "^[a-zA-Z0-9_-]+$"
                            },
                            "parameters": {
                              "type": "object",
                              "propertyNames": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 40,
                                "pattern": "^[a-zA-Z0-9_-]+$"
                              },
                              "additionalProperties": {
                                "anyOf": [
                                  {
                                    "type": "number"
                                  },
                                  {
                                    "type": "string",
                                    "maxLength": 60
                                  },
                                  {
                                    "type": "object",
                                    "properties": {
                                      "parameter": {
                                        "type": "string",
                                        "minLength": 1,
                                        "maxLength": 40,
                                        "pattern": "^[a-zA-Z0-9_-]+$"
                                      },
                                      "factor": {
                                        "type": "number"
                                      },
                                      "offset": {
                                        "type": "number"
                                      }
                                    },
                                    "required": [
                                      "parameter"
                                    ],
                                    "additionalProperties": false
                                  }
                                ]
                              }
                            },
                            "x": {
                              "default": 0,
                              "type": "number"
                            },
                            "z": {
                              "default": 0,
                              "type": "number"
                            },
                            "y": {
                              "type": "number"
                            },
                            "rotation": {
                              "type": "number"
                            }
                          },
                          "required": [
                            "id",
                            "type",
                            "definition"
                          ],
                          "additionalProperties": false
                        }
                      ]
                    }
                  }
                },
                "required": [
                  "id",
                  "name",
                  "components"
                ],
                "additionalProperties": false
              }
            },
            "update": {
              "maxItems": 128,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]+$"
                  },
                  "defaults": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 40,
                      "pattern": "^[a-zA-Z0-9_-]+$"
                    },
                    "additionalProperties": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "string",
                          "maxLength": 60
                        }
                      ]
                    }
                  }
                },
                "required": [
                  "id",
                  "defaults"
                ],
                "additionalProperties": false
              }
            },
            "remove": {
              "maxItems": 128,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40,
                "pattern": "^[a-zA-Z0-9_-]+$"
              }
            }
          },
          "additionalProperties": false
        },
        "instances": {
          "type": "object",
          "properties": {
            "put": {
              "maxItems": 512,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]+$"
                  },
                  "definition": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]+$"
                  },
                  "x": {
                    "default": 0,
                    "type": "number"
                  },
                  "z": {
                    "default": 0,
                    "type": "number"
                  },
                  "y": {
                    "type": "number"
                  },
                  "rotation": {
                    "type": "number"
                  },
                  "parameters": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 40,
                      "pattern": "^[a-zA-Z0-9_-]+$"
                    },
                    "additionalProperties": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "string",
                          "maxLength": 60
                        }
                      ]
                    }
                  },
                  "overrides": {
                    "maxItems": 1000,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "minItems": 2,
                          "maxItems": 24,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "maxLength": 42,
                            "pattern": "^(?:[dp]:[a-zA-Z0-9_-]+|i:(?:0|[1-9][0-9]{0,2}))$"
                          }
                        },
                        "fields": {
                          "type": "object",
                          "properties": {
                            "x": {
                              "type": "number"
                            },
                            "z": {
                              "type": "number"
                            },
                            "y": {
                              "type": "number"
                            },
                            "w": {
                              "type": "number"
                            },
                            "d": {
                              "type": "number"
                            },
                            "h": {
                              "type": "number"
                            },
                            "rotation": {
                              "type": "number"
                            },
                            "color": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 16777215
                            },
                            "material": {
                              "type": "object",
                              "properties": {
                                "materialId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 40,
                                  "pattern": "^[a-zA-Z0-9_-]+$"
                                },
                                "override": {
                                  "type": "object",
                                  "properties": {
                                    "baseColor": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 16777215
                                    },
                                    "roughness": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 1
                                    },
                                    "metalness": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 1
                                    },
                                    "opacity": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 1
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "additionalProperties": false
                            },
                            "referenceIds": {
                              "maxItems": 8,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 40,
                                "pattern": "^[a-zA-Z0-9_-]+$"
                              }
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "path",
                        "fields"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "id",
                  "definition"
                ],
                "additionalProperties": false
              }
            },
            "update": {
              "maxItems": 512,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]+$"
                  },
                  "x": {
                    "type": "number"
                  },
                  "z": {
                    "type": "number"
                  },
                  "y": {
                    "type": "number"
                  },
                  "rotation": {
                    "type": "number"
                  },
                  "parameters": {
                    "type": "object",
                    "propertyNames": {
                      "type": "string",
                      "minLength": 1,
                      "maxLength": 40,
                      "pattern": "^[a-zA-Z0-9_-]+$"
                    },
                    "additionalProperties": {
                      "anyOf": [
                        {
                          "type": "number"
                        },
                        {
                          "type": "string",
                          "maxLength": 60
                        }
                      ]
                    }
                  },
                  "overrides": {
                    "maxItems": 1000,
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "path": {
                          "minItems": 2,
                          "maxItems": 24,
                          "type": "array",
                          "items": {
                            "type": "string",
                            "maxLength": 42,
                            "pattern": "^(?:[dp]:[a-zA-Z0-9_-]+|i:(?:0|[1-9][0-9]{0,2}))$"
                          }
                        },
                        "fields": {
                          "type": "object",
                          "properties": {
                            "x": {
                              "type": "number"
                            },
                            "z": {
                              "type": "number"
                            },
                            "y": {
                              "type": "number"
                            },
                            "w": {
                              "type": "number"
                            },
                            "d": {
                              "type": "number"
                            },
                            "h": {
                              "type": "number"
                            },
                            "rotation": {
                              "type": "number"
                            },
                            "color": {
                              "type": "integer",
                              "minimum": 0,
                              "maximum": 16777215
                            },
                            "material": {
                              "type": "object",
                              "properties": {
                                "materialId": {
                                  "type": "string",
                                  "minLength": 1,
                                  "maxLength": 40,
                                  "pattern": "^[a-zA-Z0-9_-]+$"
                                },
                                "override": {
                                  "type": "object",
                                  "properties": {
                                    "baseColor": {
                                      "type": "integer",
                                      "minimum": 0,
                                      "maximum": 16777215
                                    },
                                    "roughness": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 1
                                    },
                                    "metalness": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 1
                                    },
                                    "opacity": {
                                      "type": "number",
                                      "minimum": 0,
                                      "maximum": 1
                                    }
                                  },
                                  "additionalProperties": false
                                }
                              },
                              "additionalProperties": false
                            },
                            "referenceIds": {
                              "maxItems": 8,
                              "type": "array",
                              "items": {
                                "type": "string",
                                "minLength": 1,
                                "maxLength": 40,
                                "pattern": "^[a-zA-Z0-9_-]+$"
                              }
                            }
                          },
                          "additionalProperties": false
                        }
                      },
                      "required": [
                        "path",
                        "fields"
                      ],
                      "additionalProperties": false
                    }
                  }
                },
                "required": [
                  "id"
                ],
                "additionalProperties": false
              }
            },
            "remove": {
              "maxItems": 512,
              "type": "array",
              "items": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40,
                "pattern": "^[a-zA-Z0-9_-]+$"
              }
            }
          },
          "additionalProperties": false
        },
        "detach": {
          "maxItems": 512,
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40,
            "pattern": "^[a-zA-Z0-9_-]+$"
          }
        }
      },
      "additionalProperties": false
    },
    "expectedRevision": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "Use revision from the most recent get_space or successful edit."
    },
    "result": {
      "default": "scene",
      "description": "What the result gives of the edited floor: scene (every part, with the IDs the edit made) or brief (only the IDs added, removed and changed, and its checks), for large floors.",
      "type": "string",
      "enum": [
        "scene",
        "brief"
      ]
    },
    "preview": {
      "default": false,
      "description": "Check the proposed edit without applying it: returns the proposed floor and geometry issues. If it meets the user’s requirements, repeat with preview=false and the latest revision to apply it.",
      "type": "boolean"
    },
    "floor": {
      "description": "Floor id (get_space.building.floors) to edit; the active floor when omitted. Another floor is edited in place and stays inactive.",
      "type": "string",
      "minLength": 1,
      "maxLength": 40
    },
    "floors": {
      "description": "The same edit on several floors at once, instead of floor: typical floors copied from one another share part IDs, so an update of 'corridor' widens it on every storey listed. All of them change or none, as one Undo step; the result gives each floor's checks. Not with preview.",
      "minItems": 1,
      "maxItems": 40,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 40
      }
    },
    "skipMissing": {
      "default": false,
      "description": "With floors: on a floor that lacks a part the edit names, leave out what names it (an update, a removal, a move, an opening on that wall; the ID from a list) instead of refusing the whole edit, and list the IDs left out per floor. For storeys whose parts differ (a ground floor with a lobby under typical floors).",
      "type": "boolean"
    },
    "room": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "minLength": 1,
          "maxLength": 80
        },
        "kind": {
          "type": "string",
          "enum": [
            "office",
            "facility",
            "home",
            "factory"
          ]
        },
        "width": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 500
        },
        "depth": {
          "type": "number",
          "minimum": 0.1,
          "maximum": 500
        },
        "outline": {
          "description": "A new floor boundary (see create_space.outline); [] returns to the width × depth rectangle (null does too). The holes move with it; holes given in the same edit are in the same frame as the outline and move with it too. Resizing an outlined floor with width/depth scales the outline with it; its holes, like its parts, keep their places unless scaleContents (a site grown to the south or east keeps the holes under its buildings).",
          "anyOf": [
            {
              "maxItems": 64,
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "minimum": -500,
                    "maximum": 500
                  },
                  "z": {
                    "type": "number",
                    "minimum": -500,
                    "maximum": 500
                  }
                },
                "required": [
                  "x",
                  "z"
                ],
                "additionalProperties": false
              }
            },
            {
              "type": "null"
            }
          ]
        },
        "holes": {
          "maxItems": 32,
          "type": "array",
          "items": {
            "minItems": 3,
            "maxItems": 64,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "number",
                  "minimum": -500,
                  "maximum": 500
                },
                "z": {
                  "type": "number",
                  "minimum": -500,
                  "maximum": 500
                }
              },
              "required": [
                "x",
                "z"
              ],
              "additionalProperties": false
            }
          },
          "description": "Openings in the floor (an atrium, a courtyard), each a simple polygon inside the outline, apart from each other. [] removes them."
        },
        "scaleConfirmed": {
          "description": "Ignored: only the user confirms dimensions, with the Measured box in the editor. A new or resized space is unconfirmed.",
          "type": "boolean"
        }
      },
      "additionalProperties": false
    },
    "scaleContents": {
      "default": false,
      "description": "When resizing, proportionally scale floor positions and footprints; heights stay unchanged. Otherwise only room bounds change.",
      "type": "boolean"
    },
    "add": {
      "default": [],
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "wall",
              "column",
              "zone",
              "desk",
              "table",
              "chair",
              "sofa",
              "cabinet",
              "shelf",
              "display",
              "counter",
              "rack",
              "pallet",
              "machine",
              "booth",
              "stage",
              "bed",
              "plant",
              "block",
              "partition",
              "door",
              "window",
              "stairs",
              "elevator",
              "escalator",
              "round_table",
              "bookshelf",
              "locker",
              "whiteboard",
              "wardrobe",
              "kitchen",
              "fridge",
              "rug",
              "checkout",
              "fridge_case",
              "clothes_rack",
              "kiosk",
              "conveyor",
              "workbench",
              "roll_cage",
              "container",
              "tank",
              "forklift",
              "charger",
              "dock_door",
              "seating_row",
              "podium",
              "screen",
              "barrier",
              "building",
              "parking",
              "road",
              "sidewalk",
              "lawn",
              "tree",
              "car",
              "truck",
              "fence",
              "gate",
              "bench",
              "pole",
              "person",
              "toilet",
              "washbasin",
              "urinal",
              "atm",
              "pos_terminal",
              "coffee_machine",
              "oven",
              "dishwasher",
              "microwave",
              "stool",
              "parasol",
              "showcase",
              "menu_board",
              "planter",
              "sign",
              "shopping_cart",
              "cart_corral",
              "bicycle",
              "dock_shelter",
              "dock_leveler",
              "wheel_stop",
              "fire_extinguisher",
              "robot_arm",
              "mobile_robot",
              "pod",
              "sorter",
              "spiral_conveyor",
              "chute",
              "carton_erector",
              "aircraft",
              "jet_bridge",
              "baggage_carousel",
              "security_scanner",
              "metal_detector",
              "self_checkout",
              "platform_trolley",
              "crate_stack",
              "toilet_cubicle",
              "gable_roof",
              "barrel_roof",
              "solid"
            ]
          },
          "locked": {
            "type": "boolean"
          },
          "solid": {
            "type": "object",
            "properties": {
              "version": {
                "type": "number",
                "const": 1
              },
              "recipe": {
                "oneOf": [
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "extrude"
                      },
                      "axis": {
                        "type": "string",
                        "enum": [
                          "x",
                          "y",
                          "z"
                        ]
                      },
                      "profile": {
                        "minItems": 3,
                        "maxItems": 32,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "u": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 1
                            },
                            "v": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 1
                            }
                          },
                          "required": [
                            "u",
                            "v"
                          ],
                          "additionalProperties": false
                        }
                      }
                    },
                    "required": [
                      "type",
                      "axis",
                      "profile"
                    ],
                    "additionalProperties": false
                  },
                  {
                    "type": "object",
                    "properties": {
                      "type": {
                        "type": "string",
                        "const": "revolve"
                      },
                      "profile": {
                        "minItems": 3,
                        "maxItems": 32,
                        "type": "array",
                        "items": {
                          "type": "object",
                          "properties": {
                            "u": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 1
                            },
                            "v": {
                              "type": "number",
                              "minimum": 0,
                              "maximum": 1
                            }
                          },
                          "required": [
                            "u",
                            "v"
                          ],
                          "additionalProperties": false
                        }
                      },
                      "startDegrees": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      },
                      "sweepDegrees": {
                        "type": "number",
                        "minimum": 0.1,
                        "maximum": 360
                      }
                    },
                    "required": [
                      "type",
                      "profile",
                      "sweepDegrees"
                    ],
                    "additionalProperties": false
                  }
                ]
              },
              "rotation": {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "number",
                    "minimum": -180,
                    "maximum": 180
                  },
                  "y": {
                    "type": "number",
                    "minimum": -180,
                    "maximum": 180
                  },
                  "z": {
                    "type": "number",
                    "minimum": -180,
                    "maximum": 180
                  }
                },
                "required": [
                  "x",
                  "y",
                  "z"
                ],
                "additionalProperties": false
              },
              "mirror": {
                "type": "object",
                "properties": {
                  "x": {
                    "type": "boolean"
                  },
                  "y": {
                    "type": "boolean"
                  },
                  "z": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "x",
                  "y",
                  "z"
                ],
                "additionalProperties": false
              }
            },
            "required": [
              "version",
              "recipe"
            ],
            "additionalProperties": false,
            "description": "Closed editable solid v1. Profile u/v are 0..1: extrusion section (axis y: x/z, axis x: z/y, axis z: x/y); revolve radius/height. w/d/h are reference dimensions. Mirror around reference-box centre, then right-handed X→Y→Z degree rotations around that centre, then outer plan rotation and placement. Partial revolutions (0.1..359.9 degrees) have closed end caps; exactly 360 is a full turn. No holes. Curves use deterministic 64 segments/full turn. blocks:false explicitly marks decoration; unsupported blocking 3D geometry cannot be used as a routing proxy."
          },
          "rotation": {
            "description": "Degrees counter-clockwise on the plan about the centre of the box; 0 when omitted. x/z/w/d stay the unrotated box. A multiple of 90° is stored as the turned box (w/d swapped for a quarter turn) without rotation, the turn of a part with a front kept in facing.",
            "type": "number",
            "exclusiveMinimum": -180,
            "maximum": 180
          },
          "passageHeading": {
            "description": "Physical positive normal of a rectangular door/dock_door/gate in its canonical box frame, degrees (-180,180]; effective heading adds rotation. 0 toward +x, 90 toward -z. Permission is selected per agent by oneWayPassages.",
            "type": "number",
            "exclusiveMinimum": -180,
            "maximum": 180
          },
          "facing": {
            "description": "Which way a part with a front (catalog front: true, e.g. chairs, vehicles, stairs, toilets) faces within its box: the quarter or half turn, degrees counter-clockwise on the plan, that a rotation of 90°, 180° or -90° left; 0 when omitted: front toward +z (south); 90 toward +x (east), 180 or -180 toward -z (north), -90 or 270 toward -x (west). Set it to turn the front without moving the box; rotation, turn and rotate turn the front with the box. Display only; other kinds ignore it.",
            "type": "number",
            "enum": [
              -180,
              -90,
              0,
              90,
              180,
              270
            ]
          },
          "y": {
            "description": "Elevation of the underside above the floor, metres; 0 when omitted.",
            "type": "number",
            "minimum": 0,
            "maximum": 50
          },
          "footprint": {
            "description": "Polygon base as {x,z} vertices in the unrotated box (0..w, 0..d), 3-32, no self-crossing, spanning the whole box; the box when omitted.",
            "minItems": 3,
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 500
                },
                "z": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 500
                }
              },
              "required": [
                "x",
                "z"
              ],
              "additionalProperties": false
            }
          },
          "blocks": {
            "description": "Whether the part blocks movement; overrides the kind default.",
            "type": "boolean"
          },
          "color": {
            "type": "integer",
            "minimum": 0,
            "maximum": 16777215
          },
          "material": {
            "type": "object",
            "properties": {
              "materialId": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40,
                "pattern": "^[a-zA-Z0-9_-]+$"
              },
              "override": {
                "type": "object",
                "properties": {
                  "baseColor": {
                    "type": "integer",
                    "minimum": 0,
                    "maximum": 16777215
                  },
                  "roughness": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "metalness": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  },
                  "opacity": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 1
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "referenceIds": {
            "maxItems": 8,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 40,
              "pattern": "^[a-zA-Z0-9_-]+$"
            }
          },
          "accent": {
            "description": "A second colour 0xRRGGBB for the members drawn apart: a rack's beams (its posts keep the structure colour), a sign's face, a door's leaf. Display only.",
            "type": "integer",
            "minimum": 0,
            "maximum": 16777215
          },
          "doorType": {
            "description": "How a door opens, for its plan symbol and 3D picture: hinged (one leaf, the default), double, sliding, automatic (two sliding leaves) or revolving. Doors and gates only; display only.",
            "type": "string",
            "enum": [
              "hinged",
              "double",
              "sliding",
              "automatic",
              "revolving"
            ]
          },
          "text": {
            "description": "Words shown on it: a sign or menu board carries them on its face, a floor marking (zone, parking, road, sidewalk, lawn, rug) painted on the floor. Display only.",
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "symbol": {
            "description": "A symbol painted on a floor marking: arrow (along its length, turned with it), wheelchair (the accessible bay sign), crosswalk (zebra stripes across its length), bays (parking bay lines every 2.5 m along its length) or hatch (a no-go area). Floor markings only; display only.",
            "type": "string",
            "enum": [
              "arrow",
              "wheelchair",
              "crosswalk",
              "bays",
              "hatch"
            ]
          },
          "group": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "tags": {
            "description": "Up to 8 tags, each /^[a-z0-9_-]{1,24}$/, for scenarios to refer to.",
            "maxItems": 8,
            "type": "array",
            "items": {
              "type": "string",
              "pattern": "^[a-z0-9_-]{1,24}$"
            }
          },
          "source": {
            "description": "Where its position and size come from: drawing (read off a plan), measured (on site) or assumed (a typical size, or hidden in the drawing). Display only: not part of any calculation.",
            "type": "string",
            "enum": [
              "drawing",
              "measured",
              "assumed"
            ]
          },
          "note": {
            "description": "A note for whoever checks the model (what was assumed, what to confirm on site), up to 300 characters; not drawn on the plan and not part of any calculation.",
            "type": "string",
            "minLength": 1,
            "maxLength": 300
          },
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "x": {
            "type": "number",
            "minimum": 0
          },
          "z": {
            "type": "number",
            "minimum": 0
          },
          "w": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 500
          },
          "d": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 500
          },
          "h": {
            "type": "number",
            "minimum": 0.01,
            "maximum": 50
          },
          "polygon": {
            "description": "Instead of x/z/w/d: the corners of the part on the floor, in order, metres (3-32, no self-crossing); x, z, w, d and the footprint are derived from them, unturned.",
            "minItems": 3,
            "maxItems": 32,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 500
                },
                "z": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 500
                }
              },
              "required": [
                "x",
                "z"
              ],
              "additionalProperties": false
            }
          }
        },
        "required": [
          "kind"
        ],
        "additionalProperties": false,
        "description": "A prepared part. Give kind and the minimum x/z corner; omit w/d/h to use the part size listed in get_space.parts. Or give polygon (corners on the floor) instead of x/z/w/d for a part of any outline."
      }
    },
    "place": {
      "default": [],
      "description": "Place catalog items, including complete sets, in this same atomic edit. x/z is the minimum corner of the complete rotated bounds, in metres. Sizes are preserved; oversized sets are rejected. Sets get a new group unless group is specified. Use preview=true to check the proposal first.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "item": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60,
            "description": "Catalog ID from get_part_catalog: a basic part, size preset, or reusable set."
          },
          "x": {
            "type": "number",
            "minimum": 0,
            "maximum": 500
          },
          "z": {
            "type": "number",
            "minimum": 0,
            "maximum": 500
          },
          "rotation": {
            "type": "number",
            "minimum": -180,
            "maximum": 180
          },
          "y": {
            "type": "number",
            "minimum": 0,
            "maximum": 50
          },
          "group": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          }
        },
        "required": [
          "item",
          "x",
          "z"
        ],
        "additionalProperties": false
      }
    },
    "addArray": {
      "default": [],
      "description": "Place prepared parts in a two-direction array in one edit; supports boxes and polygon prisms. Each cell gets a unique ID.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "part": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "wall",
                  "column",
                  "zone",
                  "desk",
                  "table",
                  "chair",
                  "sofa",
                  "cabinet",
                  "shelf",
                  "display",
                  "counter",
                  "rack",
                  "pallet",
                  "machine",
                  "booth",
                  "stage",
                  "bed",
                  "plant",
                  "block",
                  "partition",
                  "door",
                  "window",
                  "stairs",
                  "elevator",
                  "escalator",
                  "round_table",
                  "bookshelf",
                  "locker",
                  "whiteboard",
                  "wardrobe",
                  "kitchen",
                  "fridge",
                  "rug",
                  "checkout",
                  "fridge_case",
                  "clothes_rack",
                  "kiosk",
                  "conveyor",
                  "workbench",
                  "roll_cage",
                  "container",
                  "tank",
                  "forklift",
                  "charger",
                  "dock_door",
                  "seating_row",
                  "podium",
                  "screen",
                  "barrier",
                  "building",
                  "parking",
                  "road",
                  "sidewalk",
                  "lawn",
                  "tree",
                  "car",
                  "truck",
                  "fence",
                  "gate",
                  "bench",
                  "pole",
                  "person",
                  "toilet",
                  "washbasin",
                  "urinal",
                  "atm",
                  "pos_terminal",
                  "coffee_machine",
                  "oven",
                  "dishwasher",
                  "microwave",
                  "stool",
                  "parasol",
                  "showcase",
                  "menu_board",
                  "planter",
                  "sign",
                  "shopping_cart",
                  "cart_corral",
                  "bicycle",
                  "dock_shelter",
                  "dock_leveler",
                  "wheel_stop",
                  "fire_extinguisher",
                  "robot_arm",
                  "mobile_robot",
                  "pod",
                  "sorter",
                  "spiral_conveyor",
                  "chute",
                  "carton_erector",
                  "aircraft",
                  "jet_bridge",
                  "baggage_carousel",
                  "security_scanner",
                  "metal_detector",
                  "self_checkout",
                  "platform_trolley",
                  "crate_stack",
                  "toilet_cubicle",
                  "gable_roof",
                  "barrel_roof",
                  "solid"
                ]
              },
              "locked": {
                "type": "boolean"
              },
              "solid": {
                "type": "object",
                "properties": {
                  "version": {
                    "type": "number",
                    "const": 1
                  },
                  "recipe": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "const": "extrude"
                          },
                          "axis": {
                            "type": "string",
                            "enum": [
                              "x",
                              "y",
                              "z"
                            ]
                          },
                          "profile": {
                            "minItems": 3,
                            "maxItems": 32,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "u": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "v": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                }
                              },
                              "required": [
                                "u",
                                "v"
                              ],
                              "additionalProperties": false
                            }
                          }
                        },
                        "required": [
                          "type",
                          "axis",
                          "profile"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "const": "revolve"
                          },
                          "profile": {
                            "minItems": 3,
                            "maxItems": 32,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "u": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "v": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                }
                              },
                              "required": [
                                "u",
                                "v"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "startDegrees": {
                            "type": "number",
                            "minimum": -180,
                            "maximum": 180
                          },
                          "sweepDegrees": {
                            "type": "number",
                            "minimum": 0.1,
                            "maximum": 360
                          }
                        },
                        "required": [
                          "type",
                          "profile",
                          "sweepDegrees"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "rotation": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      },
                      "y": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      },
                      "z": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      }
                    },
                    "required": [
                      "x",
                      "y",
                      "z"
                    ],
                    "additionalProperties": false
                  },
                  "mirror": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "boolean"
                      },
                      "y": {
                        "type": "boolean"
                      },
                      "z": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "x",
                      "y",
                      "z"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "version",
                  "recipe"
                ],
                "additionalProperties": false,
                "description": "Closed editable solid v1. Profile u/v are 0..1: extrusion section (axis y: x/z, axis x: z/y, axis z: x/y); revolve radius/height. w/d/h are reference dimensions. Mirror around reference-box centre, then right-handed X→Y→Z degree rotations around that centre, then outer plan rotation and placement. Partial revolutions (0.1..359.9 degrees) have closed end caps; exactly 360 is a full turn. No holes. Curves use deterministic 64 segments/full turn. blocks:false explicitly marks decoration; unsupported blocking 3D geometry cannot be used as a routing proxy."
              },
              "rotation": {
                "description": "Degrees counter-clockwise on the plan about the centre of the box; 0 when omitted. x/z/w/d stay the unrotated box. A multiple of 90° is stored as the turned box (w/d swapped for a quarter turn) without rotation, the turn of a part with a front kept in facing.",
                "type": "number",
                "exclusiveMinimum": -180,
                "maximum": 180
              },
              "passageHeading": {
                "description": "Physical positive normal of a rectangular door/dock_door/gate in its canonical box frame, degrees (-180,180]; effective heading adds rotation. 0 toward +x, 90 toward -z. Permission is selected per agent by oneWayPassages.",
                "type": "number",
                "exclusiveMinimum": -180,
                "maximum": 180
              },
              "facing": {
                "description": "Which way a part with a front (catalog front: true, e.g. chairs, vehicles, stairs, toilets) faces within its box: the quarter or half turn, degrees counter-clockwise on the plan, that a rotation of 90°, 180° or -90° left; 0 when omitted: front toward +z (south); 90 toward +x (east), 180 or -180 toward -z (north), -90 or 270 toward -x (west). Set it to turn the front without moving the box; rotation, turn and rotate turn the front with the box. Display only; other kinds ignore it.",
                "type": "number",
                "enum": [
                  -180,
                  -90,
                  0,
                  90,
                  180,
                  270
                ]
              },
              "y": {
                "description": "Elevation of the underside above the floor, metres; 0 when omitted.",
                "type": "number",
                "minimum": 0,
                "maximum": 50
              },
              "footprint": {
                "description": "Polygon base as {x,z} vertices in the unrotated box (0..w, 0..d), 3-32, no self-crossing, spanning the whole box; the box when omitted.",
                "minItems": 3,
                "maxItems": 32,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "x": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 500
                    },
                    "z": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 500
                    }
                  },
                  "required": [
                    "x",
                    "z"
                  ],
                  "additionalProperties": false
                }
              },
              "blocks": {
                "description": "Whether the part blocks movement; overrides the kind default.",
                "type": "boolean"
              },
              "color": {
                "type": "integer",
                "minimum": 0,
                "maximum": 16777215
              },
              "material": {
                "type": "object",
                "properties": {
                  "materialId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]+$"
                  },
                  "override": {
                    "type": "object",
                    "properties": {
                      "baseColor": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 16777215
                      },
                      "roughness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "metalness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "opacity": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              "referenceIds": {
                "maxItems": 8,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40,
                  "pattern": "^[a-zA-Z0-9_-]+$"
                }
              },
              "accent": {
                "description": "A second colour 0xRRGGBB for the members drawn apart: a rack's beams (its posts keep the structure colour), a sign's face, a door's leaf. Display only.",
                "type": "integer",
                "minimum": 0,
                "maximum": 16777215
              },
              "doorType": {
                "description": "How a door opens, for its plan symbol and 3D picture: hinged (one leaf, the default), double, sliding, automatic (two sliding leaves) or revolving. Doors and gates only; display only.",
                "type": "string",
                "enum": [
                  "hinged",
                  "double",
                  "sliding",
                  "automatic",
                  "revolving"
                ]
              },
              "text": {
                "description": "Words shown on it: a sign or menu board carries them on its face, a floor marking (zone, parking, road, sidewalk, lawn, rug) painted on the floor. Display only.",
                "type": "string",
                "minLength": 1,
                "maxLength": 60
              },
              "symbol": {
                "description": "A symbol painted on a floor marking: arrow (along its length, turned with it), wheelchair (the accessible bay sign), crosswalk (zebra stripes across its length), bays (parking bay lines every 2.5 m along its length) or hatch (a no-go area). Floor markings only; display only.",
                "type": "string",
                "enum": [
                  "arrow",
                  "wheelchair",
                  "crosswalk",
                  "bays",
                  "hatch"
                ]
              },
              "group": {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              "tags": {
                "description": "Up to 8 tags, each /^[a-z0-9_-]{1,24}$/, for scenarios to refer to.",
                "maxItems": 8,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9_-]{1,24}$"
                }
              },
              "source": {
                "description": "Where its position and size come from: drawing (read off a plan), measured (on site) or assumed (a typical size, or hidden in the drawing). Display only: not part of any calculation.",
                "type": "string",
                "enum": [
                  "drawing",
                  "measured",
                  "assumed"
                ]
              },
              "note": {
                "description": "A note for whoever checks the model (what was assumed, what to confirm on site), up to 300 characters; not drawn on the plan and not part of any calculation.",
                "type": "string",
                "minLength": 1,
                "maxLength": 300
              },
              "id": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60
              },
              "label": {
                "type": "string",
                "minLength": 1,
                "maxLength": 60
              },
              "x": {
                "type": "number",
                "minimum": 0
              },
              "z": {
                "type": "number",
                "minimum": 0
              },
              "w": {
                "type": "number",
                "minimum": 0.02,
                "maximum": 500
              },
              "d": {
                "type": "number",
                "minimum": 0.02,
                "maximum": 500
              },
              "h": {
                "type": "number",
                "minimum": 0.01,
                "maximum": 50
              },
              "polygon": {
                "description": "Instead of x/z/w/d: the corners of the part on the floor, in order, metres (3-32, no self-crossing); x, z, w, d and the footprint are derived from them, unturned.",
                "minItems": 3,
                "maxItems": 32,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "x": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 500
                    },
                    "z": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 500
                    }
                  },
                  "required": [
                    "x",
                    "z"
                  ],
                  "additionalProperties": false
                }
              }
            },
            "required": [
              "kind"
            ],
            "additionalProperties": false,
            "description": "The part to repeat. Omit part.id: each cell needs a distinct ID. Set idPrefix on the array to choose stable IDs. Give x/z or polygon as for an ordinary part."
          },
          "rows": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "columns": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "rowStep": {
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              },
              "dz": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              }
            },
            "required": [
              "dx",
              "dz"
            ],
            "additionalProperties": false,
            "description": "Metres from one row or column to the next; diagonal steps are allowed."
          },
          "columnStep": {
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              },
              "dz": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              }
            },
            "required": [
              "dx",
              "dz"
            ],
            "additionalProperties": false,
            "description": "Metres from one row or column to the next; diagonal steps are allowed."
          },
          "idPrefix": {
            "description": "IDs of the cells, row by row: prefix-1, prefix-2, …; generated when omitted.",
            "type": "string",
            "minLength": 1,
            "maxLength": 50,
            "pattern": "^[A-Za-z0-9_-]+$"
          }
        },
        "required": [
          "part",
          "rows",
          "columns",
          "rowStep",
          "columnStep"
        ],
        "additionalProperties": false,
        "description": "Place a part at every row/column offset from part.x/z (or shift every corner of part.polygon). The first cell is at the supplied position; rows and columns include it. IDs are generated, or idPrefix-1, idPrefix-2, … row by row. In part.label, {n} becomes the cell number and {row}/{column} its row and column (from 1): \"Shelf {n}\", \"Seat {row}-{column}\"."
      }
    },
    "update": {
      "default": [],
      "description": "Change fields of existing objects by ID. null takes passageHeading, rotation, facing, y, footprint, blocks, color, group or tags back to the default, and footprint [] makes a polygon part its box again. A rotation given sets the whole turn of a part with a front, its facing included (rotation 180 again leaves it as it is). Objects with locked: true stay unchanged unless the same update sets locked: false (only when the user asks).",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "kind": {
            "type": "string",
            "enum": [
              "wall",
              "column",
              "zone",
              "desk",
              "table",
              "chair",
              "sofa",
              "cabinet",
              "shelf",
              "display",
              "counter",
              "rack",
              "pallet",
              "machine",
              "booth",
              "stage",
              "bed",
              "plant",
              "block",
              "partition",
              "door",
              "window",
              "stairs",
              "elevator",
              "escalator",
              "round_table",
              "bookshelf",
              "locker",
              "whiteboard",
              "wardrobe",
              "kitchen",
              "fridge",
              "rug",
              "checkout",
              "fridge_case",
              "clothes_rack",
              "kiosk",
              "conveyor",
              "workbench",
              "roll_cage",
              "container",
              "tank",
              "forklift",
              "charger",
              "dock_door",
              "seating_row",
              "podium",
              "screen",
              "barrier",
              "building",
              "parking",
              "road",
              "sidewalk",
              "lawn",
              "tree",
              "car",
              "truck",
              "fence",
              "gate",
              "bench",
              "pole",
              "person",
              "toilet",
              "washbasin",
              "urinal",
              "atm",
              "pos_terminal",
              "coffee_machine",
              "oven",
              "dishwasher",
              "microwave",
              "stool",
              "parasol",
              "showcase",
              "menu_board",
              "planter",
              "sign",
              "shopping_cart",
              "cart_corral",
              "bicycle",
              "dock_shelter",
              "dock_leveler",
              "wheel_stop",
              "fire_extinguisher",
              "robot_arm",
              "mobile_robot",
              "pod",
              "sorter",
              "spiral_conveyor",
              "chute",
              "carton_erector",
              "aircraft",
              "jet_bridge",
              "baggage_carousel",
              "security_scanner",
              "metal_detector",
              "self_checkout",
              "platform_trolley",
              "crate_stack",
              "toilet_cubicle",
              "gable_roof",
              "barrel_roof",
              "solid"
            ]
          },
          "x": {
            "type": "number",
            "minimum": 0
          },
          "z": {
            "type": "number",
            "minimum": 0
          },
          "w": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 500
          },
          "d": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 500
          },
          "h": {
            "type": "number",
            "minimum": 0.01,
            "maximum": 50
          },
          "locked": {
            "type": "boolean"
          },
          "solid": {
            "description": "null removes the recipe; change kind away from solid in the same update.",
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "version": {
                    "type": "number",
                    "const": 1
                  },
                  "recipe": {
                    "oneOf": [
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "const": "extrude"
                          },
                          "axis": {
                            "type": "string",
                            "enum": [
                              "x",
                              "y",
                              "z"
                            ]
                          },
                          "profile": {
                            "minItems": 3,
                            "maxItems": 32,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "u": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "v": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                }
                              },
                              "required": [
                                "u",
                                "v"
                              ],
                              "additionalProperties": false
                            }
                          }
                        },
                        "required": [
                          "type",
                          "axis",
                          "profile"
                        ],
                        "additionalProperties": false
                      },
                      {
                        "type": "object",
                        "properties": {
                          "type": {
                            "type": "string",
                            "const": "revolve"
                          },
                          "profile": {
                            "minItems": 3,
                            "maxItems": 32,
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "u": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                },
                                "v": {
                                  "type": "number",
                                  "minimum": 0,
                                  "maximum": 1
                                }
                              },
                              "required": [
                                "u",
                                "v"
                              ],
                              "additionalProperties": false
                            }
                          },
                          "startDegrees": {
                            "type": "number",
                            "minimum": -180,
                            "maximum": 180
                          },
                          "sweepDegrees": {
                            "type": "number",
                            "minimum": 0.1,
                            "maximum": 360
                          }
                        },
                        "required": [
                          "type",
                          "profile",
                          "sweepDegrees"
                        ],
                        "additionalProperties": false
                      }
                    ]
                  },
                  "rotation": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      },
                      "y": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      },
                      "z": {
                        "type": "number",
                        "minimum": -180,
                        "maximum": 180
                      }
                    },
                    "required": [
                      "x",
                      "y",
                      "z"
                    ],
                    "additionalProperties": false
                  },
                  "mirror": {
                    "type": "object",
                    "properties": {
                      "x": {
                        "type": "boolean"
                      },
                      "y": {
                        "type": "boolean"
                      },
                      "z": {
                        "type": "boolean"
                      }
                    },
                    "required": [
                      "x",
                      "y",
                      "z"
                    ],
                    "additionalProperties": false
                  }
                },
                "required": [
                  "version",
                  "recipe"
                ],
                "additionalProperties": false,
                "description": "Closed editable solid v1. Profile u/v are 0..1: extrusion section (axis y: x/z, axis x: z/y, axis z: x/y); revolve radius/height. w/d/h are reference dimensions. Mirror around reference-box centre, then right-handed X→Y→Z degree rotations around that centre, then outer plan rotation and placement. Partial revolutions (0.1..359.9 degrees) have closed end caps; exactly 360 is a full turn. No holes. Curves use deterministic 64 segments/full turn. blocks:false explicitly marks decoration; unsupported blocking 3D geometry cannot be used as a routing proxy."
              },
              {
                "type": "null"
              }
            ]
          },
          "rotation": {
            "description": "Degrees counter-clockwise on the plan about the centre of the box; 0 when omitted. x/z/w/d stay the unrotated box. A multiple of 90° is stored as the turned box (w/d swapped for a quarter turn) without rotation, the turn of a part with a front kept in facing. null turns it back to 0.",
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": -180,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          },
          "passageHeading": {
            "description": "Physical positive normal of a rectangular door/dock_door/gate in its canonical box frame, degrees (-180,180]; effective heading adds rotation. 0 toward +x, 90 toward -z. Permission is selected per agent by oneWayPassages. null removes the physical directional normal.",
            "anyOf": [
              {
                "type": "number",
                "exclusiveMinimum": -180,
                "maximum": 180
              },
              {
                "type": "null"
              }
            ]
          },
          "facing": {
            "description": "Which way a part with a front (catalog front: true, e.g. chairs, vehicles, stairs, toilets) faces within its box: the quarter or half turn, degrees counter-clockwise on the plan, that a rotation of 90°, 180° or -90° left; 0 when omitted: front toward +z (south); 90 toward +x (east), 180 or -180 toward -z (north), -90 or 270 toward -x (west). Set it to turn the front without moving the box; rotation, turn and rotate turn the front with the box. Display only; other kinds ignore it. null faces the part the way its kind is drawn.",
            "anyOf": [
              {
                "type": "number",
                "enum": [
                  -180,
                  -90,
                  0,
                  90,
                  180,
                  270
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "y": {
            "description": "Elevation of the underside above the floor, metres; 0 when omitted. null puts it back on the floor.",
            "anyOf": [
              {
                "type": "number",
                "minimum": 0,
                "maximum": 50
              },
              {
                "type": "null"
              }
            ]
          },
          "footprint": {
            "description": "Polygon base as {x,z} vertices in the unrotated box (0..w, 0..d), 3-32, no self-crossing, spanning the whole box; the box when omitted. [] or null makes the part its plain box again.",
            "anyOf": [
              {
                "maxItems": 32,
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "x": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 500
                    },
                    "z": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 500
                    }
                  },
                  "required": [
                    "x",
                    "z"
                  ],
                  "additionalProperties": false
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "blocks": {
            "description": "Whether the part blocks movement; overrides the kind default. null returns to the kind's default.",
            "type": [
              "boolean",
              "null"
            ]
          },
          "color": {
            "description": "null returns to the kind's colour.",
            "anyOf": [
              {
                "type": "integer",
                "minimum": 0,
                "maximum": 16777215
              },
              {
                "type": "null"
              }
            ]
          },
          "material": {
            "description": "null removes the PBR material assignment.",
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "materialId": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 40,
                    "pattern": "^[a-zA-Z0-9_-]+$"
                  },
                  "override": {
                    "type": "object",
                    "properties": {
                      "baseColor": {
                        "type": "integer",
                        "minimum": 0,
                        "maximum": 16777215
                      },
                      "roughness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "metalness": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      },
                      "opacity": {
                        "type": "number",
                        "minimum": 0,
                        "maximum": 1
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "additionalProperties": false
              },
              {
                "type": "null"
              }
            ]
          },
          "referenceIds": {
            "description": "null removes reference links.",
            "anyOf": [
              {
                "maxItems": 8,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 40,
                  "pattern": "^[a-zA-Z0-9_-]+$"
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "accent": {
            "description": "A second colour 0xRRGGBB for the members drawn apart: a rack's beams (its posts keep the structure colour), a sign's face, a door's leaf. Display only.",
            "type": "integer",
            "minimum": 0,
            "maximum": 16777215
          },
          "doorType": {
            "description": "How a door opens, for its plan symbol and 3D picture: hinged (one leaf, the default), double, sliding, automatic (two sliding leaves) or revolving. Doors and gates only; display only.",
            "type": "string",
            "enum": [
              "hinged",
              "double",
              "sliding",
              "automatic",
              "revolving"
            ]
          },
          "text": {
            "description": "Words shown on it: a sign or menu board carries them on its face, a floor marking (zone, parking, road, sidewalk, lawn, rug) painted on the floor. Display only.",
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "symbol": {
            "description": "A symbol painted on a floor marking: arrow (along its length, turned with it), wheelchair (the accessible bay sign), crosswalk (zebra stripes across its length), bays (parking bay lines every 2.5 m along its length) or hatch (a no-go area). Floor markings only; display only.",
            "type": "string",
            "enum": [
              "arrow",
              "wheelchair",
              "crosswalk",
              "bays",
              "hatch"
            ]
          },
          "group": {
            "description": "null takes it out of its group.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ]
          },
          "tags": {
            "description": "Up to 8 tags, each /^[a-z0-9_-]{1,24}$/, for scenarios to refer to. null removes them.",
            "anyOf": [
              {
                "maxItems": 8,
                "type": "array",
                "items": {
                  "type": "string",
                  "pattern": "^[a-z0-9_-]{1,24}$"
                }
              },
              {
                "type": "null"
              }
            ]
          },
          "source": {
            "description": "Where its position and size come from: drawing (read off a plan), measured (on site) or assumed (a typical size, or hidden in the drawing). Display only: not part of any calculation. null removes it.",
            "anyOf": [
              {
                "type": "string",
                "enum": [
                  "drawing",
                  "measured",
                  "assumed"
                ]
              },
              {
                "type": "null"
              }
            ]
          },
          "note": {
            "description": "A note for whoever checks the model (what was assumed, what to confirm on site), up to 300 characters; not drawn on the plan and not part of any calculation. null removes it.",
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 300
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    "remove": {
      "default": [],
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      }
    },
    "move": {
      "default": [],
      "description": "Move objects by a relative offset in metres.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "dx": {
            "type": "number",
            "minimum": -500,
            "maximum": 500
          },
          "dz": {
            "type": "number",
            "minimum": -500,
            "maximum": 500
          }
        },
        "required": [
          "id",
          "dx",
          "dz"
        ],
        "additionalProperties": false
      }
    },
    "rotate": {
      "default": [],
      "description": "Turn footprints 90° around their centres (swaps w and d; a polygon part turns its polygon, and a part with a front its facing, counter-clockwise, as turn by 90 does).",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 60
      }
    },
    "turn": {
      "default": [],
      "description": "Turn parts by any angle. Multiples of 90° are stored as a w/d swap without rotation; a part with a front keeps the turn in facing, so it faces the new way.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "degrees": {
            "type": "number",
            "minimum": -360,
            "maximum": 360,
            "description": "Degrees counter-clockwise on the plan."
          },
          "pivot": {
            "default": "each",
            "description": "each: every part about its own centre; selection: the parts as one block about the centre of their bounds.",
            "type": "string",
            "enum": [
              "each",
              "selection"
            ]
          }
        },
        "required": [
          "ids",
          "degrees"
        ],
        "additionalProperties": false
      }
    },
    "mirror": {
      "default": [],
      "description": "Mirror parts across the middle of their bounds: each goes to its mirrored place, its turn reflected (a chair then faces the other way) and its polygon base mirrored. Select a wall with its doors to mirror them together.",
      "maxItems": 100,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "axis": {
            "type": "string",
            "enum": [
              "x",
              "z"
            ],
            "description": "x: left to right, across the vertical line through the middle of their bounds; z: top to bottom."
          }
        },
        "required": [
          "ids",
          "axis"
        ],
        "additionalProperties": false
      }
    },
    "copy": {
      "default": [],
      "description": "Duplicate objects. With dx/dz the copies form a row at that spacing (copy n sits at n×offset); otherwise each copy goes to a free spot nearby.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "count": {
            "default": 1,
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "dx": {
            "type": "number",
            "minimum": -500,
            "maximum": 500
          },
          "dz": {
            "type": "number",
            "minimum": -500,
            "maximum": 500
          }
        },
        "required": [
          "id"
        ],
        "additionalProperties": false
      }
    },
    "align": {
      "default": [],
      "description": "Align objects to the shared bounding box of the given IDs.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "mode": {
            "type": "string",
            "enum": [
              "left",
              "center-x",
              "right",
              "top",
              "center-z",
              "bottom"
            ]
          }
        },
        "required": [
          "ids",
          "mode"
        ],
        "additionalProperties": false
      }
    },
    "distribute": {
      "default": [],
      "description": "Distribute with equal gaps; outer objects remain in place. Rejects overlaps caused by insufficient room.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 3,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "axis": {
            "type": "string",
            "enum": [
              "x",
              "z"
            ]
          }
        },
        "required": [
          "ids",
          "axis"
        ],
        "additionalProperties": false
      }
    },
    "rotateSelection": {
      "default": [],
      "description": "Rotate each selection 90° clockwise as one block around its bounds; preserve relative positions and shift the whole block inside the floor if needed.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          }
        },
        "required": [
          "ids"
        ],
        "additionalProperties": false
      }
    },
    "copySelection": {
      "default": [],
      "description": "Repeat a selection at n×(dx,dz) spacing, preserving all relative positions. Copies are unlocked. Refuses out-of-bounds copies.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "count": {
            "default": 1,
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "dx": {
            "type": "number",
            "minimum": -500,
            "maximum": 500
          },
          "dz": {
            "type": "number",
            "minimum": -500,
            "maximum": 500
          }
        },
        "required": [
          "ids",
          "dx",
          "dz"
        ],
        "additionalProperties": false
      }
    },
    "copyArray": {
      "default": [],
      "description": "Repeat an existing selection across rows and columns. The original selection occupies cell (0,0); other cells get unique IDs and groups. Refuses out-of-bounds copies.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "rows": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "columns": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "rowStep": {
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              },
              "dz": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              }
            },
            "required": [
              "dx",
              "dz"
            ],
            "additionalProperties": false,
            "description": "Metres from one row or column to the next; diagonal steps are allowed."
          },
          "columnStep": {
            "type": "object",
            "properties": {
              "dx": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              },
              "dz": {
                "type": "number",
                "minimum": -500,
                "maximum": 500
              }
            },
            "required": [
              "dx",
              "dz"
            ],
            "additionalProperties": false,
            "description": "Metres from one row or column to the next; diagonal steps are allowed."
          }
        },
        "required": [
          "ids",
          "rows",
          "columns",
          "rowStep",
          "columnStep"
        ],
        "additionalProperties": false,
        "description": "The original selection is cell (0,0); every other cell is a new, unlocked copy with its own group names."
      }
    },
    "walls": {
      "default": [],
      "description": "Draw walls along polylines: one wall per segment, turned to its angle, all in one group (the group given, else a new one).",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "points": {
            "minItems": 2,
            "maxItems": 64,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "x": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 500
                },
                "z": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 500
                }
              },
              "required": [
                "x",
                "z"
              ],
              "additionalProperties": false
            }
          },
          "thickness": {
            "type": "number",
            "minimum": 0.02,
            "maximum": 500
          },
          "height": {
            "type": "number",
            "minimum": 0.01,
            "maximum": 50
          },
          "closed": {
            "default": false,
            "description": "Add the segment from the last point back to the first.",
            "type": "boolean"
          },
          "kind": {
            "default": "wall",
            "type": "string",
            "enum": [
              "wall",
              "partition",
              "fence"
            ]
          },
          "group": {
            "type": "string",
            "minLength": 1,
            "maxLength": 40
          },
          "align": {
            "default": "center",
            "description": "Where the points lie on the wall: its middle, or its left or right face walking from each point to the next on the plan (x right, z towards you). A closed outline drawn clockwise on the plan has the room on its right: align 'left' keeps the walls outside it.",
            "type": "string",
            "enum": [
              "center",
              "left",
              "right"
            ]
          },
          "joinCorners": {
            "default": true,
            "description": "Lengthen walls where they turn so the outside of each corner is closed; false keeps each wall to its segment.",
            "type": "boolean"
          }
        },
        "required": [
          "points"
        ],
        "additionalProperties": false
      }
    },
    "openings": {
      "default": [],
      "description": "Put a door, window, gate or dock_door on a wall, partition or fence: an existing one, or one this batch adds with an explicit id in add (walls drawn by walls get new IDs: read them from the result, or add their openings in a later edit). Centred on the wall's line, as thick as it, at its rotation, so it opens the wall; it joins the wall's group.",
      "maxItems": 50,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "wall": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "at": {
            "description": "Metres along the wall from its start to the opening's middle. The start is the wall's minimum-x end before rotation (minimum-z for a wall deeper than wide); for a wall drawn with walls, the wall's own start, which lies past the segment's first point where a corner is joined. Or give point instead.",
            "type": "number",
            "minimum": 0,
            "maximum": 500
          },
          "point": {
            "description": "Where the opening's middle is, in floor metres (as measured on a plan): taken to the wall's line. Use it instead of at.",
            "type": "object",
            "properties": {
              "x": {
                "type": "number"
              },
              "z": {
                "type": "number"
              }
            },
            "required": [
              "x",
              "z"
            ],
            "additionalProperties": false
          },
          "kind": {
            "type": "string",
            "enum": [
              "door",
              "window",
              "gate",
              "dock_door"
            ]
          },
          "width": {
            "description": "Opening width; the part's own width when omitted.",
            "type": "number",
            "minimum": 0.02,
            "maximum": 500
          },
          "id": {
            "description": "Its own ID; the next free one of the kind when omitted.",
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "label": {
            "type": "string",
            "minLength": 1,
            "maxLength": 60
          },
          "passageHeading": {
            "description": "Physical positive normal of a rectangular door/dock_door/gate in its canonical box frame, degrees (-180,180]; effective heading adds rotation. 0 toward +x, 90 toward -z. Permission is selected per agent by oneWayPassages.",
            "type": "number",
            "exclusiveMinimum": -180,
            "maximum": 180
          },
          "h": {
            "description": "Its height; the kind's when omitted.",
            "type": "number",
            "minimum": 0.01,
            "maximum": 50
          },
          "y": {
            "description": "Its underside above the floor, such as a window's sill; 0 when omitted.",
            "type": "number",
            "minimum": 0,
            "maximum": 50
          }
        },
        "required": [
          "wall",
          "kind"
        ],
        "additionalProperties": false
      }
    },
    "group": {
      "default": [],
      "description": "Put parts in a named group (they select together in the editor); null takes them out.",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "ids": {
            "minItems": 1,
            "maxItems": 1000,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 60
            }
          },
          "group": {
            "anyOf": [
              {
                "type": "string",
                "minLength": 1,
                "maxLength": 40
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "ids",
          "group"
        ],
        "additionalProperties": false
      }
    },
    "dock": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": 0,
          "maximum": 500
        },
        "z": {
          "type": "number",
          "minimum": 0,
          "maximum": 500
        }
      },
      "required": [
        "x",
        "z"
      ],
      "additionalProperties": false
    },
    "destination": {
      "type": "object",
      "properties": {
        "x": {
          "type": "number",
          "minimum": 0,
          "maximum": 500
        },
        "z": {
          "type": "number",
          "minimum": 0,
          "maximum": 500
        }
      },
      "required": [
        "x",
        "z"
      ],
      "additionalProperties": false
    },
    "autoPlaceStations": {
      "default": false,
      "description": "Explicitly allow moving both provisional robot stations into the largest connected area.",
      "type": "boolean"
    },
    "operationId": {
      "type": "string",
      "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,99}$",
      "description": "Your own unique name for this change, such as a UUID; optional. Sending the same call again with the same operationId returns the earlier result (replayed: true) instead of applying it twice, and get_operation tells whether it applied. Use a new one for each new change."
    },
    "requestGroupId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Attach this live edit to an open request group. Requires a fixed operationId and the current owned expectedRevision. Only the advertised five editing tools support groups."
    }
  },
  "required": [
    "expectedRevision"
  ],
  "additionalProperties": false
}

Similar websites

eworker.ca

eworker.ca

E-Worker is business infrastructure powered by AI, with focused apps and connected business work.

live Unverified Productivity & Business
73 tools A10 / Act63 / T0 Not yet scored Seen 2026-10-05
eworker_site_status eworker_list_apps eworker_resolve_app eworker_open_app ewdoc_status
Inspect tools
takemeup.cv

takemeup.cv

Free CV builder: make a polished, ATS-friendly CV in minutes. No watermarks, no sign-up. Import from LinkedIn, tailor to any job, export PDF.

live Unverified Productivity & Business Transact tools
41 tools A15 / Act25 / T1 Not yet scored Seen 2026-10-05
list_takemeup_guides search_takemeup_guides get_takemeup_guide list_takemeup_cv_templates get_takemeup_locale_cv_rules
Inspect tools
urban-planning-copilot.heisenbug.in

urban-planning-copilot.heisenbug.in

Urban Planning Copilot

demo Unverified Productivity & Business
37 tools A10 / Act27 / T0 Not yet scored Seen 2026-10-05
get_workspace get_analysis_plan list_candidates inspect_candidate list_shortlist
Inspect tools
vide.zerdalu.com

vide.zerdalu.com

Vide

live Unverified Productivity & Business Transact tools
28 tools A13 / Act14 / T1 Not yet scored Seen 2026-10-05
list_project_files read_project_file write_project_file delete_project_file get_active_script
Inspect tools

Related on Influzer