@pascal-app/core 1.0.4 → 1.0.5
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,9 @@
|
|
|
1
|
+
import { type ProjectFileToolName } from '../agent-tools/project-files.js';
|
|
2
|
+
export type ProjectFileToolExecutor = (request: {
|
|
3
|
+
name: ProjectFileToolName;
|
|
4
|
+
projectId?: string;
|
|
5
|
+
input: Record<string, unknown>;
|
|
6
|
+
signal?: AbortSignal;
|
|
7
|
+
}) => Promise<unknown>;
|
|
8
|
+
export declare function executeProjectFileTool(name: string, raw: unknown, execute: ProjectFileToolExecutor, signal?: AbortSignal): Promise<unknown>;
|
|
9
|
+
//# sourceMappingURL=project-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-files.d.ts","sourceRoot":"","sources":["../../src/agent-operations/project-files.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGpG,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,mBAAmB,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtB,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,WAAW,oBA0BrB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { PROJECT_FILE_TOOL_CONTRACTS } from '../agent-tools/project-files.js';
|
|
3
|
+
import { AgentRefusal } from '../agent-tools/refusal.js';
|
|
4
|
+
export async function executeProjectFileTool(name, raw, execute, signal) {
|
|
5
|
+
const contract = PROJECT_FILE_TOOL_CONTRACTS.find((tool) => tool.name === name);
|
|
6
|
+
if (!contract)
|
|
7
|
+
throw new AgentRefusal('unknown_file_tool', 'This project file tool is not available.');
|
|
8
|
+
const parsed = z.object(contract.input).strict().safeParse(raw);
|
|
9
|
+
if (!parsed.success)
|
|
10
|
+
throw new AgentRefusal('invalid_file_input', 'Invalid project file input.', {
|
|
11
|
+
issues: parsed.error.issues,
|
|
12
|
+
});
|
|
13
|
+
const { projectId, ...input } = parsed.data;
|
|
14
|
+
if (name === 'upload_project_file') {
|
|
15
|
+
const valid = input.phase === 'text'
|
|
16
|
+
? typeof input.content === 'string'
|
|
17
|
+
: typeof input.size === 'number' &&
|
|
18
|
+
(input.phase === 'prepare' ||
|
|
19
|
+
(typeof input.fileId === 'string' && typeof input.storageKey === 'string'));
|
|
20
|
+
if (!valid)
|
|
21
|
+
throw new AgentRefusal('invalid_file_input', 'Text uploads need content; prepare needs size; complete needs size, fileId and storageKey.');
|
|
22
|
+
}
|
|
23
|
+
signal?.throwIfAborted();
|
|
24
|
+
return execute({ name: contract.name, projectId, input, signal });
|
|
25
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type SessionKeep, type SessionRecord } from './scene-checkpoint.js';
|
|
2
|
+
import type { SceneNodes } from './types.js';
|
|
3
|
+
/** What a surface lends the recorder: its scene and the session record it keeps. */
|
|
4
|
+
export type MadeRecorderHost = {
|
|
5
|
+
getNodes: () => SceneNodes;
|
|
6
|
+
readSession: () => SessionRecord;
|
|
7
|
+
keep: (keep: SessionKeep) => void;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Runs a call and keeps what it made in the agent's session: every node in the scene after it that
|
|
11
|
+
* was not before, whichever way the call wrote it (a tool of its own, a patch, a shell). Writers that
|
|
12
|
+
* report their own creations (`applyAgentOutcome`) say the same, and a node is made once.
|
|
13
|
+
*
|
|
14
|
+
* The session's first call also takes `start`, before anything is written. A call that replaces the
|
|
15
|
+
* scene (a load, a clear) begins another session, and what it lays down is not the agent's.
|
|
16
|
+
*/
|
|
17
|
+
export declare function recordMade<Result>(host: MadeRecorderHost, run: () => Promise<Result>): Promise<Result>;
|
|
18
|
+
//# sourceMappingURL=record-made.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"record-made.d.ts","sourceRoot":"","sources":["../../src/agent-operations/record-made.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,aAAa,EAEnB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,UAAU,CAAA;IAC1B,WAAW,EAAE,MAAM,aAAa,CAAA;IAChC,IAAI,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAA;CAClC,CAAA;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,MAAM,EACrC,IAAI,EAAE,gBAAgB,EACtB,GAAG,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,GACzB,OAAO,CAAC,MAAM,CAAC,CAejB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { createdBetween, startOfSession, } from './scene-checkpoint.js';
|
|
2
|
+
/**
|
|
3
|
+
* Runs a call and keeps what it made in the agent's session: every node in the scene after it that
|
|
4
|
+
* was not before, whichever way the call wrote it (a tool of its own, a patch, a shell). Writers that
|
|
5
|
+
* report their own creations (`applyAgentOutcome`) say the same, and a node is made once.
|
|
6
|
+
*
|
|
7
|
+
* The session's first call also takes `start`, before anything is written. A call that replaces the
|
|
8
|
+
* scene (a load, a clear) begins another session, and what it lays down is not the agent's.
|
|
9
|
+
*/
|
|
10
|
+
export async function recordMade(host, run) {
|
|
11
|
+
// A copy: a host may write its own map in place, and a "before" that grows reads nothing as new.
|
|
12
|
+
const before = { ...host.getNodes() };
|
|
13
|
+
const first = startOfSession(host.readSession(), before);
|
|
14
|
+
if (first)
|
|
15
|
+
host.keep(first);
|
|
16
|
+
const began = host.readSession().checkpoints.start;
|
|
17
|
+
try {
|
|
18
|
+
return await run();
|
|
19
|
+
}
|
|
20
|
+
finally {
|
|
21
|
+
// The session of a scene too large to remember has no start, and nothing to look back from.
|
|
22
|
+
if (began && host.readSession().checkpoints.start === began) {
|
|
23
|
+
const made = createdBetween(before, host.getNodes());
|
|
24
|
+
if (made.length)
|
|
25
|
+
host.keep({ made });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
type Pt = [number, number];
|
|
2
|
+
export type RoofRectangle = {
|
|
3
|
+
minX: number;
|
|
4
|
+
maxX: number;
|
|
5
|
+
minZ: number;
|
|
6
|
+
maxZ: number;
|
|
7
|
+
};
|
|
8
|
+
export type RoofFootprint = {
|
|
9
|
+
rectangles: RoofRectangle[];
|
|
10
|
+
roofType: 'gable' | 'hip' | 'flat';
|
|
11
|
+
};
|
|
12
|
+
export declare function roofRectangles(polygons: readonly (readonly Pt[])[]): RoofFootprint;
|
|
13
|
+
/**
|
|
14
|
+
* The frame a roof is swept in: the footprint's own axes, from its longest edge, so a rotated
|
|
15
|
+
* building gets whole wings, not a staircase of segments along the world axes. The rotation
|
|
16
|
+
* convention is a roof node's: local (x, z) → (x c + z s, -x s + z c).
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildingFrame(polygons: readonly (readonly Pt[])[]): {
|
|
19
|
+
angle: number;
|
|
20
|
+
polygons: Pt[][];
|
|
21
|
+
toWorld: ([x, z]: Pt) => Pt;
|
|
22
|
+
};
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=roof-footprint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roof-footprint.d.ts","sourceRoot":"","sources":["../../src/agent-operations/roof-footprint.ts"],"names":[],"mappings":"AAOA,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAC1B,MAAM,MAAM,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AACtF,MAAM,MAAM,aAAa,GAAG;IAAE,UAAU,EAAE,aAAa,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM,CAAA;CAAE,CAAA;AAoE/F,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE,GAAG,aAAa,CA6HlF;AA4DD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,EAAE;;;sBAmB5C,EAAE,KAAG,EAAE;EAE5B"}
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
// The rectangles a roof is built from, one roof segment each: the footprint's wings, each as long
|
|
2
|
+
// as it runs inside the footprint, so they overlap where they meet. The roof renders their union,
|
|
3
|
+
// so a wing's hips meet the body's slopes in valleys; wings cut where they meet put a hip end each
|
|
4
|
+
// side of the cut, a notch along the joint. Coordinates scaled from a plan carry float noise that
|
|
5
|
+
// slices the footprint into hundreds of slivers, so the footprint is snapped first, balcony-thin
|
|
6
|
+
// strips join their larger neighbour, and a pathological footprint falls back to its bounding box.
|
|
7
|
+
/** Coordinates snap to 10 cm. */
|
|
8
|
+
const snap = (value) => Math.round(value * 10) / 10;
|
|
9
|
+
/** Parts thinner than this (balconies, slivers) get no roof of their own. */
|
|
10
|
+
const MIN_PART = 1.5;
|
|
11
|
+
const MAX_SEGMENTS = 24;
|
|
12
|
+
/** A house has up to this many wings under hips; past it the roof is flat. */
|
|
13
|
+
const MAX_HIP_WINGS = 6;
|
|
14
|
+
/** A footprint longer than this is a block, not a house: its roof is flat. */
|
|
15
|
+
const BLOCK_LENGTH = 30;
|
|
16
|
+
function inside(polygon, x, z) {
|
|
17
|
+
let crossed = false;
|
|
18
|
+
for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
|
|
19
|
+
const [ax, az] = polygon[i];
|
|
20
|
+
const [bx, bz] = polygon[j];
|
|
21
|
+
if (az > z !== bz > z && x < ((bx - ax) * (z - az)) / (bz - az) + ax)
|
|
22
|
+
crossed = !crossed;
|
|
23
|
+
}
|
|
24
|
+
return crossed;
|
|
25
|
+
}
|
|
26
|
+
/** The footprint is the union of its plates: where two slabs overlap, both cover it. */
|
|
27
|
+
const insideAny = (polygons, x, z) => polygons.some((polygon) => inside(polygon, x, z));
|
|
28
|
+
/**
|
|
29
|
+
* A strip of cells thinner than a part keeps only what its larger neighbour along the other axis
|
|
30
|
+
* also has: balconies drop out and the wings they stand on stay whole. Along z, then along x.
|
|
31
|
+
*/
|
|
32
|
+
function dropThinStrips(cells, xs, zs) {
|
|
33
|
+
const sweep = (rows, columns, at, set, size) => {
|
|
34
|
+
for (let r = 0; r < rows; r++) {
|
|
35
|
+
if (size(r) >= MIN_PART)
|
|
36
|
+
continue;
|
|
37
|
+
const neighbours = [r - 1, r + 1].filter((n) => n >= 0 && n < rows && size(n) >= MIN_PART);
|
|
38
|
+
const larger = neighbours.sort((a, b) => size(b) - size(a))[0];
|
|
39
|
+
if (larger === undefined)
|
|
40
|
+
continue;
|
|
41
|
+
for (let c = 0; c < columns; c++)
|
|
42
|
+
if (at(r, c) && !at(larger, c))
|
|
43
|
+
set(r, c);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const nx = xs.length - 1;
|
|
47
|
+
const nz = zs.length - 1;
|
|
48
|
+
sweep(nz, nx, (j, i) => cells[i][j], (j, i) => {
|
|
49
|
+
cells[i][j] = false;
|
|
50
|
+
}, (j) => zs[j + 1] - zs[j]);
|
|
51
|
+
sweep(nx, nz, (i, j) => cells[i][j], (i, j) => {
|
|
52
|
+
cells[i][j] = false;
|
|
53
|
+
}, (i) => xs[i + 1] - xs[i]);
|
|
54
|
+
}
|
|
55
|
+
export function roofRectangles(polygons) {
|
|
56
|
+
const snapped = polygons.map((polygon) => polygon.map(([x, z]) => [snap(x), snap(z)]));
|
|
57
|
+
const all = snapped.flat();
|
|
58
|
+
const bounds = {
|
|
59
|
+
minX: Math.min(...all.map((point) => point[0])),
|
|
60
|
+
maxX: Math.max(...all.map((point) => point[0])),
|
|
61
|
+
minZ: Math.min(...all.map((point) => point[1])),
|
|
62
|
+
maxZ: Math.max(...all.map((point) => point[1])),
|
|
63
|
+
};
|
|
64
|
+
const xs = [...new Set(all.map((point) => point[0]))].sort((a, b) => a - b);
|
|
65
|
+
const zs = [...new Set(all.map((point) => point[1]))].sort((a, b) => a - b);
|
|
66
|
+
const nx = xs.length - 1;
|
|
67
|
+
const nz = zs.length - 1;
|
|
68
|
+
const cells = Array.from({ length: nx }, (_, i) => Array.from({ length: nz }, (_, j) => insideAny(snapped, (xs[i] + xs[i + 1]) / 2, (zs[j] + zs[j + 1]) / 2)));
|
|
69
|
+
dropThinStrips(cells, xs, zs);
|
|
70
|
+
// Inside cells counted from the corner, to test a rectangle in one step.
|
|
71
|
+
const count = Array.from({ length: nx + 1 }, () => new Array(nz + 1).fill(0));
|
|
72
|
+
for (let i = 0; i < nx; i++)
|
|
73
|
+
for (let j = 0; j < nz; j++)
|
|
74
|
+
count[i + 1][j + 1] =
|
|
75
|
+
(cells[i][j] ? 1 : 0) + count[i][j + 1] + count[i + 1][j] - count[i][j];
|
|
76
|
+
const filled = (i0, i1, j0, j1) => i0 >= 0 &&
|
|
77
|
+
j0 >= 0 &&
|
|
78
|
+
i1 <= nx &&
|
|
79
|
+
j1 <= nz &&
|
|
80
|
+
count[i1][j1] - count[i0][j1] - count[i1][j0] + count[i0][j0] === (i1 - i0) * (j1 - j0);
|
|
81
|
+
const wings = [];
|
|
82
|
+
for (let i0 = 0; i0 < nx; i0++)
|
|
83
|
+
for (let i1 = i0 + 1; i1 <= nx; i1++) {
|
|
84
|
+
if (!filled(i0, i1, 0, 0) && xs[i1] - xs[i0] < MIN_PART && i1 < nx)
|
|
85
|
+
continue;
|
|
86
|
+
for (let j0 = 0; j0 < nz; j0++)
|
|
87
|
+
for (let j1 = j0 + 1; j1 <= nz; j1++) {
|
|
88
|
+
if (!filled(i0, i1, j0, j1))
|
|
89
|
+
break;
|
|
90
|
+
if (xs[i1] - xs[i0] < MIN_PART || zs[j1] - zs[j0] < MIN_PART)
|
|
91
|
+
continue;
|
|
92
|
+
const extends_ = filled(i0 - 1, i1, j0, j1) ||
|
|
93
|
+
filled(i0, i1 + 1, j0, j1) ||
|
|
94
|
+
filled(i0, i1, j0 - 1, j1) ||
|
|
95
|
+
filled(i0, i1, j0, j1 + 1);
|
|
96
|
+
if (!extends_)
|
|
97
|
+
wings.push({ i0, i1, j0, j1 });
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// Greedy: the wing covering most of what is left, the longer through the body on a tie, until
|
|
101
|
+
// what is left is smaller than a part.
|
|
102
|
+
const covered = cells.map((column) => column.map(() => false));
|
|
103
|
+
const area = (w) => (xs[w.i1] - xs[w.i0]) * (zs[w.j1] - zs[w.j0]);
|
|
104
|
+
const gain = (w) => {
|
|
105
|
+
let total = 0;
|
|
106
|
+
for (let i = w.i0; i < w.i1; i++)
|
|
107
|
+
for (let j = w.j0; j < w.j1; j++)
|
|
108
|
+
if (!covered[i][j])
|
|
109
|
+
total += (xs[i + 1] - xs[i]) * (zs[j + 1] - zs[j]);
|
|
110
|
+
return total;
|
|
111
|
+
};
|
|
112
|
+
const rectangles = [];
|
|
113
|
+
while (rectangles.length <= MAX_SEGMENTS) {
|
|
114
|
+
let best = null;
|
|
115
|
+
let bestGain = 0;
|
|
116
|
+
for (const wing of wings) {
|
|
117
|
+
const g = gain(wing);
|
|
118
|
+
if (g > bestGain + 1e-9 ||
|
|
119
|
+
(best && Math.abs(g - bestGain) <= 1e-9 && area(wing) > area(best))) {
|
|
120
|
+
best = wing;
|
|
121
|
+
bestGain = g;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (!best || bestGain < MIN_PART * MIN_PART)
|
|
125
|
+
break;
|
|
126
|
+
for (let i = best.i0; i < best.i1; i++)
|
|
127
|
+
for (let j = best.j0; j < best.j1; j++)
|
|
128
|
+
covered[i][j] = true;
|
|
129
|
+
rectangles.push({
|
|
130
|
+
minX: xs[best.i0],
|
|
131
|
+
maxX: xs[best.i1],
|
|
132
|
+
minZ: zs[best.j0],
|
|
133
|
+
maxZ: zs[best.j1],
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Outside the footprint within a rectangle on the grid: what a roof over it adds past the house.
|
|
137
|
+
const inside = Array.from({ length: nx + 1 }, () => new Array(nz + 1).fill(0));
|
|
138
|
+
for (let i = 0; i < nx; i++)
|
|
139
|
+
for (let j = 0; j < nz; j++)
|
|
140
|
+
inside[i + 1][j + 1] =
|
|
141
|
+
(cells[i][j] ? (xs[i + 1] - xs[i]) * (zs[j + 1] - zs[j]) : 0) +
|
|
142
|
+
inside[i][j + 1] +
|
|
143
|
+
inside[i + 1][j] -
|
|
144
|
+
inside[i][j];
|
|
145
|
+
const at = (values, value) => values.indexOf(value);
|
|
146
|
+
const outside = (r) => {
|
|
147
|
+
const [i0, i1, j0, j1] = [at(xs, r.minX), at(xs, r.maxX), at(zs, r.minZ), at(zs, r.maxZ)];
|
|
148
|
+
const within = inside[i1][j1] - inside[i0][j1] - inside[i1][j0] + inside[i0][j0];
|
|
149
|
+
return (r.maxX - r.minX) * (r.maxZ - r.minZ) - within;
|
|
150
|
+
};
|
|
151
|
+
// Of a rectangle, how much the others cover: on the grid, cell by cell.
|
|
152
|
+
const coveredBy = (r, others) => {
|
|
153
|
+
let total = 0;
|
|
154
|
+
for (let i = at(xs, r.minX); i < at(xs, r.maxX); i++)
|
|
155
|
+
for (let j = at(zs, r.minZ); j < at(zs, r.maxZ); j++) {
|
|
156
|
+
const [cx, cz] = [(xs[i] + xs[i + 1]) / 2, (zs[j] + zs[j + 1]) / 2];
|
|
157
|
+
if (others.some((o) => cx > o.minX && cx < o.maxX && cz > o.minZ && cz < o.maxZ))
|
|
158
|
+
total += (xs[i + 1] - xs[i]) * (zs[j + 1] - zs[j]);
|
|
159
|
+
}
|
|
160
|
+
return total;
|
|
161
|
+
};
|
|
162
|
+
const absorbed = mergeWings(rectangles, outside, coveredBy);
|
|
163
|
+
const chosen = absorbed.length === 0 || absorbed.length > MAX_SEGMENTS ? [bounds] : absorbed;
|
|
164
|
+
const long = Math.max(bounds.maxX - bounds.minX, bounds.maxZ - bounds.minZ);
|
|
165
|
+
const roofType = long > BLOCK_LENGTH || chosen.length > MAX_HIP_WINGS
|
|
166
|
+
? 'flat'
|
|
167
|
+
: chosen.length === 1
|
|
168
|
+
? 'gable'
|
|
169
|
+
: 'hip';
|
|
170
|
+
return { rectangles: chosen, roofType };
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* A merge may add roof outside the house up to this share of what the wing it takes in covered on
|
|
174
|
+
* its own: a jog's corners against its band, not a projection's notches against its own hip.
|
|
175
|
+
*/
|
|
176
|
+
const MERGE_SHARE = 0.5;
|
|
177
|
+
/**
|
|
178
|
+
* A roof runs over a jog: two wings become their bounding rectangle when that adds little roof
|
|
179
|
+
* outside the house against what the wing taken in covered on its own (a strip along a jog, a band
|
|
180
|
+
* a few decimetres proud). A garage, a projection, a courtyard's arms cover more on their own than a
|
|
181
|
+
* merge would add outside, and keep their hips.
|
|
182
|
+
*/
|
|
183
|
+
function mergeWings(wings, outside, covered) {
|
|
184
|
+
const area = (r) => (r.maxX - r.minX) * (r.maxZ - r.minZ);
|
|
185
|
+
const union = (a, b) => ({
|
|
186
|
+
minX: Math.min(a.minX, b.minX),
|
|
187
|
+
maxX: Math.max(a.maxX, b.maxX),
|
|
188
|
+
minZ: Math.min(a.minZ, b.minZ),
|
|
189
|
+
maxZ: Math.max(a.maxZ, b.maxZ),
|
|
190
|
+
});
|
|
191
|
+
const contains = (a, b) => a.minX <= b.minX && a.maxX >= b.maxX && a.minZ <= b.minZ && a.maxZ >= b.maxZ;
|
|
192
|
+
let current = [...wings];
|
|
193
|
+
while (true) {
|
|
194
|
+
let best = null;
|
|
195
|
+
for (const keep of current)
|
|
196
|
+
for (const take of current) {
|
|
197
|
+
if (keep === take)
|
|
198
|
+
continue;
|
|
199
|
+
// What the wing taken in covers that no other wing does.
|
|
200
|
+
const own = area(take) -
|
|
201
|
+
covered(take, current.filter((r) => r !== take));
|
|
202
|
+
if (own <= 0)
|
|
203
|
+
continue;
|
|
204
|
+
const grown = union(keep, take);
|
|
205
|
+
const ratio = (outside(grown) - outside(keep)) / own;
|
|
206
|
+
if (ratio <= MERGE_SHARE + 1e-9 && (!best || ratio < best.ratio))
|
|
207
|
+
best = { keep, take, grown, ratio };
|
|
208
|
+
}
|
|
209
|
+
if (!best)
|
|
210
|
+
return current;
|
|
211
|
+
const { keep, take, grown } = best;
|
|
212
|
+
current = current
|
|
213
|
+
.map((r) => (r === keep ? grown : r))
|
|
214
|
+
.filter((r) => r === grown || (r !== take && !contains(grown, r)));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* The frame a roof is swept in: the footprint's own axes, from its longest edge, so a rotated
|
|
219
|
+
* building gets whole wings, not a staircase of segments along the world axes. The rotation
|
|
220
|
+
* convention is a roof node's: local (x, z) → (x c + z s, -x s + z c).
|
|
221
|
+
*/
|
|
222
|
+
export function buildingFrame(polygons) {
|
|
223
|
+
let longest = { length: 0, dx: 1, dz: 0 };
|
|
224
|
+
for (const polygon of polygons)
|
|
225
|
+
for (let i = 0; i < polygon.length; i++) {
|
|
226
|
+
const [ax, az] = polygon[i];
|
|
227
|
+
const [bx, bz] = polygon[(i + 1) % polygon.length];
|
|
228
|
+
const length = Math.hypot(bx - ax, bz - az);
|
|
229
|
+
if (length > longest.length)
|
|
230
|
+
longest = { length, dx: bx - ax, dz: bz - az };
|
|
231
|
+
}
|
|
232
|
+
// The local x axis runs along the longest edge, turned to the nearest quarter of the world's.
|
|
233
|
+
const edge = Math.atan2(-longest.dz, longest.dx);
|
|
234
|
+
const angle = edge - Math.round(edge / (Math.PI / 2)) * (Math.PI / 2);
|
|
235
|
+
const c = Math.cos(angle);
|
|
236
|
+
const s = Math.sin(angle);
|
|
237
|
+
return {
|
|
238
|
+
angle,
|
|
239
|
+
polygons: polygons.map((polygon) => polygon.map(([x, z]) => [x * c - z * s, x * s + z * c])),
|
|
240
|
+
toWorld: ([x, z]) => [x * c + z * s, -x * s + z * c],
|
|
241
|
+
};
|
|
242
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AgentRefusal } from '../agent-tools/refusal.js';
|
|
2
|
+
import type { NodeWrite, SceneNodes } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Storey content aimed at a level serving as its building's roof level: the refusal, naming the
|
|
5
|
+
* storey it covers so one retry lands; null on a storey.
|
|
6
|
+
*/
|
|
7
|
+
export declare function roofLevelRefusal(nodes: SceneNodes, levelId: string, what: string): AgentRefusal | null;
|
|
8
|
+
/** A level serving as its building's roof level holds roofs, not rooms: storey content is refused there. */
|
|
9
|
+
export declare function refuseRoofLevel(nodes: SceneNodes, levelId: string, what: string): void;
|
|
10
|
+
/**
|
|
11
|
+
* The rule on a write's operations, in their order, against the scene they write to: storey
|
|
12
|
+
* content created or moved onto a roof level (`roof_level`), a walled level declared the roof level
|
|
13
|
+
* (`roof_level_holds_storey`) and floor indexes putting a roof level under a storey
|
|
14
|
+
* (`roof_level_on_top`) are refused, naming the operation's index. A storey created at or above a
|
|
15
|
+
* roof level moves the roof levels up over it, and each roof the write puts on its walls' storey
|
|
16
|
+
* is seated (`planRoofSeats`): both appended to `ops` as operations of their own, so every index
|
|
17
|
+
* stays the model's. Returns a note per change.
|
|
18
|
+
*/
|
|
19
|
+
export declare function seatWrittenRoofs(ops: NodeWrite[], scene: SceneNodes): string[];
|
|
20
|
+
//# sourceMappingURL=roof-writes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roof-writes.d.ts","sourceRoot":"","sources":["../../src/agent-operations/roof-writes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAU,MAAM,wBAAwB,CAAA;AAc7D,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AA2BpD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,YAAY,GAAG,IAAI,CAKrB;AAED,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAG/E;AASD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,GAAG,MAAM,EAAE,CA0I9E"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { AgentRefusal, refuse } from '../agent-tools/refusal.js';
|
|
2
|
+
import { getLevelDisplayName } from '../lib/level-name.js';
|
|
3
|
+
import { parseNode } from '../schema/index.js';
|
|
4
|
+
import { isRoofGeometry, isRoofLevel, isStoreyContent, liftRoofLevels, roofLevelOrderBreach, servesAsRoofLevel, storeyOf, } from '../services/roof-level.js';
|
|
5
|
+
import { planRoofSeats } from '../services/roof-move.js';
|
|
6
|
+
import { applySceneWrites } from './apply-changes.js';
|
|
7
|
+
/**
|
|
8
|
+
* The roof-level rule on writes that name every node and parent themselves (apply_patch,
|
|
9
|
+
* update_node, a saved graph): a roof written on the storey whose walls carry it goes to the level
|
|
10
|
+
* above, said in a note; what the rule cannot place is refused, naming what would work.
|
|
11
|
+
*/
|
|
12
|
+
const nameOf = (nodes, id) => {
|
|
13
|
+
const node = nodes[id];
|
|
14
|
+
return node?.type === 'level' ? `${getLevelDisplayName(node)} (${id})` : id;
|
|
15
|
+
};
|
|
16
|
+
function onRoofLevel(nodes, levelId, what, details = {}) {
|
|
17
|
+
const storeyId = storeyOf(nodes, levelId);
|
|
18
|
+
return new AgentRefusal('roof_level', `${nameOf(nodes, levelId)} is a roof level, not a storey: ${what} belongs on a storey${storeyId === levelId ? '' : `, such as ${nameOf(nodes, storeyId)}, the one it covers`}. Add a storey with add_level if the building needs one.`, { ...details, levelId, storeyId });
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Storey content aimed at a level serving as its building's roof level: the refusal, naming the
|
|
22
|
+
* storey it covers so one retry lands; null on a storey.
|
|
23
|
+
*/
|
|
24
|
+
export function roofLevelRefusal(nodes, levelId, what) {
|
|
25
|
+
const level = nodes[levelId];
|
|
26
|
+
return level?.type === 'level' && servesAsRoofLevel(nodes, level)
|
|
27
|
+
? onRoofLevel(nodes, levelId, what)
|
|
28
|
+
: null;
|
|
29
|
+
}
|
|
30
|
+
/** A level serving as its building's roof level holds roofs, not rooms: storey content is refused there. */
|
|
31
|
+
export function refuseRoofLevel(nodes, levelId, what) {
|
|
32
|
+
const refusal = roofLevelRefusal(nodes, levelId, what);
|
|
33
|
+
if (refusal)
|
|
34
|
+
throw refusal;
|
|
35
|
+
}
|
|
36
|
+
const roleOf = (write) => write.op === 'create'
|
|
37
|
+
? write.node.metadata?.role
|
|
38
|
+
: write.op === 'update'
|
|
39
|
+
? write.data.metadata?.role
|
|
40
|
+
: undefined;
|
|
41
|
+
/**
|
|
42
|
+
* The rule on a write's operations, in their order, against the scene they write to: storey
|
|
43
|
+
* content created or moved onto a roof level (`roof_level`), a walled level declared the roof level
|
|
44
|
+
* (`roof_level_holds_storey`) and floor indexes putting a roof level under a storey
|
|
45
|
+
* (`roof_level_on_top`) are refused, naming the operation's index. A storey created at or above a
|
|
46
|
+
* roof level moves the roof levels up over it, and each roof the write puts on its walls' storey
|
|
47
|
+
* is seated (`planRoofSeats`): both appended to `ops` as operations of their own, so every index
|
|
48
|
+
* stays the model's. Returns a note per change.
|
|
49
|
+
*/
|
|
50
|
+
export function seatWrittenRoofs(ops, scene) {
|
|
51
|
+
// Parsed as the store creates them, so a level written without `children` gets its list.
|
|
52
|
+
const writes = ops.map((write) => {
|
|
53
|
+
if (write.op !== 'create')
|
|
54
|
+
return write;
|
|
55
|
+
const parsed = parseNode(write.node);
|
|
56
|
+
return { ...write, node: parsed.success ? parsed.data : write.node };
|
|
57
|
+
});
|
|
58
|
+
const after = applySceneWrites(scene, writes);
|
|
59
|
+
writes.forEach((write, index) => {
|
|
60
|
+
const placed = write.op === 'create'
|
|
61
|
+
? {
|
|
62
|
+
id: write.node.id,
|
|
63
|
+
type: write.node.type,
|
|
64
|
+
parentId: write.parentId ?? write.node.parentId,
|
|
65
|
+
metadata: after[write.node.id]?.metadata,
|
|
66
|
+
}
|
|
67
|
+
: write.op === 'update' &&
|
|
68
|
+
(typeof write.data.parentId === 'string' ||
|
|
69
|
+
(isRoofGeometry(scene[write.id]) && !isRoofGeometry(after[write.id])))
|
|
70
|
+
? after[write.id]
|
|
71
|
+
: null;
|
|
72
|
+
if (!placed?.parentId || !isStoreyContent(placed.type, placed.metadata))
|
|
73
|
+
return;
|
|
74
|
+
// A retained assembly's separately addressed children still belong to its level.
|
|
75
|
+
let parentId = placed.parentId;
|
|
76
|
+
let retainedRoofAncestor = false;
|
|
77
|
+
const seen = new Set();
|
|
78
|
+
while (after[parentId]?.type === 'item' && !seen.has(parentId)) {
|
|
79
|
+
seen.add(parentId);
|
|
80
|
+
retainedRoofAncestor ||= isRoofGeometry(after[parentId]);
|
|
81
|
+
const next = after[parentId]?.parentId;
|
|
82
|
+
if (!next)
|
|
83
|
+
break;
|
|
84
|
+
parentId = next;
|
|
85
|
+
}
|
|
86
|
+
if (!retainedRoofAncestor)
|
|
87
|
+
parentId = placed.parentId;
|
|
88
|
+
const prior = scene[parentId];
|
|
89
|
+
const what = `a ${placed.type}`;
|
|
90
|
+
if (isRoofLevel(after[parentId]))
|
|
91
|
+
throw onRoofLevel(after, parentId, what, { index, id: placed.id });
|
|
92
|
+
if (prior?.type === 'level' && servesAsRoofLevel(scene, prior))
|
|
93
|
+
throw onRoofLevel(scene, parentId, what, { index, id: placed.id });
|
|
94
|
+
});
|
|
95
|
+
writes.forEach((write, index) => {
|
|
96
|
+
const id = write.op === 'create' ? write.node.id : write.op === 'update' ? write.id : null;
|
|
97
|
+
const level = id ? after[id] : undefined;
|
|
98
|
+
if (!id || roleOf(write) !== 'roof' || isRoofLevel(scene[id]) || level?.type !== 'level')
|
|
99
|
+
return;
|
|
100
|
+
const held = [
|
|
101
|
+
...new Set(level.children
|
|
102
|
+
.map((child) => after[child])
|
|
103
|
+
.filter((child) => isStoreyContent(child?.type, child?.metadata))
|
|
104
|
+
.map((child) => child.type)),
|
|
105
|
+
];
|
|
106
|
+
if (held.length)
|
|
107
|
+
refuse('roof_level_holds_storey', `${nameOf(after, id)} holds ${held.map((type) => `a ${type}`).join(', ')}, a storey's content, so it cannot be declared the roof level: a roof level holds roofs only. create_roof puts a roof over a storey on the level the rule gives it.`, { index, id, levelId: id });
|
|
108
|
+
});
|
|
109
|
+
const floors = new Map(writes.flatMap((write) => write.op === 'update' &&
|
|
110
|
+
typeof write.data.level === 'number' &&
|
|
111
|
+
scene[write.id]?.type === 'level'
|
|
112
|
+
? [[write.id, write.data.level]]
|
|
113
|
+
: []));
|
|
114
|
+
const breach = floors.size ? roofLevelOrderBreach(scene, floors) : null;
|
|
115
|
+
if (breach) {
|
|
116
|
+
const index = writes.findIndex((write) => write.op === 'update' &&
|
|
117
|
+
floors.has(write.id) &&
|
|
118
|
+
(write.id === breach.roofId || write.id === breach.storeyId));
|
|
119
|
+
refuse('roof_level_on_top', `This write puts ${nameOf(after, breach.roofId)}, the roof level, under the storey ${nameOf(after, breach.storeyId)}: a building's roof level stays above its storeys. Keep its floor index over theirs; a new storey goes under it (add_level).`, {
|
|
120
|
+
index,
|
|
121
|
+
id: writes[index].id,
|
|
122
|
+
levelId: breach.roofId,
|
|
123
|
+
storeyId: breach.storeyId,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
const notes = [];
|
|
127
|
+
const appended = [];
|
|
128
|
+
// A storey created at or above a roof level, or a roof level created at or under a storey: the
|
|
129
|
+
// building's roof levels go up over its storeys.
|
|
130
|
+
const buildings = new Set(writes.flatMap((write) => write.op === 'create' && write.node.type === 'level' ? [after[write.node.id]?.parentId] : []));
|
|
131
|
+
for (const buildingId of buildings) {
|
|
132
|
+
if (!buildingId)
|
|
133
|
+
continue;
|
|
134
|
+
for (const { id, data } of liftRoofLevels(scene, after, buildingId)) {
|
|
135
|
+
appended.push({ op: 'update', id, data });
|
|
136
|
+
notes.push(`${nameOf(after, id)} moved up to floor index ${data.level}: a building's roof level stays above its storeys.`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const seat = planRoofSeats(scene, applySceneWrites(after, appended));
|
|
140
|
+
if (seat) {
|
|
141
|
+
const moved = new Map(seat.changes.update.map(({ id, data }) => [id, data.parentId]));
|
|
142
|
+
// A parent the write creates listing a roof the seat moves would list it twice.
|
|
143
|
+
for (const write of ops) {
|
|
144
|
+
if (write.op !== 'create')
|
|
145
|
+
continue;
|
|
146
|
+
const children = write.node.children;
|
|
147
|
+
if (!Array.isArray(children))
|
|
148
|
+
continue;
|
|
149
|
+
const kept = children.filter((id) => {
|
|
150
|
+
const to = moved.get(id);
|
|
151
|
+
return to === undefined || to === write.node.id;
|
|
152
|
+
});
|
|
153
|
+
if (kept.length !== children.length)
|
|
154
|
+
write.node = { ...write.node, children: kept };
|
|
155
|
+
}
|
|
156
|
+
appended.push(...seat.changes.create.map(({ node, parentId }) => ({
|
|
157
|
+
op: 'create',
|
|
158
|
+
node,
|
|
159
|
+
...(parentId ? { parentId } : {}),
|
|
160
|
+
})), ...seat.changes.update.map(({ id, data }) => ({ op: 'update', id, data })));
|
|
161
|
+
notes.push(...seat.notes);
|
|
162
|
+
}
|
|
163
|
+
ops.push(...appended);
|
|
164
|
+
return notes;
|
|
165
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import type { SceneNodes } from './types.js';
|
|
2
|
+
/** A space the walls and separators enclose, where a finding about it places it. */
|
|
3
|
+
type SpacePlace = {
|
|
4
|
+
levelId: string;
|
|
5
|
+
/** The space's floor area, m². */
|
|
6
|
+
area: number;
|
|
7
|
+
/** A point inside the space, in plan [x, z]. */
|
|
8
|
+
at: [number, number];
|
|
9
|
+
wallIds: string[];
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* A level's rooms against the spaces its walls and separators enclose (the editor's detected
|
|
13
|
+
* spaces): a space no zone covers, a space several zones split, a room the walls do not close, a
|
|
14
|
+
* room with no name.
|
|
15
|
+
*/
|
|
16
|
+
export type RoomFinding = ({
|
|
17
|
+
type: 'space_no_room';
|
|
18
|
+
message: string;
|
|
19
|
+
} & SpacePlace) | ({
|
|
20
|
+
type: 'space_many_rooms';
|
|
21
|
+
message: string;
|
|
22
|
+
zoneIds: string[];
|
|
23
|
+
} & SpacePlace) | {
|
|
24
|
+
type: 'room_not_enclosed';
|
|
25
|
+
message: string;
|
|
26
|
+
/** On a zone left generic: a room still missing a wall, or a courtyard. */
|
|
27
|
+
severity?: 'info';
|
|
28
|
+
levelId: string;
|
|
29
|
+
zoneId: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'room_unnamed';
|
|
32
|
+
message: string;
|
|
33
|
+
severity: 'info';
|
|
34
|
+
levelId: string;
|
|
35
|
+
zoneId: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* A room is a zone with `spaceRole: 'room'`, or a generic one walls of a room's height bound along
|
|
39
|
+
* most of its outline, which may be a room drawn before its last wall (no reconcile could adopt
|
|
40
|
+
* it) or a courtyard, so what is found on it is info; a zone garden walls bound, or no walls (an
|
|
41
|
+
* analysis area), is no room. Every space the walls enclose wants one zone over it (any zone: a drawn one is
|
|
42
|
+
* adopted as the room on load): none, or several rooms lying in it (the reconciler's "Room N"
|
|
43
|
+
* beside a zone drawn over it, a plan's rooms split by lines no wall draws), is a finding. Every
|
|
44
|
+
* room wants walls or separators closing around it, and a name. A terrace closes with separators,
|
|
45
|
+
* so it is enclosed; a room a person declared open (`enclosureStatus: 'open'` on a room the walls
|
|
46
|
+
* never derived) needs no walls; an automatic room the reconciler opened when its walls stopped
|
|
47
|
+
* closing it does.
|
|
48
|
+
*/
|
|
49
|
+
export declare function roomFindings(nodes: SceneNodes, levelId: string, levelName: string): {
|
|
50
|
+
spaces: number;
|
|
51
|
+
issues: RoomFinding[];
|
|
52
|
+
};
|
|
53
|
+
export {};
|
|
54
|
+
//# sourceMappingURL=room-findings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"room-findings.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-findings.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,oFAAoF;AACpF,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,gDAAgD;IAChD,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACpB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,CAAC;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,CAAC,GACzD,CAAC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,UAAU,CAAC,GAC/E;IACE,IAAI,EAAE,mBAAmB,CAAA;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;CACf,GACD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAA;AA6EhG;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,CAmF3C"}
|