@pascal-app/core 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +102 -90
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/add-object-cases.js +301 -1
- package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/add-stair-cases.js +176 -0
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +410 -40
- package/dist/agent-operations/__fixtures__/cases.d.ts +18 -3
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +183 -4
- package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/corner-window-cases.js +155 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +14 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +709 -0
- package/dist/agent-operations/__fixtures__/finish-cases.d.ts +7 -0
- package/dist/agent-operations/__fixtures__/finish-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/finish-cases.js +758 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/lot-info-cases.js +370 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/merge-windows-cases.js +321 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +2237 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/native-materials.js +82 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/node-read-cases.js +639 -0
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts +24 -0
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/notation-cases.js +356 -0
- package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/place-items-cases.js +80 -2
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +19726 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.js +106 -0
- package/dist/agent-operations/__fixtures__/roof-cases.d.ts +9 -0
- package/dist/agent-operations/__fixtures__/roof-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/roof-cases.js +382 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +2 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +136 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts +4 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +417 -0
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +15 -3
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +290 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/site-cases.js +780 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +630 -3
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +311 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/verify-scene-cases.js +59 -11
- package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/view-assets-cases.js +155 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts +50 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/view-scene-cases.js +425 -0
- package/dist/agent-operations/achieved.d.ts +5 -0
- package/dist/agent-operations/achieved.d.ts.map +1 -1
- package/dist/agent-operations/achieved.js +21 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +3 -1
- package/dist/agent-operations/add-fence.d.ts +18 -0
- package/dist/agent-operations/add-fence.d.ts.map +1 -0
- package/dist/agent-operations/add-fence.js +48 -0
- package/dist/agent-operations/add-level.d.ts +4 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +48 -12
- package/dist/agent-operations/add-object.d.ts +38 -9
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +172 -11
- package/dist/agent-operations/add-wall.d.ts +1 -3
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +35 -9
- package/dist/agent-operations/apply-changes.d.ts +7 -1
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +54 -22
- package/dist/agent-operations/apply-outcome.d.ts +6 -0
- package/dist/agent-operations/apply-outcome.d.ts.map +1 -1
- package/dist/agent-operations/apply-outcome.js +23 -8
- package/dist/agent-operations/asset-views.d.ts +75 -0
- package/dist/agent-operations/asset-views.d.ts.map +1 -0
- package/dist/agent-operations/asset-views.js +234 -0
- package/dist/agent-operations/author-scene.d.ts +157 -0
- package/dist/agent-operations/author-scene.d.ts.map +1 -0
- package/dist/agent-operations/author-scene.js +1076 -0
- package/dist/agent-operations/authored-scene-merge.d.ts +4 -0
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -0
- package/dist/agent-operations/authored-scene-merge.js +96 -0
- package/dist/agent-operations/batch.d.ts +22 -0
- package/dist/agent-operations/batch.d.ts.map +1 -0
- package/dist/agent-operations/batch.js +104 -0
- package/dist/agent-operations/ceiling-object-observations.d.ts +31 -0
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -0
- package/dist/agent-operations/ceiling-object-observations.js +111 -0
- package/dist/agent-operations/corner-window.d.ts +19 -0
- package/dist/agent-operations/corner-window.d.ts.map +1 -0
- package/dist/agent-operations/corner-window.js +84 -0
- package/dist/agent-operations/create-roof.d.ts +32 -0
- package/dist/agent-operations/create-roof.d.ts.map +1 -0
- package/dist/agent-operations/create-roof.js +304 -0
- package/dist/agent-operations/create-room.d.ts +2 -0
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +73 -5
- package/dist/agent-operations/create-stair.d.ts +6 -28
- package/dist/agent-operations/create-stair.d.ts.map +1 -1
- package/dist/agent-operations/create-stair.js +187 -104
- package/dist/agent-operations/design-brief.d.ts +38 -0
- package/dist/agent-operations/design-brief.d.ts.map +1 -0
- package/dist/agent-operations/design-brief.js +300 -0
- package/dist/agent-operations/designs.d.ts +24 -0
- package/dist/agent-operations/designs.d.ts.map +1 -0
- package/dist/agent-operations/designs.js +48 -0
- package/dist/agent-operations/door-clearance.d.ts +16 -1
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +61 -4
- package/dist/agent-operations/duplicate-level.d.ts.map +1 -1
- package/dist/agent-operations/duplicate-level.js +2 -1
- package/dist/agent-operations/find-by-type.d.ts +14 -7
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +266 -43
- package/dist/agent-operations/furnish-room.d.ts +22 -1
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +66 -19
- package/dist/agent-operations/furniture-kind.d.ts +22 -0
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -0
- package/dist/agent-operations/furniture-kind.js +69 -0
- package/dist/agent-operations/get-node.d.ts +5 -2
- package/dist/agent-operations/get-node.d.ts.map +1 -1
- package/dist/agent-operations/get-node.js +82 -10
- package/dist/agent-operations/hosted-services.d.ts +2 -1
- package/dist/agent-operations/hosted-services.d.ts.map +1 -1
- package/dist/agent-operations/index.d.ts +281 -69
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +66 -5
- package/dist/agent-operations/item-space.d.ts +22 -0
- package/dist/agent-operations/item-space.d.ts.map +1 -0
- package/dist/agent-operations/item-space.js +69 -0
- package/dist/agent-operations/layout-clearance.d.ts +52 -3
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +340 -30
- package/dist/agent-operations/level-height-fill.d.ts +12 -0
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -0
- package/dist/agent-operations/level-height-fill.js +59 -0
- package/dist/agent-operations/level-reads.d.ts +5 -1
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +10 -3
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +23 -0
- package/dist/agent-operations/material-preset.d.ts.map +1 -1
- package/dist/agent-operations/material-preset.js +3 -9
- package/dist/agent-operations/material-refs.d.ts +7 -1
- package/dist/agent-operations/material-refs.d.ts.map +1 -1
- package/dist/agent-operations/material-refs.js +10 -5
- package/dist/agent-operations/merge-windows.d.ts +6 -0
- package/dist/agent-operations/merge-windows.d.ts.map +1 -0
- package/dist/agent-operations/merge-windows.js +27 -0
- package/dist/agent-operations/move-roofs.d.ts +9 -0
- package/dist/agent-operations/move-roofs.d.ts.map +1 -0
- package/dist/agent-operations/move-roofs.js +29 -0
- package/dist/agent-operations/paint.d.ts +2 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +163 -53
- package/dist/agent-operations/photo-elevation.d.ts +155 -0
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -0
- package/dist/agent-operations/photo-elevation.js +761 -0
- package/dist/agent-operations/place-in-room.d.ts +29 -0
- package/dist/agent-operations/place-in-room.d.ts.map +1 -0
- package/dist/agent-operations/place-in-room.js +403 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +15 -2
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +3 -0
- package/dist/agent-operations/point-context.d.ts +139 -0
- package/dist/agent-operations/point-context.d.ts.map +1 -0
- package/dist/agent-operations/point-context.js +1 -0
- package/dist/agent-operations/project-files.d.ts +9 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -0
- package/dist/agent-operations/project-files.js +25 -0
- package/dist/agent-operations/record-made.d.ts +18 -0
- package/dist/agent-operations/record-made.d.ts.map +1 -0
- package/dist/agent-operations/record-made.js +28 -0
- package/dist/agent-operations/roof-footprint.d.ts +24 -0
- package/dist/agent-operations/roof-footprint.d.ts.map +1 -0
- package/dist/agent-operations/roof-footprint.js +242 -0
- package/dist/agent-operations/roof-writes.d.ts +20 -0
- package/dist/agent-operations/roof-writes.d.ts.map +1 -0
- package/dist/agent-operations/roof-writes.js +165 -0
- package/dist/agent-operations/room-findings.d.ts +54 -0
- package/dist/agent-operations/room-findings.d.ts.map +1 -0
- package/dist/agent-operations/room-findings.js +143 -0
- package/dist/agent-operations/room-floor-script.d.ts +23 -0
- package/dist/agent-operations/room-floor-script.d.ts.map +1 -0
- package/dist/agent-operations/room-floor-script.js +54 -0
- package/dist/agent-operations/room-structure.d.ts +2 -2
- package/dist/agent-operations/room-structure.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.d.ts +94 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -0
- package/dist/agent-operations/scene-checkpoint.js +176 -0
- package/dist/agent-operations/scene-queries.d.ts +3750 -3319
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +13 -23
- package/dist/agent-operations/scene-review.d.ts +52 -0
- package/dist/agent-operations/scene-review.d.ts.map +1 -0
- package/dist/agent-operations/scene-review.js +106 -0
- package/dist/agent-operations/scene-view.d.ts +82 -15
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +408 -51
- package/dist/agent-operations/search-assets.d.ts +2 -2
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +4 -3
- package/dist/agent-operations/search-materials.d.ts +9 -3
- package/dist/agent-operations/search-materials.d.ts.map +1 -1
- package/dist/agent-operations/search-materials.js +83 -29
- package/dist/agent-operations/set-checkpoint.d.ts +9 -0
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -0
- package/dist/agent-operations/set-checkpoint.js +31 -0
- package/dist/agent-operations/set-ground-level.d.ts +12 -0
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -0
- package/dist/agent-operations/set-ground-level.js +61 -0
- package/dist/agent-operations/site.d.ts +21 -0
- package/dist/agent-operations/site.d.ts.map +1 -0
- package/dist/agent-operations/site.js +123 -0
- package/dist/agent-operations/types.d.ts +66 -7
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.d.ts +39 -5
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +223 -44
- package/dist/agent-operations/wall-face-script.d.ts +28 -0
- package/dist/agent-operations/wall-face-script.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-script.js +62 -0
- package/dist/agent-operations/wall-object-observations.d.ts +41 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -0
- package/dist/agent-operations/wall-object-observations.js +249 -0
- package/dist/agent-operations/wall-opening.d.ts +23 -23
- package/dist/agent-operations/wall-opening.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.d.ts +24 -0
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -0
- package/dist/agent-operations/wall-skirting.js +85 -0
- package/dist/agent-tools/add-object.d.ts +11 -7
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +17 -11
- package/dist/agent-tools/assets.d.ts +8 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +13 -1
- package/dist/agent-tools/author-scene.d.ts +651 -0
- package/dist/agent-tools/author-scene.d.ts.map +1 -0
- package/dist/agent-tools/author-scene.js +252 -0
- package/dist/agent-tools/batch.d.ts +25 -0
- package/dist/agent-tools/batch.d.ts.map +1 -0
- package/dist/agent-tools/batch.js +61 -0
- package/dist/agent-tools/checkpoints.d.ts +13 -0
- package/dist/agent-tools/checkpoints.d.ts.map +1 -0
- package/dist/agent-tools/checkpoints.js +16 -0
- package/dist/agent-tools/clear-scene.d.ts.map +1 -1
- package/dist/agent-tools/collections.d.ts +6 -6
- package/dist/agent-tools/collections.d.ts.map +1 -1
- package/dist/agent-tools/columns.d.ts +18 -18
- package/dist/agent-tools/columns.js +2 -2
- package/dist/agent-tools/corner-window.d.ts +46 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -0
- package/dist/agent-tools/corner-window.js +47 -0
- package/dist/agent-tools/create-room.d.ts +26 -25
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +11 -4
- package/dist/agent-tools/design-brief.d.ts +408 -0
- package/dist/agent-tools/design-brief.d.ts.map +1 -0
- package/dist/agent-tools/design-brief.js +149 -0
- package/dist/agent-tools/designs.d.ts +34 -0
- package/dist/agent-tools/designs.d.ts.map +1 -0
- package/dist/agent-tools/designs.js +50 -0
- package/dist/agent-tools/fences.d.ts +28 -0
- package/dist/agent-tools/fences.d.ts.map +1 -0
- package/dist/agent-tools/fences.js +31 -0
- package/dist/agent-tools/find-by-type.d.ts +8 -1
- package/dist/agent-tools/find-by-type.d.ts.map +1 -1
- package/dist/agent-tools/find-by-type.js +23 -2
- package/dist/agent-tools/furnish-room.d.ts +10 -8
- package/dist/agent-tools/furnish-room.d.ts.map +1 -1
- package/dist/agent-tools/furnish-room.js +3 -1
- package/dist/agent-tools/hosted-services.d.ts +177 -141
- package/dist/agent-tools/hosted-services.d.ts.map +1 -1
- package/dist/agent-tools/hosted-services.js +47 -14
- package/dist/agent-tools/index.d.ts +894 -215
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +47 -3
- package/dist/agent-tools/levels.d.ts +11 -3
- package/dist/agent-tools/levels.d.ts.map +1 -1
- package/dist/agent-tools/levels.js +16 -5
- package/dist/agent-tools/measurement.d.ts +38 -20
- package/dist/agent-tools/measurement.d.ts.map +1 -1
- package/dist/agent-tools/measurement.js +117 -67
- package/dist/agent-tools/merge-windows.d.ts +10 -0
- package/dist/agent-tools/merge-windows.d.ts.map +1 -0
- package/dist/agent-tools/merge-windows.js +12 -0
- package/dist/agent-tools/nodes.d.ts.map +1 -1
- package/dist/agent-tools/nodes.js +1 -1
- package/dist/agent-tools/notation-inventory.d.ts +16 -0
- package/dist/agent-tools/notation-inventory.d.ts.map +1 -0
- package/dist/agent-tools/notation-inventory.js +105 -0
- package/dist/agent-tools/paint.d.ts +5 -5
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +1 -1
- package/dist/agent-tools/photo-elevation.d.ts +32 -0
- package/dist/agent-tools/photo-elevation.d.ts.map +1 -0
- package/dist/agent-tools/photo-elevation.js +73 -0
- package/dist/agent-tools/place-in-room.d.ts +35 -0
- package/dist/agent-tools/place-in-room.d.ts.map +1 -0
- package/dist/agent-tools/place-in-room.js +61 -0
- package/dist/agent-tools/place-items.d.ts +1 -1
- package/dist/agent-tools/place-items.js +2 -2
- package/dist/agent-tools/project-files.d.ts +189 -0
- package/dist/agent-tools/project-files.d.ts.map +1 -0
- package/dist/agent-tools/project-files.js +99 -0
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/retired.d.ts +21 -0
- package/dist/agent-tools/retired.d.ts.map +1 -0
- package/dist/agent-tools/retired.js +29 -0
- package/dist/agent-tools/roofs.d.ts +100 -0
- package/dist/agent-tools/roofs.d.ts.map +1 -0
- package/dist/agent-tools/roofs.js +96 -0
- package/dist/agent-tools/room-structure.d.ts +46 -38
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +30 -27
- package/dist/agent-tools/search-materials.d.ts +22 -3
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/search-materials.js +13 -14
- package/dist/agent-tools/site.d.ts +27 -0
- package/dist/agent-tools/site.d.ts.map +1 -0
- package/dist/agent-tools/site.js +40 -0
- package/dist/agent-tools/sources.d.ts +12 -0
- package/dist/agent-tools/sources.d.ts.map +1 -0
- package/dist/agent-tools/sources.js +11 -0
- package/dist/agent-tools/stairs.d.ts +48 -28
- package/dist/agent-tools/stairs.d.ts.map +1 -1
- package/dist/agent-tools/stairs.js +65 -22
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +1 -1
- package/dist/agent-tools/view-scene.d.ts +50 -12
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +74 -31
- package/dist/agent-tools/wall-openings.d.ts +77 -73
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +9 -5
- package/dist/agent-tools/walls.d.ts +4 -4
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +7 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +454 -250
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +62 -2
- package/dist/building/corner-window.d.ts +56 -0
- package/dist/building/corner-window.d.ts.map +1 -0
- package/dist/building/corner-window.js +179 -0
- package/dist/building/ground-level.d.ts +26 -0
- package/dist/building/ground-level.d.ts.map +1 -0
- package/dist/building/ground-level.js +58 -0
- package/dist/building/index.d.ts +5 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +5 -0
- package/dist/building/level-duplication.d.ts +7472 -6613
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-duplication.js +18 -4
- package/dist/building/level-insertion.d.ts +55 -0
- package/dist/building/level-insertion.d.ts.map +1 -0
- package/dist/building/level-insertion.js +35 -0
- package/dist/building/merge-windows.d.ts +58 -0
- package/dist/building/merge-windows.d.ts.map +1 -0
- package/dist/building/merge-windows.js +189 -0
- package/dist/building/opening-style-presets.d.ts +2 -2
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/photo-elevation.d.ts +125 -0
- package/dist/building/photo-elevation.d.ts.map +1 -0
- package/dist/building/photo-elevation.js +404 -0
- package/dist/building/wall-gaps.d.ts +13 -0
- package/dist/building/wall-gaps.d.ts.map +1 -0
- package/dist/building/wall-gaps.js +158 -0
- package/dist/building/wall-openings.d.ts +154 -119
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +37 -9
- package/dist/capture/schema.d.ts +22 -22
- package/dist/capture/source.d.ts.map +1 -1
- package/dist/capture/source.js +1 -1
- package/dist/commands/structure/create-zone.d.ts +12 -1
- package/dist/commands/structure/create-zone.d.ts.map +1 -1
- package/dist/commands/structure/create-zone.js +49 -0
- package/dist/commands/structure/divide-zone.d.ts +3 -3
- package/dist/commands/structure/index.d.ts +1 -1
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +1 -1
- package/dist/commands/structure/set-floor-foundation.d.ts +6 -6
- package/dist/commands/structure/set-zone-intent.d.ts +4 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +19 -0
- package/dist/commands/structure/shared.d.ts +3642 -3213
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/zone-wall-merge.d.ts +4149 -3334
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +106 -26
- package/dist/events/bus.d.ts +22 -3
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/events/capture-sessions.d.ts +5 -0
- package/dist/events/capture-sessions.d.ts.map +1 -0
- package/dist/events/capture-sessions.js +31 -0
- package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +1 -2
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +4 -6
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3608 -3179
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +11 -2
- package/dist/hooks/spatial-grid/use-spatial-query.d.ts +3 -3
- package/dist/hooks/spatial-grid/wall-spatial-grid.d.ts.map +1 -1
- package/dist/index.d.ts +37 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +36 -9
- package/dist/lib/__fixtures__/mezzanine.d.ts +11800 -10132
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +3642 -3213
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/angle-accumulator.d.ts.map +1 -1
- package/dist/lib/artifact-store.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.d.ts +65 -0
- package/dist/lib/below-grade-footprints.d.ts.map +1 -0
- package/dist/lib/below-grade-footprints.js +181 -0
- package/dist/lib/building-footprint.d.ts +33 -0
- package/dist/lib/building-footprint.d.ts.map +1 -0
- package/dist/lib/building-footprint.js +89 -0
- package/dist/lib/corner-pair.d.ts +1129 -0
- package/dist/lib/corner-pair.d.ts.map +1 -0
- package/dist/lib/corner-pair.js +130 -0
- package/dist/lib/corner-snap.d.ts +54 -0
- package/dist/lib/corner-snap.d.ts.map +1 -0
- package/dist/lib/corner-snap.js +125 -0
- package/dist/lib/critically-damped.d.ts +11 -0
- package/dist/lib/critically-damped.d.ts.map +1 -0
- package/dist/lib/critically-damped.js +14 -0
- package/dist/lib/deepest-drawn.d.ts +18 -0
- package/dist/lib/deepest-drawn.d.ts.map +1 -0
- package/dist/lib/deepest-drawn.js +65 -0
- package/dist/lib/door-operation.d.ts +1 -1
- package/dist/lib/exterior-wall-loops.d.ts +17 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -0
- package/dist/lib/exterior-wall-loops.js +334 -0
- package/dist/lib/finish-script.d.ts +61 -0
- package/dist/lib/finish-script.d.ts.map +1 -0
- package/dist/lib/finish-script.js +86 -0
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +4 -4
- package/dist/lib/floor-plate-paint.d.ts +3 -1
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +24 -4
- package/dist/lib/floor-plates.d.ts +50 -50
- package/dist/lib/floor-script.d.ts +24 -0
- package/dist/lib/floor-script.d.ts.map +1 -0
- package/dist/lib/floor-script.js +51 -0
- package/dist/lib/foundation-construction.d.ts +73 -0
- package/dist/lib/foundation-construction.d.ts.map +1 -0
- package/dist/lib/foundation-construction.js +242 -0
- package/dist/lib/foundation-standard.d.ts +30 -0
- package/dist/lib/foundation-standard.d.ts.map +1 -0
- package/dist/lib/foundation-standard.js +30 -0
- package/dist/lib/foundation-wall.d.ts +36 -0
- package/dist/lib/foundation-wall.d.ts.map +1 -0
- package/dist/lib/foundation-wall.js +66 -0
- package/dist/lib/generic-foundation.d.ts +40 -0
- package/dist/lib/generic-foundation.d.ts.map +1 -0
- package/dist/lib/generic-foundation.js +200 -0
- package/dist/lib/geometry-script-node.d.ts +32 -3
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +26 -0
- package/dist/lib/grade-standing.d.ts +38 -0
- package/dist/lib/grade-standing.d.ts.map +1 -0
- package/dist/lib/grade-standing.js +137 -0
- package/dist/lib/ground-level.d.ts +20 -0
- package/dist/lib/ground-level.d.ts.map +1 -0
- package/dist/lib/ground-level.js +49 -0
- package/dist/lib/ground-over-part.d.ts +13 -0
- package/dist/lib/ground-over-part.d.ts.map +1 -0
- package/dist/lib/ground-over-part.js +94 -0
- package/dist/lib/ground-seat.d.ts +47 -0
- package/dist/lib/ground-seat.d.ts.map +1 -0
- package/dist/lib/ground-seat.js +61 -0
- package/dist/lib/ground-window.d.ts +39 -0
- package/dist/lib/ground-window.d.ts.map +1 -0
- package/dist/lib/ground-window.js +147 -0
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +2 -3
- package/dist/lib/own-floor-intent.d.ts.map +1 -1
- package/dist/lib/own-floor-intent.js +4 -4
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +3 -1
- package/dist/lib/point-ask.d.ts +9 -0
- package/dist/lib/point-ask.d.ts.map +1 -0
- package/dist/lib/point-ask.js +36 -0
- package/dist/lib/room-drawn-floor.d.ts +1 -1
- package/dist/lib/room-drawn-floor.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
- package/dist/lib/room-floor-feasibility.js +3 -3
- package/dist/lib/room-graph.d.ts.map +1 -1
- package/dist/lib/room-graph.js +2 -0
- package/dist/lib/room-name.d.ts +2 -0
- package/dist/lib/room-name.d.ts.map +1 -1
- package/dist/lib/room-name.js +2 -0
- package/dist/lib/room-topology-index.d.ts.map +1 -1
- package/dist/lib/room-topology-index.js +1 -1
- package/dist/lib/room-zone-adoption.d.ts.map +1 -1
- package/dist/lib/script-inputs-key.d.ts +3 -0
- package/dist/lib/script-inputs-key.d.ts.map +1 -0
- package/dist/lib/script-inputs-key.js +13 -0
- package/dist/lib/setback-envelope.d.ts +95 -5
- package/dist/lib/setback-envelope.d.ts.map +1 -1
- package/dist/lib/setback-envelope.js +351 -35
- package/dist/lib/site-flatwork.d.ts +11 -0
- package/dist/lib/site-flatwork.d.ts.map +1 -0
- package/dist/lib/site-flatwork.js +11 -0
- package/dist/lib/site-ground-height.d.ts +13 -0
- package/dist/lib/site-ground-height.d.ts.map +1 -0
- package/dist/lib/site-ground-height.js +16 -0
- package/dist/lib/site-placement.d.ts +362 -0
- package/dist/lib/site-placement.d.ts.map +1 -0
- package/dist/lib/site-placement.js +942 -0
- package/dist/lib/snap-ease.d.ts +20 -0
- package/dist/lib/snap-ease.d.ts.map +1 -0
- package/dist/lib/snap-ease.js +50 -0
- package/dist/lib/structure-kernel.d.ts +1 -1
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +2 -0
- package/dist/lib/surface-support-references.d.ts +4 -0
- package/dist/lib/surface-support-references.d.ts.map +1 -0
- package/dist/lib/surface-support-references.js +19 -0
- package/dist/lib/terrain-support-query.d.ts +10 -0
- package/dist/lib/terrain-support-query.d.ts.map +1 -1
- package/dist/lib/terrain-support-query.js +1 -1
- package/dist/lib/wall-face-script.d.ts +66 -0
- package/dist/lib/wall-face-script.d.ts.map +1 -0
- package/dist/lib/wall-face-script.js +235 -0
- package/dist/lib/zone-colors.d.ts +1 -1
- package/dist/lib/zone-colors.d.ts.map +1 -1
- package/dist/lib/zone-quantities.d.ts.map +1 -1
- package/dist/lib/zone-quantities.js +4 -5
- package/dist/material-kinds.d.ts +9 -0
- package/dist/material-kinds.d.ts.map +1 -0
- package/dist/material-kinds.js +30 -0
- package/dist/material-library.d.ts +4 -4
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +72 -26
- package/dist/node-slots/index.d.ts +1 -0
- package/dist/node-slots/index.d.ts.map +1 -1
- package/dist/node-slots/index.js +7 -1
- package/dist/node-slots/roof.d.ts +5 -0
- package/dist/node-slots/roof.d.ts.map +1 -0
- package/dist/node-slots/roof.js +12 -0
- package/dist/node-slots/stair.d.ts +2 -0
- package/dist/node-slots/stair.d.ts.map +1 -1
- package/dist/node-slots/stair.js +6 -2
- package/dist/procedural-items/design-placement.d.ts.map +1 -1
- package/dist/procedural-items/design.d.ts +19 -19
- package/dist/procedural-items/fixtures.d.ts +297 -297
- package/dist/procedural-items/fixtures.d.ts.map +1 -1
- package/dist/procedural-items/integration.d.ts +106 -106
- package/dist/procedural-items/joints.d.ts +4 -4
- package/dist/procedural-items/library-colors.d.ts +22 -22
- package/dist/procedural-items/library-colors.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/node.d.ts +291 -291
- package/dist/procedural-items/query.d.ts +1 -1
- package/dist/procedural-items/query.d.ts.map +1 -1
- package/dist/procedural-items/recipe.d.ts +11 -11
- package/dist/procedural-items/recipe.d.ts.map +1 -1
- package/dist/procedural-items/section.d.ts.map +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/scene-api.d.ts +1 -0
- package/dist/registry/scene-api.d.ts.map +1 -1
- package/dist/registry/scene-api.js +3 -0
- package/dist/registry/subtree.d.ts.map +1 -1
- package/dist/registry/subtree.js +2 -0
- package/dist/registry/types.d.ts +120 -1
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/schema/assembly.d.ts +41 -41
- package/dist/schema/asset-url.d.ts +1 -1
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/base.d.ts +9 -9
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/camera.d.ts +1 -1
- package/dist/schema/collection-templates.d.ts +20 -20
- package/dist/schema/collection-templates.d.ts.map +1 -1
- package/dist/schema/geometry-metadata.d.ts +7 -7
- package/dist/schema/geometry-metadata.d.ts.map +1 -1
- package/dist/schema/geometry-source.d.ts +26 -16
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +14 -0
- package/dist/schema/index.d.ts +10 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +10 -7
- package/dist/schema/material.d.ts +33 -33
- package/dist/schema/nodes/barrel-roof.d.ts +3 -0
- package/dist/schema/nodes/barrel-roof.d.ts.map +1 -0
- package/dist/schema/nodes/barrel-roof.js +11 -0
- package/dist/schema/nodes/block.d.ts +8 -8
- package/dist/schema/nodes/box-vent.d.ts +13 -13
- package/dist/schema/nodes/building.d.ts +9 -8
- package/dist/schema/nodes/building.d.ts.map +1 -1
- package/dist/schema/nodes/building.js +2 -0
- package/dist/schema/nodes/cabinet.d.ts +130 -129
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.js +1 -1
- package/dist/schema/nodes/ceiling.d.ts +15 -15
- package/dist/schema/nodes/chimney.d.ts +23 -23
- package/dist/schema/nodes/column.d.ts +207 -199
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +2 -0
- package/dist/schema/nodes/construction-dimension.d.ts +34 -34
- package/dist/schema/nodes/cupola.d.ts +15 -15
- package/dist/schema/nodes/curtain-wall.d.ts +21 -20
- package/dist/schema/nodes/curtain-wall.d.ts.map +1 -1
- package/dist/schema/nodes/curtain-wall.js +23 -0
- package/dist/schema/nodes/door.d.ts +50 -43
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +19 -0
- package/dist/schema/nodes/dormer.d.ts +37 -36
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +17 -17
- package/dist/schema/nodes/duct-fitting.d.ts +24 -24
- package/dist/schema/nodes/duct-segment.d.ts +14 -14
- package/dist/schema/nodes/duct-terminal.d.ts +12 -12
- package/dist/schema/nodes/elevator.d.ts +15 -15
- package/dist/schema/nodes/eyebrow-vent.d.ts +13 -13
- package/dist/schema/nodes/fence-feature.d.ts +37 -37
- package/dist/schema/nodes/fence-types.d.ts +32 -0
- package/dist/schema/nodes/fence-types.d.ts.map +1 -0
- package/dist/schema/nodes/fence-types.js +22 -0
- package/dist/schema/nodes/fence.d.ts +43 -72
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/fence.js +4 -20
- package/dist/schema/nodes/floor-opening.d.ts +8 -8
- package/dist/schema/nodes/guide.d.ts +8 -8
- package/dist/schema/nodes/gutter.d.ts +14 -14
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/gutter.js +6 -5
- package/dist/schema/nodes/hvac-equipment.d.ts +13 -13
- package/dist/schema/nodes/imported-mesh.d.ts +8 -8
- package/dist/schema/nodes/item.d.ts +30 -25
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/lean-to-extension.d.ts +36 -36
- package/dist/schema/nodes/level.d.ts +9 -9
- package/dist/schema/nodes/lineset.d.ts +8 -8
- package/dist/schema/nodes/liquid-line.d.ts +8 -8
- package/dist/schema/nodes/measurement.d.ts +8 -8
- package/dist/schema/nodes/opening-types.d.ts +13 -13
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/pipe-fitting.d.ts +15 -15
- package/dist/schema/nodes/pipe-segment.d.ts +11 -11
- package/dist/schema/nodes/pipe-trap.d.ts +9 -9
- package/dist/schema/nodes/ridge-vent.d.ts +14 -14
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/ridge-vent.js +3 -1
- package/dist/schema/nodes/roof-glazing-config.d.ts +90 -0
- package/dist/schema/nodes/roof-glazing-config.d.ts.map +1 -0
- package/dist/schema/nodes/roof-glazing-config.js +34 -0
- package/dist/schema/nodes/roof-glazing.d.ts +57 -0
- package/dist/schema/nodes/roof-glazing.d.ts.map +1 -0
- package/dist/schema/nodes/roof-glazing.js +514 -0
- package/dist/schema/nodes/roof-segment-resize.d.ts +4 -0
- package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -0
- package/dist/schema/nodes/roof-segment-resize.js +21 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts +5 -0
- package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-shape.js +44 -0
- package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
- package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment-walls.js +24 -0
- package/dist/schema/nodes/roof-segment.d.ts +153 -46
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +91 -20
- package/dist/schema/nodes/roof-types.d.ts +14 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -0
- package/dist/schema/nodes/roof-types.js +14 -0
- package/dist/schema/nodes/roof.d.ts +49 -49
- package/dist/schema/nodes/scan.d.ts +8 -8
- package/dist/schema/nodes/separator.d.ts +8 -8
- package/dist/schema/nodes/shelf.d.ts +16 -16
- package/dist/schema/nodes/site-facts.d.ts +64 -0
- package/dist/schema/nodes/site-facts.d.ts.map +1 -0
- package/dist/schema/nodes/site-facts.js +73 -0
- package/dist/schema/nodes/site.d.ts +105 -63
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -70
- package/dist/schema/nodes/skylight.d.ts +41 -41
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +21 -21
- package/dist/schema/nodes/solar-panel.d.ts +21 -21
- package/dist/schema/nodes/spawn.d.ts +8 -8
- package/dist/schema/nodes/stair-construction.d.ts +3 -3
- package/dist/schema/nodes/stair-defaults.d.ts +16 -0
- package/dist/schema/nodes/stair-defaults.d.ts.map +1 -0
- package/dist/schema/nodes/stair-defaults.js +15 -0
- package/dist/schema/nodes/stair-segment.d.ts +22 -22
- package/dist/schema/nodes/stair-types.d.ts +29 -0
- package/dist/schema/nodes/stair-types.d.ts.map +1 -0
- package/dist/schema/nodes/stair-types.js +23 -0
- package/dist/schema/nodes/stair.d.ts +51 -75
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +6 -20
- package/dist/schema/nodes/structural-grid.d.ts +8 -8
- package/dist/schema/nodes/surface-hole-metadata.d.ts +2 -2
- package/dist/schema/nodes/turbine-vent.d.ts +13 -13
- package/dist/schema/nodes/unit.d.ts +10 -10
- package/dist/schema/nodes/unit.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +479 -146
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +19 -0
- package/dist/schema/nodes/window.d.ts +55 -39
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +10 -0
- package/dist/schema/nodes/zone.d.ts +231 -12
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +10 -0
- package/dist/schema/provenance.d.ts +21 -21
- package/dist/schema/scene-material.d.ts +5 -5
- package/dist/schema/site-presentation.d.ts +100 -0
- package/dist/schema/site-presentation.d.ts.map +1 -0
- package/dist/schema/site-presentation.js +83 -0
- package/dist/schema/types.d.ts +1954 -1414
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -1
- package/dist/services/index.d.ts +5 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +5 -1
- package/dist/services/level-height.d.ts.map +1 -1
- package/dist/services/level-height.js +7 -3
- package/dist/services/port-connectivity.d.ts +4 -0
- package/dist/services/port-connectivity.d.ts.map +1 -1
- package/dist/services/port-connectivity.js +35 -0
- package/dist/services/project-file-sink.d.ts +9 -0
- package/dist/services/project-file-sink.d.ts.map +1 -0
- package/dist/services/project-file-sink.js +13 -0
- package/dist/services/roof-bearing.d.ts +62 -0
- package/dist/services/roof-bearing.d.ts.map +1 -0
- package/dist/services/roof-bearing.js +234 -0
- package/dist/services/roof-level.d.ts +121 -0
- package/dist/services/roof-level.d.ts.map +1 -0
- package/dist/services/roof-level.js +280 -0
- package/dist/services/roof-move.d.ts +83 -0
- package/dist/services/roof-move.d.ts.map +1 -0
- package/dist/services/roof-move.js +316 -0
- package/dist/services/stair-surface-snap.d.ts +14 -0
- package/dist/services/stair-surface-snap.d.ts.map +1 -0
- package/dist/services/stair-surface-snap.js +116 -0
- package/dist/services/storey-datum.d.ts +12 -0
- package/dist/services/storey-datum.d.ts.map +1 -0
- package/dist/services/storey-datum.js +18 -0
- package/dist/services/storey.d.ts +51 -5
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +125 -8
- package/dist/solar-panel-presets.d.ts +2 -2
- package/dist/store/actions/node-actions.d.ts +3613 -3182
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +46 -1
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/history-control.d.ts +39 -0
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +84 -4
- package/dist/store/scene-annotations.d.ts +7267 -6409
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-preview.d.ts +16 -0
- package/dist/store/scene-preview.d.ts.map +1 -0
- package/dist/store/scene-preview.js +144 -0
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-terrain.d.ts.map +1 -1
- package/dist/store/use-live-transforms.d.ts.map +1 -1
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +37 -4
- package/dist/systems/elevator/elevator-dispatch.js +1 -1
- package/dist/systems/fence/fence-features.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +24 -3
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +9 -3
- package/dist/systems/roof/roof-elevation.d.ts +5 -0
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +91 -62
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +4623 -3516
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +5149 -4076
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/slab/slab-support.d.ts +6 -3
- package/dist/systems/slab/slab-support.d.ts.map +1 -1
- package/dist/systems/slab/slab-support.js +78 -10
- package/dist/systems/stair/stair-detail-budget.d.ts +2 -2
- package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.d.ts +6 -0
- package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
- package/dist/systems/stair/stair-footprint.js +27 -14
- package/dist/systems/stair/stair-layout.d.ts +2 -2
- package/dist/systems/stair/stair-opening-preview.d.ts +3643 -3214
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-presets.d.ts +73 -65
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-presets.js +16 -9
- package/dist/systems/stair/stair-rail-path.d.ts +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts +16 -0
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +57 -7
- package/dist/systems/stair/stair-sizing.d.ts +101 -99
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.d.ts +11 -0
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +21 -0
- package/dist/systems/wall/wall-curve.d.ts +5 -0
- package/dist/systems/wall/wall-curve.d.ts.map +1 -1
- package/dist/systems/wall/wall-curve.js +13 -0
- package/dist/systems/wall/wall-frame.d.ts.map +1 -1
- package/dist/systems/wall/wall-frame.js +8 -0
- package/dist/systems/wall/wall-room-sides.d.ts +8 -0
- package/dist/systems/wall/wall-room-sides.d.ts.map +1 -1
- package/dist/systems/wall/wall-room-sides.js +60 -7
- package/dist/systems/wall/wall-top.d.ts +7 -4
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +14 -6
- package/dist/systems/wall/wall-topology.d.ts +4 -0
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +4 -2
- package/dist/systems/wall/wall-trim.d.ts +7 -0
- package/dist/systems/wall/wall-trim.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim.js +10 -0
- package/dist/utils/clone-scene-graph.d.ts.map +1 -1
- package/dist/utils/clone-scene-graph.js +8 -0
- package/dist/utils/ensure-scene-openings.d.ts +7420 -6562
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +2 -2
- package/dist/utils/floor-plate-migration.d.ts +3746 -3317
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.js +2 -2
- package/dist/utils/heal-scene-graph.d.ts +12 -0
- package/dist/utils/heal-scene-graph.d.ts.map +1 -1
- package/dist/utils/heal-scene-graph.js +40 -23
- package/dist/utils/legacy-wall-datums.d.ts.map +1 -1
- package/dist/utils/legacy-wall-datums.js +2 -2
- package/dist/utils/owned-floor-opening-migration.d.ts +3642 -3213
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +3730 -7777
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/scene-migrations.d.ts +1 -1
- package/dist/utils/scene-migrations.d.ts.map +1 -1
- package/dist/utils/scene-migrations.js +1 -1
- package/dist/utils/semantic-equal.d.ts +3 -0
- package/dist/utils/semantic-equal.d.ts.map +1 -0
- package/dist/utils/semantic-equal.js +26 -0
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/types.d.ts.map +1 -1
- package/dist/utils/wall-face-migration.d.ts +1 -1
- package/dist/utils/wall-face-migration.d.ts.map +1 -1
- package/package.json +36 -10
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { area, intersection, union } from '../lib/polygon-boolean.js';
|
|
2
|
+
import { polygonInteriorPoint } from '../lib/polygon-label.js';
|
|
3
|
+
import { distanceToSegment } from '../lib/room-topology-index.js';
|
|
4
|
+
import { detectSpacesForLevel } from '../lib/space-detection.js';
|
|
5
|
+
import { nodesOnLevel } from './scene-queries.js';
|
|
6
|
+
/** No name, or the bare word an older scene or a blank name leaves: "Room", "Zone". */
|
|
7
|
+
const PLACEHOLDER_NAME = /^\s*(room|zone)?\s*$/i;
|
|
8
|
+
/** A space is covered, a room enclosed, a zone in a space, and a zone walled like a room, past half. */
|
|
9
|
+
const HALF = 0.5;
|
|
10
|
+
/** How far past a wall's face its outline may run and still be walled, m. */
|
|
11
|
+
const ALONG_WALL = 0.1;
|
|
12
|
+
/** The step a zone's outline is sampled at to see how much of it walls run along, m. */
|
|
13
|
+
const OUTLINE_STEP = 0.25;
|
|
14
|
+
/** A wall that bounds a room stands at least this high, m; a garden wall is lower. */
|
|
15
|
+
const ROOM_WALL_HEIGHT = 2;
|
|
16
|
+
const round = (value) => Math.round(value * 100) / 100;
|
|
17
|
+
function shapeOf(outer, holes = []) {
|
|
18
|
+
const polygon = { outer, holes };
|
|
19
|
+
const xs = outer.map(([x]) => x);
|
|
20
|
+
const zs = outer.map(([, z]) => z);
|
|
21
|
+
return {
|
|
22
|
+
polygon,
|
|
23
|
+
box: [Math.min(...xs), Math.min(...zs), Math.max(...xs), Math.max(...zs)],
|
|
24
|
+
area: area([polygon]),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const overlap = (a, b) => a.box[0] < b.box[2] && b.box[0] < a.box[2] && a.box[1] < b.box[3] && b.box[1] < a.box[3];
|
|
28
|
+
/** How much of `part` the shapes cover, 0 to 1; only the shapes whose boxes meet it are joined. */
|
|
29
|
+
function covered(part, cover) {
|
|
30
|
+
if (part.area <= 0)
|
|
31
|
+
return 0;
|
|
32
|
+
const near = cover.filter((shape) => overlap(part, shape));
|
|
33
|
+
if (near.length === 0)
|
|
34
|
+
return 0;
|
|
35
|
+
const joined = near.length === 1 ? near[0].polygon : union(near.map((shape) => shape.polygon));
|
|
36
|
+
return area(intersection(part.polygon, joined)) / part.area;
|
|
37
|
+
}
|
|
38
|
+
/** How much of a zone's outline runs along a wall, 0 to 1: a zone mostly walled is meant as a room. */
|
|
39
|
+
function walled(zone, walls) {
|
|
40
|
+
const ring = zone.polygon;
|
|
41
|
+
let along = 0;
|
|
42
|
+
let samples = 0;
|
|
43
|
+
ring.forEach((start, i) => {
|
|
44
|
+
const end = ring[(i + 1) % ring.length];
|
|
45
|
+
const steps = Math.max(1, Math.ceil(Math.hypot(end[0] - start[0], end[1] - start[1]) / OUTLINE_STEP));
|
|
46
|
+
for (let k = 0; k < steps; k++) {
|
|
47
|
+
const t = (k + 0.5) / steps;
|
|
48
|
+
const point = [
|
|
49
|
+
start[0] + (end[0] - start[0]) * t,
|
|
50
|
+
start[1] + (end[1] - start[1]) * t,
|
|
51
|
+
];
|
|
52
|
+
samples++;
|
|
53
|
+
if (walls.some((wall) => distanceToSegment(point, wall.start, wall.end) <=
|
|
54
|
+
(wall.thickness ?? 0.2) / 2 + ALONG_WALL))
|
|
55
|
+
along++;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
return samples > 0 ? along / samples : 0;
|
|
59
|
+
}
|
|
60
|
+
const label = (zone) => PLACEHOLDER_NAME.test(zone.name) ? zone.id : `"${zone.name}" (${zone.id})`;
|
|
61
|
+
/**
|
|
62
|
+
* A room is a zone with `spaceRole: 'room'`, or a generic one walls of a room's height bound along
|
|
63
|
+
* most of its outline, which may be a room drawn before its last wall (no reconcile could adopt
|
|
64
|
+
* it) or a courtyard, so what is found on it is info; a zone garden walls bound, or no walls (an
|
|
65
|
+
* analysis area), is no room. Every space the walls enclose wants one zone over it (any zone: a drawn one is
|
|
66
|
+
* adopted as the room on load): none, or several rooms lying in it (the reconciler's "Room N"
|
|
67
|
+
* beside a zone drawn over it, a plan's rooms split by lines no wall draws), is a finding. Every
|
|
68
|
+
* room wants walls or separators closing around it, and a name. A terrace closes with separators,
|
|
69
|
+
* so it is enclosed; a room a person declared open (`enclosureStatus: 'open'` on a room the walls
|
|
70
|
+
* never derived) needs no walls; an automatic room the reconciler opened when its walls stopped
|
|
71
|
+
* closing it does.
|
|
72
|
+
*/
|
|
73
|
+
export function roomFindings(nodes, levelId, levelName) {
|
|
74
|
+
const onLevel = nodesOnLevel(nodes, levelId);
|
|
75
|
+
const walls = onLevel.filter((node) => node.type === 'wall');
|
|
76
|
+
const boundaries = onLevel.filter((node) => node.type === 'wall' || node.type === 'separator');
|
|
77
|
+
const zones = onLevel.filter((node) => node.type === 'zone' && node.polygon.length >= 3);
|
|
78
|
+
const { spaces } = detectSpacesForLevel(levelId, boundaries);
|
|
79
|
+
const spaceShapes = spaces.map((space) => shapeOf(space.polygon, space.holes));
|
|
80
|
+
const zoneShapes = zones.map((zone) => shapeOf(zone.polygon, zone.holes));
|
|
81
|
+
// A wall with no height of its own stands as high as its storey.
|
|
82
|
+
const roomWalls = walls.filter((wall) => (wall.height ?? ROOM_WALL_HEIGHT) >= ROOM_WALL_HEIGHT);
|
|
83
|
+
const rooms = zones.map((zone) => zone.spaceRole === 'room' || walled(zone, roomWalls) >= HALF);
|
|
84
|
+
const issues = [];
|
|
85
|
+
spaces.forEach((space, index) => {
|
|
86
|
+
const shape = spaceShapes[index];
|
|
87
|
+
// A mezzanine stands over its room, and a zone no room (an analysis area) lies in it: neither
|
|
88
|
+
// splits the space.
|
|
89
|
+
const inside = zones.filter((zone, z) => rooms[z] && zone.floor?.support !== 'open' && covered(zoneShapes[z], [shape]) >= HALF);
|
|
90
|
+
const noRoom = covered(shape, zoneShapes) < HALF;
|
|
91
|
+
if (!noRoom && inside.length < 2)
|
|
92
|
+
return;
|
|
93
|
+
const spaceArea = round(shape.area);
|
|
94
|
+
const [x, z] = polygonInteriorPoint(space, true).map(round);
|
|
95
|
+
const place = {
|
|
96
|
+
levelId,
|
|
97
|
+
area: spaceArea,
|
|
98
|
+
at: [x, z],
|
|
99
|
+
wallIds: space.wallIds,
|
|
100
|
+
};
|
|
101
|
+
const where = `On ${levelName}, walls ${space.wallIds.join(', ')} enclose a ${spaceArea.toFixed(1)} m² space at (${x.toFixed(2)}, ${z.toFixed(2)})`;
|
|
102
|
+
issues.push(noRoom
|
|
103
|
+
? { type: 'space_no_room', message: `${where} with no room over it.`, ...place }
|
|
104
|
+
: {
|
|
105
|
+
type: 'space_many_rooms',
|
|
106
|
+
message: `${where} with ${inside.length} rooms over it and no wall between them: ${inside.map(label).join(', ')}. Keep one room per space: name the space's room (create_room over the whole space names it) and delete the others, or divide the space with a wall or separator.`,
|
|
107
|
+
...place,
|
|
108
|
+
zoneIds: inside.map((zone) => zone.id),
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
zones.forEach((zone, index) => {
|
|
112
|
+
if (!rooms[index])
|
|
113
|
+
return;
|
|
114
|
+
const room = zone.spaceRole === 'room';
|
|
115
|
+
const unnamed = PLACEHOLDER_NAME.test(zone.name);
|
|
116
|
+
const declaredOpen = zone.enclosureStatus === 'open' && !zone.autoFromWalls;
|
|
117
|
+
const opened = zone.enclosureStatus === 'open' && zone.autoFromWalls;
|
|
118
|
+
if (!declaredOpen && (opened || covered(zoneShapes[index], spaceShapes) < HALF))
|
|
119
|
+
issues.push(room
|
|
120
|
+
? {
|
|
121
|
+
type: 'room_not_enclosed',
|
|
122
|
+
message: `Room ${label(zone)} on ${levelName}: its walls do not close around it.`,
|
|
123
|
+
levelId,
|
|
124
|
+
zoneId: zone.id,
|
|
125
|
+
}
|
|
126
|
+
: {
|
|
127
|
+
type: 'room_not_enclosed',
|
|
128
|
+
message: `Zone ${label(zone)} on ${levelName}: walls run along most of it and do not close around it, a room missing a wall or a courtyard.`,
|
|
129
|
+
severity: 'info',
|
|
130
|
+
levelId,
|
|
131
|
+
zoneId: zone.id,
|
|
132
|
+
});
|
|
133
|
+
if (unnamed)
|
|
134
|
+
issues.push({
|
|
135
|
+
type: 'room_unnamed',
|
|
136
|
+
message: `Room ${zone.id} on ${levelName} has no name${zone.name.trim() ? ` but "${zone.name.trim()}"` : ''}.`,
|
|
137
|
+
severity: 'info',
|
|
138
|
+
levelId,
|
|
139
|
+
zoneId: zone.id,
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
return { spaces: spaces.length, issues };
|
|
143
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type FloorScriptInputs } from '../lib/floor-script.js';
|
|
2
|
+
import { type CompiledGeometryScript } from '../schema/index.js';
|
|
3
|
+
import type { AgentOperation } from './types.js';
|
|
4
|
+
export type SetRoomFloorScriptInput = {
|
|
5
|
+
zoneId: string;
|
|
6
|
+
/** The module compiled for `inputs` (`floorScriptInputs` of the room, read before compiling). */
|
|
7
|
+
compiled: CompiledGeometryScript;
|
|
8
|
+
inputs: FloorScriptInputs;
|
|
9
|
+
} | {
|
|
10
|
+
zoneId: string;
|
|
11
|
+
remove: true;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* `setRoomFloorScript`: a room's floor finish built by a three.js module, or the module taken off.
|
|
15
|
+
* The host reads the room's floor (`floorScriptInputs`), compiles the module for it (geometry-script
|
|
16
|
+
* `inputs`: the module reads `params.polygon`, `params.holes`, `params.elevation`, in level
|
|
17
|
+
* coordinates) and stores the artifacts; this writes the result on the zone, with the key of the
|
|
18
|
+
* floor it was built for. When the structure re-derives the room's floor the script is stale and
|
|
19
|
+
* `refreshFinishScripts` runs it again. The script owns the floor's colours: paint on that floor is
|
|
20
|
+
* refused while it is there.
|
|
21
|
+
*/
|
|
22
|
+
export declare const setRoomFloorScript: AgentOperation<SetRoomFloorScriptInput>;
|
|
23
|
+
//# sourceMappingURL=room-floor-script.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-floor-script.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-floor-script.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,iBAAiB,EAAwC,MAAM,qBAAqB,CAAA;AAElG,OAAO,EAAE,KAAK,sBAAsB,EAAkC,MAAM,WAAW,CAAA;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,MAAM,uBAAuB,GAC/B;IACE,MAAM,EAAE,MAAM,CAAA;IACd,iGAAiG;IACjG,QAAQ,EAAE,sBAAsB,CAAA;IAChC,MAAM,EAAE,iBAAiB,CAAA;CAC1B,GACD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,CAAA;AAIpC;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,uBAAuB,CAsDtE,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { refuse } from '../agent-tools/refusal.js';
|
|
2
|
+
import { floorScriptInputs, floorScriptRecord } from '../lib/floor-script.js';
|
|
3
|
+
import { scriptedSize } from '../lib/geometry-script-node.js';
|
|
4
|
+
import { ZoneFloorScript } from '../schema/index.js';
|
|
5
|
+
const round = (value) => Math.round(value * 1000) / 1000;
|
|
6
|
+
/**
|
|
7
|
+
* `setRoomFloorScript`: a room's floor finish built by a three.js module, or the module taken off.
|
|
8
|
+
* The host reads the room's floor (`floorScriptInputs`), compiles the module for it (geometry-script
|
|
9
|
+
* `inputs`: the module reads `params.polygon`, `params.holes`, `params.elevation`, in level
|
|
10
|
+
* coordinates) and stores the artifacts; this writes the result on the zone, with the key of the
|
|
11
|
+
* floor it was built for. When the structure re-derives the room's floor the script is stale and
|
|
12
|
+
* `refreshFinishScripts` runs it again. The script owns the floor's colours: paint on that floor is
|
|
13
|
+
* refused while it is there.
|
|
14
|
+
*/
|
|
15
|
+
export const setRoomFloorScript = (nodes, input) => {
|
|
16
|
+
const zone = nodes[input.zoneId];
|
|
17
|
+
if (zone?.type !== 'zone')
|
|
18
|
+
refuse('target_not_found', `${input.zoneId} is not a room in the scene: nothing was changed.`, {
|
|
19
|
+
target: input.zoneId,
|
|
20
|
+
});
|
|
21
|
+
const name = zone.name?.trim() || zone.id;
|
|
22
|
+
if ('remove' in input) {
|
|
23
|
+
if (!zone.floor?.script)
|
|
24
|
+
return { result: { ok: true, zoneId: zone.id, removed: false } };
|
|
25
|
+
const { script: _, ...floor } = zone.floor;
|
|
26
|
+
return {
|
|
27
|
+
result: { ok: true, zoneId: zone.id, removed: true },
|
|
28
|
+
changes: {
|
|
29
|
+
update: [{ id: zone.id, data: { floor: Object.keys(floor).length ? floor : undefined } }],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const { compiled } = input;
|
|
34
|
+
if (compiled.language !== 'three')
|
|
35
|
+
refuse('three_only', `A room's floor script is a three.js module: it is given the room's floor, which a Blender build is not. Nothing was changed on ${name}.`, { target: zone.id });
|
|
36
|
+
if (!floorScriptInputs(nodes, zone.id))
|
|
37
|
+
refuse('no_floor', `${name} has no floor to build on (its walls do not close it, or its floor is off): nothing was changed.`, { target: zone.id });
|
|
38
|
+
const { min, max } = compiled.manifest.bounds;
|
|
39
|
+
if (![...min, ...max].every(Number.isFinite))
|
|
40
|
+
refuse('unmeasurable_object', `${name}'s floor script built geometry that cannot be measured: a mesh in it has a position, rotation or scale that is not a number. Nothing was changed.`, { target: zone.id });
|
|
41
|
+
const script = ZoneFloorScript.parse(floorScriptRecord(compiled, input.inputs, zone.floor?.script));
|
|
42
|
+
const floor = { ...zone.floor, script };
|
|
43
|
+
return {
|
|
44
|
+
result: {
|
|
45
|
+
ok: true,
|
|
46
|
+
zoneId: zone.id,
|
|
47
|
+
size: scriptedSize(compiled.manifest).map(round),
|
|
48
|
+
slots: compiled.manifest.slots.map((slot) => slot.id),
|
|
49
|
+
triangles: compiled.manifest.triangles,
|
|
50
|
+
note: `The script owns ${name}'s floor colours: painting that floor is refused until the script is removed. It runs again whenever the room's floor changes.`,
|
|
51
|
+
},
|
|
52
|
+
changes: { update: [{ id: zone.id, data: { floor } }] },
|
|
53
|
+
};
|
|
54
|
+
};
|
|
@@ -25,7 +25,7 @@ export declare const ROOM_OPERATIONS: {
|
|
|
25
25
|
width: number;
|
|
26
26
|
depth: number;
|
|
27
27
|
};
|
|
28
|
-
drawnOn?:
|
|
28
|
+
drawnOn?: 'floor' | 'ceiling';
|
|
29
29
|
cutsPrimary?: boolean;
|
|
30
30
|
cutsAdjacent?: boolean;
|
|
31
31
|
}>;
|
|
@@ -80,7 +80,7 @@ export declare const ROOM_OPERATIONS: {
|
|
|
80
80
|
}>;
|
|
81
81
|
readonly delete_zone: AgentOperation<{
|
|
82
82
|
zoneId: string;
|
|
83
|
-
contents:
|
|
83
|
+
contents: 'delete' | 'keep';
|
|
84
84
|
}>;
|
|
85
85
|
};
|
|
86
86
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-structure.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-structure.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,cAAc,EAAmD,MAAM,SAAS,CAAA;AA6G9F,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAUD,KAAK,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AA+JzD,uEAAuE;AACvE,eAAO,MAAM,eAAe
|
|
1
|
+
{"version":3,"file":"room-structure.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-structure.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,cAAc,EAAmD,MAAM,SAAS,CAAA;AA6G9F,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAUD,KAAK,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AA+JzD,uEAAuE;AACvE,eAAO,MAAM,eAAe;aAC1B,iBAAiB;kBA9JP,MAAM;iBACP,MAAM;mBACJ,MAAM,EAAE;kBACT,MAAM,EAAE,EAAE;eACb;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE;kBACnD,OAAO,GAAG,SAAS;sBACf,OAAO;uBACN,OAAO;;aAwJtB,oBAAoB;YA3IkC,MAAM;;aA4I5D,oBAAoB;eAtIkD,OAAO;;aAuI7E,2BAA2B;gBA7HnB,MAAM;iBACL,MAAM;eACR,OAAO;;aA4Hd,sBAAsB;iCAlHkB,MAAM,GAAG,IAAI;;aAmHrD,gBAAgB;oBA3GJ,MAAM;iBACT,MAAM,EAAE,EAAE;oBACP,MAAM;oBACN,MAAM;;aAyGlB,SAAS;aACT,cAAc;mBA1F+D,MAAM,EAAE;;aA2FrF,WAAW;gBAhFH,MAAM;sBACA,MAAM;mBACT,MAAM;gBACT,OAAO;;aA8Ef,kBAAkB;kBAhEwC,MAAM;kBAAY,MAAM,EAAE;;aAiEpF,eAAe;gBArDsC,MAAM;eAAS,OAAO;;aAsD3E,WAAW;gBA/CH,MAAM;cACR,MAAM,EAAE,EAAE;eACT,MAAM,EAAE,EAAE;iBACR,OAAO;0BACE,MAAM;wBACR,MAAM;;aA2CtB,WAAW;iBA7BwC,MAAM,EAAE;;aA8B3D,WAAW;gBAxBuC,MAAM;kBAAY,QAAQ,GAAG,MAAM;;CAyB7E,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { type DesignBrief } from '../agent-tools/design-brief.js';
|
|
2
|
+
import { type AnyNode } from '../schema/index.js';
|
|
3
|
+
import { type SceneMeasure } from './scene-measure.js';
|
|
4
|
+
import type { SceneChanges, SceneNodes } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* What an agent session keeps about its own work: the moments it named, and what it made. The core
|
|
7
|
+
* computes and reads these and stores none: each host keeps its record where its sessions live, so
|
|
8
|
+
* a checkpoint is never scene data (it would dirty the scene, enter undo and change its hash).
|
|
9
|
+
*/
|
|
10
|
+
/** One node as a checkpoint remembers it: enough to say what it was when it is gone. */
|
|
11
|
+
export type CheckpointNode = {
|
|
12
|
+
type: string;
|
|
13
|
+
levelId: string | null;
|
|
14
|
+
hash: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
};
|
|
17
|
+
/** A node the agent created, kept when it is later deleted: the proof it was there. */
|
|
18
|
+
export type MadeEntry = {
|
|
19
|
+
id: string;
|
|
20
|
+
type: string;
|
|
21
|
+
levelId: string | null;
|
|
22
|
+
name?: string;
|
|
23
|
+
};
|
|
24
|
+
export type SessionCheckpoint = {
|
|
25
|
+
name: string;
|
|
26
|
+
/** The registered families' places, for `changesSince` (windows, lit rooms…). */
|
|
27
|
+
measure: SceneMeasure;
|
|
28
|
+
nodes: Record<string, CheckpointNode>;
|
|
29
|
+
/** Issue ids an older version recorded; records taken now write none. */
|
|
30
|
+
issues: string[];
|
|
31
|
+
/** How many entries of the session's `made` list there were: what follows was made after it. */
|
|
32
|
+
madeAt: number;
|
|
33
|
+
};
|
|
34
|
+
export type SessionRecord = {
|
|
35
|
+
checkpoints: Record<string, SessionCheckpoint>;
|
|
36
|
+
made: MadeEntry[];
|
|
37
|
+
/** The design brief in force: the last one written, which furnishing follows (design_brief). */
|
|
38
|
+
designBrief?: DesignBrief;
|
|
39
|
+
/** The catalog ids view_assets showed: a brief keeps a catalog piece as it is only after one. */
|
|
40
|
+
viewed?: string[];
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* What an operation or a write asks its host to keep; a `designBrief` of null takes the brief away,
|
|
44
|
+
* `viewed` adds the catalog ids view_assets showed and null forgets them.
|
|
45
|
+
*/
|
|
46
|
+
export type SessionKeep = {
|
|
47
|
+
checkpoint?: SessionCheckpoint;
|
|
48
|
+
made?: readonly MadeEntry[];
|
|
49
|
+
designBrief?: DesignBrief | null;
|
|
50
|
+
viewed?: readonly string[] | null;
|
|
51
|
+
};
|
|
52
|
+
export declare const EMPTY_SESSION: SessionRecord;
|
|
53
|
+
/** A session names at most this many moments, `start` included. */
|
|
54
|
+
export declare const MAX_CHECKPOINTS = 8;
|
|
55
|
+
/** A checkpoint of a larger scene is refused: it is about 60 bytes a node, kept with the session. */
|
|
56
|
+
export declare const MAX_CHECKPOINT_NODES = 5000;
|
|
57
|
+
/** The made list stops growing here; the session record stays bounded. */
|
|
58
|
+
export declare const MAX_MADE = 20000;
|
|
59
|
+
/** The viewed list keeps the most recent ids up to here. */
|
|
60
|
+
export declare const MAX_VIEWED = 500;
|
|
61
|
+
/**
|
|
62
|
+
* The record after a keep: a checkpoint of the same name is replaced, made entries accumulate. A node
|
|
63
|
+
* is made once, however many writers report it, and the list only ever grows at its end (a
|
|
64
|
+
* checkpoint's `madeAt` indexes into it). What the scene had when the session began was never made
|
|
65
|
+
* by the agent: an undo that puts it back does not make it.
|
|
66
|
+
*/
|
|
67
|
+
export declare function keepInSession(session: SessionRecord, keep: SessionKeep): SessionRecord;
|
|
68
|
+
/**
|
|
69
|
+
* A node's fingerprint, eight hex digits. Its children are left out (a wall that gained a door did
|
|
70
|
+
* not change; the door is new) and so are the notes older versions kept in `metadata.coherence`: a
|
|
71
|
+
* session record taken before them must not read them as an edit of the building.
|
|
72
|
+
*/
|
|
73
|
+
export declare function hashNode(node: AnyNode): string;
|
|
74
|
+
/** The scene as a checkpoint remembers it: every node's fingerprint and the registered families' places. */
|
|
75
|
+
export declare function takeCheckpoint(nodes: SceneNodes, name: string, madeAt: number): SessionCheckpoint;
|
|
76
|
+
/** The nodes a write created, as the session remembers them. */
|
|
77
|
+
export declare function madeEntries(after: SceneNodes, written: readonly SceneChanges[]): MadeEntry[];
|
|
78
|
+
/**
|
|
79
|
+
* The nodes that are in `after` and were not in `before`: what a writer that diffs made, which is
|
|
80
|
+
* every tool that writes, whatever it calls to do so.
|
|
81
|
+
*/
|
|
82
|
+
export declare function createdBetween(before: SceneNodes, after: SceneNodes): MadeEntry[];
|
|
83
|
+
/**
|
|
84
|
+
* What a host keeps at a session's first call, before anything is written: the scene as it stood,
|
|
85
|
+
* under the name `start`. The beginning of the agent's work is always a checkpoint. Nothing when
|
|
86
|
+
* the session has one, or the scene is too large to remember.
|
|
87
|
+
*/
|
|
88
|
+
export declare function startOfSession(session: SessionRecord, nodes: SceneNodes): SessionKeep | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* A session record read back from where a host stored it. Anything that is not one is no record:
|
|
91
|
+
* the session starts empty rather than the host failing on what is only a convenience.
|
|
92
|
+
*/
|
|
93
|
+
export declare function parseSessionRecord(input: unknown): SessionRecord;
|
|
94
|
+
//# sourceMappingURL=scene-checkpoint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scene-checkpoint.d.ts","sourceRoot":"","sources":["../../src/agent-operations/scene-checkpoint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,KAAK,OAAO,EAAuB,MAAM,WAAW,CAAA;AAE7D,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEvD;;;;GAIG;AAEH,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAElG,uFAAuF;AACvF,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACrC,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC9C,IAAI,EAAE,SAAS,EAAE,CAAA;IACjB,gGAAgG;IAChG,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,aAA6C,CAAA;AAEzE,mEAAmE;AACnE,eAAO,MAAM,eAAe,IAAI,CAAA;AAChC,qGAAqG;AACrG,eAAO,MAAM,oBAAoB,OAAO,CAAA;AACxC,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,QAAS,CAAA;AAC9B,4DAA4D;AAC5D,eAAO,MAAM,UAAU,MAAM,CAAA;AAE7B;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,aAAa,CAyBtF;AAiBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAiB9C;AAKD,4GAA4G;AAC5G,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAgBjG;AAeD,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,EAAE,CAK5F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,CAIjF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAIjG;AAuCD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAGhE"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { DesignBriefRecord } from '../agent-tools/design-brief.js';
|
|
3
|
+
import { isDefaultGutterNode } from '../schema/index.js';
|
|
4
|
+
import { isDerivedNode } from '../store/derived-node-guard.js';
|
|
5
|
+
import { measureScene } from './scene-measure.js';
|
|
6
|
+
import { levelIdOf } from './scene-queries.js';
|
|
7
|
+
export const EMPTY_SESSION = { checkpoints: {}, made: [] };
|
|
8
|
+
/** A session names at most this many moments, `start` included. */
|
|
9
|
+
export const MAX_CHECKPOINTS = 8;
|
|
10
|
+
/** A checkpoint of a larger scene is refused: it is about 60 bytes a node, kept with the session. */
|
|
11
|
+
export const MAX_CHECKPOINT_NODES = 5000;
|
|
12
|
+
/** The made list stops growing here; the session record stays bounded. */
|
|
13
|
+
export const MAX_MADE = 20_000;
|
|
14
|
+
/** The viewed list keeps the most recent ids up to here. */
|
|
15
|
+
export const MAX_VIEWED = 500;
|
|
16
|
+
/**
|
|
17
|
+
* The record after a keep: a checkpoint of the same name is replaced, made entries accumulate. A node
|
|
18
|
+
* is made once, however many writers report it, and the list only ever grows at its end (a
|
|
19
|
+
* checkpoint's `madeAt` indexes into it). What the scene had when the session began was never made
|
|
20
|
+
* by the agent: an undo that puts it back does not make it.
|
|
21
|
+
*/
|
|
22
|
+
export function keepInSession(session, keep) {
|
|
23
|
+
const known = new Set(session.made.map((entry) => entry.id));
|
|
24
|
+
const began = session.checkpoints.start?.nodes;
|
|
25
|
+
const fresh = (keep.made ?? []).filter((entry) => {
|
|
26
|
+
if (known.has(entry.id) || began?.[entry.id])
|
|
27
|
+
return false;
|
|
28
|
+
known.add(entry.id);
|
|
29
|
+
return true;
|
|
30
|
+
});
|
|
31
|
+
const designBrief = 'designBrief' in keep ? keep.designBrief : session.designBrief;
|
|
32
|
+
const incomingViewed = new Set(keep.viewed ?? []);
|
|
33
|
+
const viewed = keep.viewed === null
|
|
34
|
+
? []
|
|
35
|
+
: [
|
|
36
|
+
...(session.viewed ?? []).filter((id) => !incomingViewed.has(id)),
|
|
37
|
+
...incomingViewed,
|
|
38
|
+
].slice(-MAX_VIEWED);
|
|
39
|
+
return {
|
|
40
|
+
checkpoints: keep.checkpoint
|
|
41
|
+
? { ...session.checkpoints, [keep.checkpoint.name]: keep.checkpoint }
|
|
42
|
+
: session.checkpoints,
|
|
43
|
+
made: fresh.length ? [...session.made, ...fresh].slice(0, MAX_MADE) : session.made,
|
|
44
|
+
...(designBrief ? { designBrief } : {}),
|
|
45
|
+
...(viewed.length ? { viewed } : {}),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const FNV_PRIME = 0x01000193;
|
|
49
|
+
/** Plain JSON in a fixed key order, numbers to a tenth of a millimetre, undefined dropped. */
|
|
50
|
+
function stable(value) {
|
|
51
|
+
if (typeof value === 'number')
|
|
52
|
+
return String(Math.round(value * 1e4) / 1e4);
|
|
53
|
+
if (value === null || typeof value !== 'object')
|
|
54
|
+
return JSON.stringify(value) ?? 'null';
|
|
55
|
+
if (Array.isArray(value))
|
|
56
|
+
return `[${value.map(stable).join(',')}]`;
|
|
57
|
+
const record = value;
|
|
58
|
+
return `{${Object.keys(record)
|
|
59
|
+
.sort()
|
|
60
|
+
.filter((key) => record[key] !== undefined)
|
|
61
|
+
.map((key) => `${JSON.stringify(key)}:${stable(record[key])}`)
|
|
62
|
+
.join(',')}}`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A node's fingerprint, eight hex digits. Its children are left out (a wall that gained a door did
|
|
66
|
+
* not change; the door is new) and so are the notes older versions kept in `metadata.coherence`: a
|
|
67
|
+
* session record taken before them must not read them as an edit of the building.
|
|
68
|
+
*/
|
|
69
|
+
export function hashNode(node) {
|
|
70
|
+
const { children: _children, metadata, ...rest } = node;
|
|
71
|
+
const { coherence: _notes, ...kept } = metadata ?? {};
|
|
72
|
+
let hash = 0x811c9dc5;
|
|
73
|
+
const text = stable({ ...rest, metadata: kept });
|
|
74
|
+
for (let index = 0; index < text.length; index++) {
|
|
75
|
+
hash ^= text.charCodeAt(index);
|
|
76
|
+
hash = Math.imul(hash, FNV_PRIME) >>> 0;
|
|
77
|
+
}
|
|
78
|
+
return hash.toString(16).padStart(8, '0');
|
|
79
|
+
}
|
|
80
|
+
const nameOf = (node) => typeof node.name === 'string' && node.name ? { name: node.name } : {};
|
|
81
|
+
/** The scene as a checkpoint remembers it: every node's fingerprint and the registered families' places. */
|
|
82
|
+
export function takeCheckpoint(nodes, name, madeAt) {
|
|
83
|
+
const remembered = {};
|
|
84
|
+
for (const node of Object.values(nodes))
|
|
85
|
+
remembered[node.id] = {
|
|
86
|
+
type: node.type,
|
|
87
|
+
levelId: levelIdOf(nodes, node.id),
|
|
88
|
+
hash: hashNode(node),
|
|
89
|
+
...nameOf(node),
|
|
90
|
+
};
|
|
91
|
+
return {
|
|
92
|
+
name,
|
|
93
|
+
measure: measureScene(nodes),
|
|
94
|
+
nodes: remembered,
|
|
95
|
+
issues: [],
|
|
96
|
+
madeAt,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Construction the editor derives from what the agent drew: floor plates, auto ceilings, default
|
|
101
|
+
* gutters. Their ids change as the reconciler rebuilds them, so none is a thing the agent made.
|
|
102
|
+
*/
|
|
103
|
+
const isDerivedConstruction = (node) => isDerivedNode(node) || isDefaultGutterNode(node);
|
|
104
|
+
const madeEntry = (nodes, node) => ({
|
|
105
|
+
id: node.id,
|
|
106
|
+
type: node.type,
|
|
107
|
+
levelId: levelIdOf(nodes, node.id),
|
|
108
|
+
...nameOf(node),
|
|
109
|
+
});
|
|
110
|
+
/** The nodes a write created, as the session remembers them. */
|
|
111
|
+
export function madeEntries(after, written) {
|
|
112
|
+
return written
|
|
113
|
+
.flatMap((changes) => (changes.create ?? []).map(({ node }) => after[node.id] ?? node))
|
|
114
|
+
.filter((node) => !isDerivedConstruction(node))
|
|
115
|
+
.map((node) => madeEntry(after, node));
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* The nodes that are in `after` and were not in `before`: what a writer that diffs made, which is
|
|
119
|
+
* every tool that writes, whatever it calls to do so.
|
|
120
|
+
*/
|
|
121
|
+
export function createdBetween(before, after) {
|
|
122
|
+
return Object.values(after)
|
|
123
|
+
.filter((node) => !(node.id in before) && !isDerivedConstruction(node))
|
|
124
|
+
.map((node) => madeEntry(after, node));
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* What a host keeps at a session's first call, before anything is written: the scene as it stood,
|
|
128
|
+
* under the name `start`. The beginning of the agent's work is always a checkpoint. Nothing when
|
|
129
|
+
* the session has one, or the scene is too large to remember.
|
|
130
|
+
*/
|
|
131
|
+
export function startOfSession(session, nodes) {
|
|
132
|
+
if (session.checkpoints.start || Object.keys(nodes).length > MAX_CHECKPOINT_NODES)
|
|
133
|
+
return undefined;
|
|
134
|
+
return { checkpoint: takeCheckpoint(nodes, 'start', session.made.length) };
|
|
135
|
+
}
|
|
136
|
+
const Place = z.object({ x: z.number(), z: z.number(), name: z.string().optional() });
|
|
137
|
+
const Measure = z.object({
|
|
138
|
+
levels: z.record(z.string(), z.object({ name: z.string(), families: z.record(z.string(), z.array(Place)) })),
|
|
139
|
+
});
|
|
140
|
+
const Remembered = z.object({
|
|
141
|
+
type: z.string(),
|
|
142
|
+
levelId: z.string().nullable(),
|
|
143
|
+
hash: z.string().regex(/^[0-9a-f]{8}$/),
|
|
144
|
+
name: z.string().optional(),
|
|
145
|
+
});
|
|
146
|
+
const Checkpoint = z.object({
|
|
147
|
+
name: z.string().min(1),
|
|
148
|
+
measure: Measure,
|
|
149
|
+
nodes: z
|
|
150
|
+
.record(z.string(), Remembered)
|
|
151
|
+
.refine((nodes) => Object.keys(nodes).length <= MAX_CHECKPOINT_NODES),
|
|
152
|
+
issues: z.array(z.string()),
|
|
153
|
+
madeAt: z.number().int().min(0),
|
|
154
|
+
});
|
|
155
|
+
const Made = z.object({
|
|
156
|
+
id: z.string(),
|
|
157
|
+
type: z.string(),
|
|
158
|
+
levelId: z.string().nullable(),
|
|
159
|
+
name: z.string().optional(),
|
|
160
|
+
});
|
|
161
|
+
const Record_ = z.object({
|
|
162
|
+
checkpoints: z
|
|
163
|
+
.record(z.string(), Checkpoint)
|
|
164
|
+
.refine((checkpoints) => Object.keys(checkpoints).length <= MAX_CHECKPOINTS),
|
|
165
|
+
made: z.array(Made).max(MAX_MADE),
|
|
166
|
+
designBrief: DesignBriefRecord.optional(),
|
|
167
|
+
viewed: z.array(z.string()).max(MAX_VIEWED).optional(),
|
|
168
|
+
});
|
|
169
|
+
/**
|
|
170
|
+
* A session record read back from where a host stored it. Anything that is not one is no record:
|
|
171
|
+
* the session starts empty rather than the host failing on what is only a convenience.
|
|
172
|
+
*/
|
|
173
|
+
export function parseSessionRecord(input) {
|
|
174
|
+
const parsed = Record_.safeParse(input);
|
|
175
|
+
return parsed.success ? parsed.data : EMPTY_SESSION;
|
|
176
|
+
}
|