@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
|
@@ -1,4 +1,12 @@
|
|
|
1
|
+
import { FIND_BY_TYPE_LIMIT } from '../agent-tools/find-by-type.js';
|
|
2
|
+
import { refuse } from '../agent-tools/refusal.js';
|
|
1
3
|
import { isScriptedNode } from '../lib/geometry-script-node.js';
|
|
4
|
+
import { measurementCentroid } from '../lib/measurement-geometry.js';
|
|
5
|
+
import { nodeLevelFrame } from '../procedural-items/query.js';
|
|
6
|
+
import { transformPoint } from '../procedural-items/spatial.js';
|
|
7
|
+
import { nodeRegistry } from '../registry/index.js';
|
|
8
|
+
import { AnyNode as AnyNodeSchema, nodeKindOf, } from '../schema/index.js';
|
|
9
|
+
import { pointInPolygon } from '../systems/slab/slab-support.js';
|
|
2
10
|
import { requireLevel } from './level-target.js';
|
|
3
11
|
import { levelIdOf } from './scene-queries.js';
|
|
4
12
|
const round = (v) => Math.round(v * 1000) / 1000;
|
|
@@ -25,70 +33,285 @@ function boundsInLevel(item, bounds) {
|
|
|
25
33
|
max: [0, 1, 2].map((k) => Math.max(...corners.map((c) => c[k]))),
|
|
26
34
|
};
|
|
27
35
|
}
|
|
36
|
+
const CORE_KINDS = new Set(AnyNodeSchema.options.map(nodeKindOf));
|
|
37
|
+
/** A node's kind, lower case; a malformed node stored without one has none. */
|
|
38
|
+
const kindOf = (node) => String(node.type).toLowerCase();
|
|
28
39
|
const emitsLight = (node) => node.type === 'item' &&
|
|
29
|
-
Boolean(node.asset
|
|
40
|
+
Boolean(node.asset?.interactive?.effects?.some((effect) => effect.kind === 'light'));
|
|
30
41
|
const matchesWord = (text, word) => Boolean(text) &&
|
|
31
42
|
text
|
|
32
43
|
.toLowerCase()
|
|
33
44
|
.split(/[^a-z0-9]+/)
|
|
34
45
|
.includes(word);
|
|
35
46
|
/**
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* object stays the thing that is selected, moved and edited.
|
|
47
|
+
* A source id as importers write it into typed provenance: printable ASCII kept, every other
|
|
48
|
+
* character percent-encoded as UTF-8 bytes.
|
|
39
49
|
*/
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
function encodeSourceId(id) {
|
|
51
|
+
let out = '';
|
|
52
|
+
for (const char of id) {
|
|
53
|
+
if (/^[\x20-\x7E]$/.test(char)) {
|
|
54
|
+
out += char;
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
for (const byte of new TextEncoder().encode(char))
|
|
58
|
+
out += `%${byte.toString(16).toUpperCase().padStart(2, '0')}`;
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
/** A node's import source ids: typed `provenance.refs[].id`, then legacy `metadata.sourceIds`. */
|
|
63
|
+
function sourceIdsOf(node) {
|
|
64
|
+
const typed = (node.provenance?.refs ?? []).map((ref) => ref.id);
|
|
65
|
+
const legacy = node.metadata?.sourceIds;
|
|
66
|
+
return Array.isArray(legacy)
|
|
67
|
+
? [...typed, ...legacy.filter((id) => typeof id === 'string')]
|
|
68
|
+
: typed;
|
|
69
|
+
}
|
|
70
|
+
/** The source filters as one test; a legacy id may be stored raw, a typed one percent-encoded. */
|
|
71
|
+
function sourceFilter({ sourceId, sourceIdPrefix }) {
|
|
72
|
+
if (sourceId === undefined && sourceIdPrefix === undefined)
|
|
73
|
+
return undefined;
|
|
74
|
+
const exact = sourceId === undefined ? [] : [sourceId, encodeSourceId(sourceId)];
|
|
75
|
+
const prefixes = sourceIdPrefix === undefined ? [] : [sourceIdPrefix, encodeSourceId(sourceIdPrefix)];
|
|
76
|
+
return (node) => {
|
|
77
|
+
const ids = sourceIdsOf(node);
|
|
78
|
+
return ((sourceId === undefined || ids.some((id) => exact.includes(id))) &&
|
|
79
|
+
(sourceIdPrefix === undefined ||
|
|
80
|
+
ids.some((id) => prefixes.some((prefix) => id.startsWith(prefix)))));
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
function centre2(points) {
|
|
84
|
+
if (points.length === 0)
|
|
85
|
+
return null;
|
|
86
|
+
const area = measurementCentroid(points.map(([x, z]) => [x, 0, z]));
|
|
87
|
+
if (area)
|
|
88
|
+
return [area[0], area[2]];
|
|
89
|
+
const sum = points.reduce(([sx, sz], [x, z]) => [sx + x, sz + z], [0, 0]);
|
|
90
|
+
return [sum[0] / points.length, sum[1] / points.length];
|
|
91
|
+
}
|
|
92
|
+
function boundsCentre3(points) {
|
|
93
|
+
if (points.length === 0)
|
|
94
|
+
return null;
|
|
95
|
+
return [0, 1, 2].map((axis) => {
|
|
96
|
+
const values = points.map((p) => p[axis]);
|
|
97
|
+
return (Math.min(...values) + Math.max(...values)) / 2;
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Where a node stands in its level's plan: a polygon's area centroid, a segment's midpoint, a
|
|
102
|
+
* path's centre, or the origin of a positioned node through its hosts (a window in its wall, a
|
|
103
|
+
* module in its cabinet); a block or an imported mesh by the centre of its vertex bounds, turned in
|
|
104
|
+
* 3D before it is projected. Plan-only frames, one cache per query, so each host resolves once.
|
|
105
|
+
*/
|
|
106
|
+
function planPointOf(node, nodes, frames) {
|
|
107
|
+
const n = node;
|
|
108
|
+
if (Array.isArray(n.polygon))
|
|
109
|
+
return centre2(n.polygon);
|
|
110
|
+
if (Array.isArray(n.start) && Array.isArray(n.end)) {
|
|
111
|
+
const [x1, z1] = n.start;
|
|
112
|
+
const [x2, z2] = n.end;
|
|
113
|
+
return [(x1 + x2) / 2, (z1 + z2) / 2];
|
|
114
|
+
}
|
|
115
|
+
if (Array.isArray(n.path)) {
|
|
116
|
+
const centre = boundsCentre3(n.path);
|
|
117
|
+
return centre ? [centre[0], centre[2]] : null;
|
|
118
|
+
}
|
|
119
|
+
if (!Array.isArray(n.position))
|
|
120
|
+
return null;
|
|
121
|
+
const local = node.type === 'block'
|
|
122
|
+
? boundsCentre3((node.topology?.vertices ?? []).map((vertex) => vertex.position))
|
|
123
|
+
: node.type === 'imported-mesh'
|
|
124
|
+
? boundsCentre3((node.primitives ?? []).flatMap(({ positions }) => {
|
|
125
|
+
const out = [];
|
|
126
|
+
for (let i = 0; i + 2 < positions.length; i += 3)
|
|
127
|
+
out.push([positions[i], positions[i + 1], positions[i + 2]]);
|
|
128
|
+
return out;
|
|
129
|
+
}))
|
|
130
|
+
: null;
|
|
131
|
+
return framePoint(node, nodes, frames, local ?? [0, 0, 0]);
|
|
132
|
+
}
|
|
133
|
+
/** A point of a node's own frame in its level's plan, through its hosts, turned in 3D first. */
|
|
134
|
+
function framePoint(node, nodes, frames, local) {
|
|
135
|
+
let frame;
|
|
136
|
+
try {
|
|
137
|
+
frame = nodeLevelFrame(node.id, nodes, undefined, { cache: frames, planOnly: true });
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return null;
|
|
141
|
+
}
|
|
142
|
+
const [x, , z] = transformPoint(frame, local);
|
|
143
|
+
return [x, z];
|
|
144
|
+
}
|
|
145
|
+
function requireZone(nodes, zoneId) {
|
|
146
|
+
const zone = nodes[zoneId];
|
|
147
|
+
if (!zone)
|
|
148
|
+
refuse('zone_not_found', `Zone not found: ${zoneId}. Use a zoneId get_zones returned.`, {
|
|
149
|
+
zoneId,
|
|
150
|
+
});
|
|
151
|
+
if (zone.type !== 'zone')
|
|
152
|
+
refuse('not_a_zone', `Node ${zoneId} is a ${zone.type}, not a zone.`, {
|
|
153
|
+
zoneId,
|
|
154
|
+
type: zone.type,
|
|
155
|
+
});
|
|
156
|
+
return zone;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* What of a node's results stands in this zone: on the zone's level, a plan point inside its outline
|
|
160
|
+
* and outside its holes, by the ray cast the editor's spatial grid uses (a closing vertex repeated,
|
|
161
|
+
* or a zero-length edge, puts nothing inside). A part with bounds stands at their middle, through
|
|
162
|
+
* its node's frame and hosts; anything else at its node's plan point. Geometry is read only once the
|
|
163
|
+
* node is on the zone's level.
|
|
164
|
+
*/
|
|
165
|
+
function zoneFilter(nodes, zone) {
|
|
166
|
+
const zoneLevel = levelIdOf(nodes, zone.id);
|
|
167
|
+
const outline = zone.polygon;
|
|
168
|
+
const holes = (zone.holes ?? []);
|
|
169
|
+
const frames = new Map();
|
|
170
|
+
const inside = (point) => point !== null &&
|
|
171
|
+
pointInPolygon(point[0], point[1], outline) &&
|
|
172
|
+
!holes.some((hole) => pointInPolygon(point[0], point[1], hole));
|
|
173
|
+
return (node, level, matches) => {
|
|
174
|
+
if (level !== zoneLevel)
|
|
175
|
+
return [];
|
|
176
|
+
let planPoint;
|
|
177
|
+
const nodePoint = () => {
|
|
178
|
+
if (planPoint === undefined)
|
|
179
|
+
planPoint = planPointOf(node, nodes, frames);
|
|
180
|
+
return planPoint;
|
|
181
|
+
};
|
|
182
|
+
return matches.filter(({ at }) => inside(at ? framePoint(node, nodes, frames, at) : nodePoint()));
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/** Past this much JSON, a result leaves a record out and names it in `omitted`: get_node reads it. */
|
|
186
|
+
const RECORD_BYTES = 1024;
|
|
187
|
+
/** What a whole node records about itself (an importer's ids, Architect's marks), when it is small. */
|
|
188
|
+
function recordsOf(node) {
|
|
189
|
+
const out = {};
|
|
190
|
+
const omitted = [];
|
|
191
|
+
const records = { metadata: node.metadata, provenance: node.provenance };
|
|
192
|
+
for (const [field, value] of Object.entries(records)) {
|
|
193
|
+
if (!value || Object.keys(value).length === 0)
|
|
194
|
+
continue;
|
|
195
|
+
if (JSON.stringify(value).length > RECORD_BYTES)
|
|
196
|
+
omitted.push(field);
|
|
197
|
+
else
|
|
198
|
+
out[field] = value;
|
|
199
|
+
}
|
|
200
|
+
return omitted.length ? { ...out, omitted } : out;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Whether a type word, or its singular, names anything find_by_type reads: a core kind, a plugin
|
|
204
|
+
* kind this runtime registered or the host checks (the hosted MCP knows its plugins' kinds without
|
|
205
|
+
* registering them), light, or a kind, an item category or a typed part in this scene.
|
|
206
|
+
*/
|
|
207
|
+
function namesAnything(nodes, names, { nodeSchema }) {
|
|
208
|
+
if (names.has('light'))
|
|
209
|
+
return true;
|
|
210
|
+
const registered = [...nodeRegistry.entries()].map(([kind]) => kind.toLowerCase());
|
|
211
|
+
const known = (name) => CORE_KINDS.has(name) || registered.includes(name) || Boolean(nodeSchema?.(name));
|
|
212
|
+
if ([...names].some(known))
|
|
213
|
+
return true;
|
|
214
|
+
return Object.values(nodes).some((node) => names.has(kindOf(node)) ||
|
|
215
|
+
(node.type === 'item' &&
|
|
216
|
+
[...names].some((name) => matchesWord(node.asset?.category, name))) ||
|
|
217
|
+
(isScriptedNode(node) &&
|
|
218
|
+
(node.source?.manifest?.parts ?? []).some((part) => part.type && names.has(part.type))));
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* `find_by_type`: everything of one type, nodes and the typed parts of authored objects alike,
|
|
222
|
+
* narrowed by level, parent, zone or source id. Parts are read from each object's manifest; the
|
|
223
|
+
* object stays the thing that is selected, moved and edited. Each result is the node's summary;
|
|
224
|
+
* `get_node` reads it whole. Past `limit` results are counted, not listed.
|
|
225
|
+
*/
|
|
226
|
+
export const findByType = (nodes, input, context) => {
|
|
227
|
+
const { levelId, parentId, zoneId } = input;
|
|
228
|
+
// A level, parent or zone that is not there is said, as get_zones says it, not answered with
|
|
229
|
+
// nothing found: the agent could not tell a typo from an empty floor.
|
|
42
230
|
if (levelId)
|
|
43
231
|
requireLevel(nodes, levelId);
|
|
44
|
-
|
|
232
|
+
if (parentId && !nodes[parentId])
|
|
233
|
+
refuse('node_not_found', `Node not found: ${parentId}.`, { id: parentId });
|
|
234
|
+
const inZone = zoneId ? zoneFilter(nodes, requireZone(nodes, zoneId)) : undefined;
|
|
235
|
+
const fromSource = sourceFilter(input);
|
|
236
|
+
// What was asked, as written; a word also in the singular ("walls"), a plugin's kind
|
|
237
|
+
// (`bones:studs`) never.
|
|
238
|
+
const kind = input.type?.trim().toLowerCase();
|
|
239
|
+
const names = kind === undefined
|
|
240
|
+
? undefined
|
|
241
|
+
: new Set([kind, kind.includes(':') ? kind : kind.replace(/s$/, '')]);
|
|
45
242
|
const results = [];
|
|
46
243
|
for (const node of Object.values(nodes)) {
|
|
244
|
+
if (parentId && node.parentId !== parentId)
|
|
245
|
+
continue;
|
|
246
|
+
if (fromSource && !fromSource(node))
|
|
247
|
+
continue;
|
|
47
248
|
const level = levelIdOf(nodes, node.id);
|
|
48
249
|
if (levelId && level !== levelId)
|
|
49
250
|
continue;
|
|
50
251
|
const item = node.type === 'item' ? node : null;
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
252
|
+
const found = {
|
|
253
|
+
id: node.id,
|
|
254
|
+
name: node.name ?? item?.asset?.name,
|
|
255
|
+
nodeType: node.type,
|
|
256
|
+
levelId: level,
|
|
257
|
+
parentId: node.parentId ?? null,
|
|
258
|
+
};
|
|
259
|
+
const whole = { found: { ...found, ...recordsOf(node) } };
|
|
260
|
+
let matched;
|
|
261
|
+
if (names === undefined)
|
|
262
|
+
matched = [whole];
|
|
263
|
+
else {
|
|
264
|
+
const typed = (isScriptedNode(node) ? (node.source?.manifest?.parts ?? []) : []).filter((part) => part.type);
|
|
265
|
+
const typedParts = typed.filter((part) => names.has(part.type));
|
|
266
|
+
// An authored item whose typed parts are all of this type is one (a lantern); a mixed one (a
|
|
267
|
+
// porch), or a window, door or column, answers with its parts.
|
|
268
|
+
const wholeAuthored = item !== null && typedParts.length > 0 && typedParts.length === typed.length;
|
|
269
|
+
const wholeMatch = names.has(kindOf(node)) ||
|
|
270
|
+
wholeAuthored ||
|
|
271
|
+
(item &&
|
|
272
|
+
([...names].some((name) => matchesWord(item.asset?.category, name)) ||
|
|
273
|
+
(names.has('light') && emitsLight(node) && typedParts.length === 0)));
|
|
274
|
+
// A part's bounds are in its node's model frame, which the node's scale stretches.
|
|
275
|
+
const scale = node.scale ?? [1, 1, 1];
|
|
276
|
+
matched = wholeMatch
|
|
277
|
+
? [whole]
|
|
278
|
+
: typedParts.map((part) => ({
|
|
279
|
+
found: {
|
|
280
|
+
...found,
|
|
281
|
+
part: part.id,
|
|
282
|
+
partType: part.type,
|
|
283
|
+
...(part.bounds && item && item.parentId === level
|
|
284
|
+
? { bounds: boundsInLevel(item, part.bounds) }
|
|
285
|
+
: {}),
|
|
286
|
+
},
|
|
287
|
+
...(part.bounds && {
|
|
288
|
+
at: [0, 1, 2].map((axis) => ((part.bounds.min[axis] + part.bounds.max[axis]) / 2) * scale[axis]),
|
|
289
|
+
}),
|
|
290
|
+
}));
|
|
83
291
|
}
|
|
292
|
+
// Where a node stands is read only for what matched: the zone test reads geometry.
|
|
293
|
+
if (matched.length > 0)
|
|
294
|
+
results.push(...(inZone ? inZone(node, level, matched) : matched).map(({ found }) => found));
|
|
295
|
+
}
|
|
296
|
+
if (names && results.length === 0 && !namesAnything(nodes, names, context)) {
|
|
297
|
+
const kinds = [...new Set(Object.values(nodes).map(kindOf))].sort();
|
|
298
|
+
refuse('unknown_type', `"${kind}" names nothing find_by_type reads: no node kind (core's or a plugin's this host knows), and no item category or part type in this scene. Kinds in this scene: ${kinds.join(', ')}.`, { type: kind, kinds });
|
|
84
299
|
}
|
|
300
|
+
const limit = input.limit ?? FIND_BY_TYPE_LIMIT;
|
|
301
|
+
const parts = results.filter((entry) => entry.part).length;
|
|
85
302
|
return {
|
|
86
303
|
result: {
|
|
87
|
-
type:
|
|
304
|
+
...(kind === undefined ? {} : { type: kind }),
|
|
88
305
|
count: results.length,
|
|
89
|
-
nodes: results.
|
|
90
|
-
parts
|
|
91
|
-
results,
|
|
306
|
+
nodes: results.length - parts,
|
|
307
|
+
parts,
|
|
308
|
+
results: results.slice(0, limit),
|
|
309
|
+
...(results.length > limit
|
|
310
|
+
? {
|
|
311
|
+
truncated: true,
|
|
312
|
+
hint: `${limit} of ${results.length} listed. Narrow by type, levelId, zoneId or parentId, or ask for more with limit.`,
|
|
313
|
+
}
|
|
314
|
+
: {}),
|
|
92
315
|
},
|
|
93
316
|
};
|
|
94
317
|
};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { FURNISHED_ROOM_TYPES } from '../agent-tools/furnish-room.js';
|
|
2
2
|
import { type LevelTargetInput } from './level-target.js';
|
|
3
|
-
import type
|
|
3
|
+
import { type Vec2 } from './plan-geometry.js';
|
|
4
|
+
import type { AgentContext, AgentOperation, SceneNodes } from './types.js';
|
|
4
5
|
type RoomType = (typeof FURNISHED_ROOM_TYPES)[number];
|
|
5
6
|
type FurnishRoomInput = LevelTargetInput & {
|
|
6
7
|
zoneId?: string;
|
|
@@ -8,6 +9,26 @@ type FurnishRoomInput = LevelTargetInput & {
|
|
|
8
9
|
roomType: RoomType;
|
|
9
10
|
doorWallIndex?: number;
|
|
10
11
|
};
|
|
12
|
+
export declare const WALL_GAP = 0.1;
|
|
13
|
+
/** The room asked for: a zone's level and outline, or a polygon on the level named. */
|
|
14
|
+
export declare function roomToFurnish(nodes: SceneNodes, input: LevelTargetInput & Pick<FurnishRoomInput, 'zoneId' | 'polygon'>, context: AgentContext): {
|
|
15
|
+
levelId: string;
|
|
16
|
+
polygon: Vec2[];
|
|
17
|
+
};
|
|
18
|
+
/** A polygon edge seen from inside the room: its middle, its direction, and the way into the room. */
|
|
19
|
+
export declare function edgeFrame(polygon: Vec2[], index: number, center: Vec2): {
|
|
20
|
+
mid: Vec2;
|
|
21
|
+
along: {
|
|
22
|
+
x: number;
|
|
23
|
+
z: number;
|
|
24
|
+
};
|
|
25
|
+
inward: {
|
|
26
|
+
x: number;
|
|
27
|
+
z: number;
|
|
28
|
+
};
|
|
29
|
+
length: number;
|
|
30
|
+
facing: number;
|
|
31
|
+
};
|
|
11
32
|
/**
|
|
12
33
|
* `furnish_room`: a room type's pieces from the host's catalog, against the walls the door decides,
|
|
13
34
|
* each moved off door clear zones and other items or skipped with the reason. The door wall is the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"furnish-room.d.ts","sourceRoot":"","sources":["../../src/agent-operations/furnish-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"furnish-room.d.ts","sourceRoot":"","sources":["../../src/agent-operations/furnish-room.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAsBvE,OAAO,EAAE,KAAK,gBAAgB,EAAe,MAAM,gBAAgB,CAAA;AACnE,OAAO,EAA8B,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEvE,KAAK,QAAQ,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAA;AAErD,KAAK,gBAAgB,GAAG,gBAAgB,GAAG;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAA;IACpB,QAAQ,EAAE,QAAQ,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAKD,eAAO,MAAM,QAAQ,MAAM,CAAA;AAQ3B,uFAAuF;AACvF,wBAAgB,aAAa,CAC3B,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,CAAC,EACtE,OAAO,EAAE,YAAY;;aAkBwB,IAAI,EAAE;EAKpD;AA2BD,sGAAsG;AACtG,wBAAgB,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI;;;;;;;;;;;;EAWrE;AA0KD;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,cAAc,CAAC,gBAAgB,CAsGxD,CAAA"}
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import { refuse } from '../agent-tools/refusal.js';
|
|
2
|
+
import { OTHER_SOURCES } from '../agent-tools/sources.js';
|
|
2
3
|
import { ItemNode } from '../schema/index.js';
|
|
3
4
|
import { edgeProjection } from './create-room.js';
|
|
4
5
|
import { collectDoorKeepouts, itemBlocksDoorKeepout, itemPlanAabb, keepoutCoversPlanned, keepoutForPolygonEdge, } from './door-clearance.js';
|
|
5
|
-
import {
|
|
6
|
+
import { furnitureKind } from './furniture-kind.js';
|
|
7
|
+
import { collectOccupiedFootprints, findValidPlacement, lateralSteps, MID_ROOM_DISTANCE_M, PLACEMENT_INSETS_M, wallFacesOn, } from './layout-clearance.js';
|
|
6
8
|
import { targetLevel } from './level-target.js';
|
|
7
9
|
import { polygonArea, polygonBounds } from './plan-geometry.js';
|
|
8
10
|
import { levelIdOf, levelRole } from './scene-queries.js';
|
|
9
11
|
// A door belongs to a room edge when it stands this close to the edge's line, within its span.
|
|
10
12
|
const DOOR_EDGE_TOLERANCE = 0.25;
|
|
11
13
|
// Clearance between a piece's back and the wall's centreline: half a wall and a hand's width.
|
|
12
|
-
const WALL_GAP = 0.1;
|
|
14
|
+
export const WALL_GAP = 0.1;
|
|
15
|
+
// A wall-bound piece (a sofa, a bed, a TV stand) slides along its wall, within the wall's ends, to
|
|
16
|
+
// clear a door or another piece, and steps off it only as far as verify_scene still reads it
|
|
17
|
+
// against the wall (item_mid_room); where no wall stands, it is skipped.
|
|
18
|
+
const AGAINST_WALL_INSETS_M = PLACEMENT_INSETS_M.filter((inset) => WALL_GAP + inset <= MID_ROOM_DISTANCE_M);
|
|
13
19
|
/** The room asked for: a zone's level and outline, or a polygon on the level named. */
|
|
14
|
-
function roomToFurnish(nodes, input, context) {
|
|
20
|
+
export function roomToFurnish(nodes, input, context) {
|
|
15
21
|
if (input.zoneId) {
|
|
16
22
|
const zone = nodes[input.zoneId];
|
|
17
23
|
if (!zone)
|
|
@@ -56,7 +62,7 @@ function doorsOfRoom(nodes, levelId, polygon) {
|
|
|
56
62
|
return found;
|
|
57
63
|
}
|
|
58
64
|
/** A polygon edge seen from inside the room: its middle, its direction, and the way into the room. */
|
|
59
|
-
function edgeFrame(polygon, index, center) {
|
|
65
|
+
export function edgeFrame(polygon, index, center) {
|
|
60
66
|
const a = polygon[index % polygon.length];
|
|
61
67
|
const b = polygon[(index + 1) % polygon.length];
|
|
62
68
|
const length = Math.hypot(b[0] - a[0], b[1] - a[1]) || 1;
|
|
@@ -81,16 +87,21 @@ function layout(roomType, polygon, doorWall, catalog) {
|
|
|
81
87
|
const width = (assetId) => size(assetId)?.[0] ?? 1;
|
|
82
88
|
const depth = (assetId) => size(assetId)?.[2] ?? 1;
|
|
83
89
|
const poses = [];
|
|
84
|
-
/**
|
|
85
|
-
|
|
90
|
+
/**
|
|
91
|
+
* Back against `edge`, `lateral` along it from its middle, `out` further into the room; moved
|
|
92
|
+
* along `edge` as far as the piece it `follows` was moved.
|
|
93
|
+
*/
|
|
94
|
+
const against = (edge, assetId, lateral = 0, out = 0, follows) => {
|
|
86
95
|
const inset = depth(assetId) / 2 + WALL_GAP + out;
|
|
87
96
|
poses.push({
|
|
97
|
+
follows,
|
|
88
98
|
assetId,
|
|
89
99
|
x: edge.mid[0] + edge.inward.x * inset + edge.along.x * lateral,
|
|
90
100
|
z: edge.mid[1] + edge.inward.z * inset + edge.along.z * lateral,
|
|
91
101
|
rotationDeg: edge.facing,
|
|
92
102
|
along: edge.along,
|
|
93
103
|
inward: edge.inward,
|
|
104
|
+
wall: { length: edge.length, lateral },
|
|
94
105
|
});
|
|
95
106
|
};
|
|
96
107
|
const free = (assetId, x, z, rotationDeg = 0) => poses.push({ assetId, x, z, rotationDeg });
|
|
@@ -101,8 +112,8 @@ function layout(roomType, polygon, doorWall, catalog) {
|
|
|
101
112
|
const table = width('bedside-table');
|
|
102
113
|
if (back.length >= width(bed) + 2 * table + 0.2) {
|
|
103
114
|
const lateral = width(bed) / 2 + table / 2 + 0.05;
|
|
104
|
-
against(back, 'bedside-table', -lateral);
|
|
105
|
-
against(back, 'bedside-table', lateral);
|
|
115
|
+
against(back, 'bedside-table', -lateral, 0, bed);
|
|
116
|
+
against(back, 'bedside-table', lateral, 0, bed);
|
|
106
117
|
}
|
|
107
118
|
if (area >= 10)
|
|
108
119
|
against(side, 'dresser', side.length * 0.22);
|
|
@@ -119,17 +130,14 @@ function layout(roomType, polygon, doorWall, catalog) {
|
|
|
119
130
|
case 'bathroom':
|
|
120
131
|
against(back, 'toilet', back.length * 0.25);
|
|
121
132
|
against(back, 'bathroom-sink', -back.length * 0.2);
|
|
122
|
-
|
|
123
|
-
against(side, 'bathtub');
|
|
124
|
-
else
|
|
125
|
-
free('shower-square', bounds.centerX, bounds.centerZ);
|
|
133
|
+
against(side, area >= 6.5 ? 'bathtub' : 'shower-square');
|
|
126
134
|
break;
|
|
127
135
|
case 'living':
|
|
128
136
|
against(back, 'sofa');
|
|
129
|
-
against(back, 'coffee-table', 0, depth('sofa') + 0.4);
|
|
137
|
+
against(back, 'coffee-table', 0, depth('sofa') + 0.4, 'sofa');
|
|
130
138
|
against(side, 'livingroom-chair', -side.length * 0.18);
|
|
131
139
|
// The TV faces the sofa from the door wall; the placement slides it off the door's clear zone.
|
|
132
|
-
against(door, 'tv-stand');
|
|
140
|
+
against(door, 'tv-stand', 0, 0, 'sofa');
|
|
133
141
|
break;
|
|
134
142
|
case 'dining': {
|
|
135
143
|
free('dining-table', bounds.centerX, bounds.centerZ);
|
|
@@ -161,6 +169,7 @@ function layout(roomType, polygon, doorWall, catalog) {
|
|
|
161
169
|
const SKIP_REASONS = {
|
|
162
170
|
outside_bounds: 'outside the room',
|
|
163
171
|
overlaps_item: 'overlaps another item',
|
|
172
|
+
off_wall: 'no wall to stand against there',
|
|
164
173
|
};
|
|
165
174
|
const round = (value) => Math.round(value * 100) / 100;
|
|
166
175
|
/**
|
|
@@ -182,6 +191,20 @@ function skipReason(asset, pose, reason, room, doors) {
|
|
|
182
191
|
}
|
|
183
192
|
return `${named}: ${SKIP_REASONS[reason]}`;
|
|
184
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* How a wall-bound piece looks for a spot: along its wall, its whole width within the wall's ends
|
|
196
|
+
* (`at` is where it starts, off the wall's middle), barely off it, against a wall that stands.
|
|
197
|
+
*/
|
|
198
|
+
function againstItsWall(wall, at, width, walls) {
|
|
199
|
+
// A piece wider than its wall stands at the wall's middle.
|
|
200
|
+
const reach = (wall.length - width) / 2;
|
|
201
|
+
return {
|
|
202
|
+
lateralsM: reach >= 0 ? lateralSteps(-reach - at, reach - at) : [-at],
|
|
203
|
+
insetsM: AGAINST_WALL_INSETS_M,
|
|
204
|
+
// A level with no walls yet is furnished by its outline alone; verify_scene judges no piece there.
|
|
205
|
+
...(walls.length > 0 ? { againstWalls: walls } : {}),
|
|
206
|
+
};
|
|
207
|
+
}
|
|
185
208
|
/**
|
|
186
209
|
* `furnish_room`: a room type's pieces from the host's catalog, against the walls the door decides,
|
|
187
210
|
* each moved off door clear zones and other items or skipped with the reason. The door wall is the
|
|
@@ -210,27 +233,45 @@ export const furnishRoom = (nodes, input, context) => {
|
|
|
210
233
|
}
|
|
211
234
|
const occupied = collectOccupiedFootprints(all, { levelId, floorOnly: true }).map((footprint) => footprint.aabb);
|
|
212
235
|
const { minX, maxX, minZ, maxZ } = polygonBounds(polygon);
|
|
236
|
+
const walls = wallFacesOn(all, levelId);
|
|
213
237
|
const items = [];
|
|
214
238
|
const skipped = [];
|
|
239
|
+
// How far each piece was moved off the spot the layout gave it, for the pieces that follow it.
|
|
240
|
+
const moved = new Map();
|
|
215
241
|
for (const pose of layout(input.roomType, polygon, doorWall, catalog)) {
|
|
216
242
|
const asset = catalog.find((entry) => entry.id === pose.assetId);
|
|
217
243
|
if (!asset) {
|
|
218
244
|
skipped.push(`${pose.assetId}: not in the catalog`);
|
|
219
245
|
continue;
|
|
220
246
|
}
|
|
221
|
-
|
|
222
|
-
|
|
247
|
+
// Along its own wall only: a TV across the room slides as its sofa did and stays on its wall.
|
|
248
|
+
const lead = pose.follows ? moved.get(pose.follows) : undefined;
|
|
249
|
+
const slide = lead && pose.along ? lead[0] * pose.along.x + lead[1] * pose.along.z : 0;
|
|
250
|
+
const spot = {
|
|
251
|
+
x: pose.x + (pose.along?.x ?? 0) * slide,
|
|
252
|
+
z: pose.z + (pose.along?.z ?? 0) * slide,
|
|
253
|
+
rotationDeg: pose.rotationDeg,
|
|
254
|
+
};
|
|
255
|
+
const found = findValidPlacement({
|
|
256
|
+
primary: spot,
|
|
223
257
|
dimensions: asset.dimensions,
|
|
224
258
|
doorKeepouts: keepouts,
|
|
225
259
|
occupied,
|
|
226
260
|
roomBounds: { minX, maxX, minZ, maxZ },
|
|
261
|
+
roomOutline: polygon,
|
|
227
262
|
along: pose.along,
|
|
228
263
|
inward: pose.inward,
|
|
264
|
+
...(pose.wall && furnitureKind(asset) === 'wall'
|
|
265
|
+
? againstItsWall(pose.wall, pose.wall.lateral + slide, asset.dimensions?.[0] ?? 1, walls)
|
|
266
|
+
: {}),
|
|
229
267
|
});
|
|
230
|
-
if (!candidate) {
|
|
231
|
-
|
|
268
|
+
if (!found.candidate) {
|
|
269
|
+
const at = found.refused ?? spot;
|
|
270
|
+
skipped.push(skipReason(asset, at, found.reason, { minX, maxX, minZ, maxZ }, doorKeepouts));
|
|
232
271
|
continue;
|
|
233
272
|
}
|
|
273
|
+
const { candidate } = found;
|
|
274
|
+
moved.set(pose.assetId, [candidate.x - pose.x, candidate.z - pose.z]);
|
|
234
275
|
const rotation = (candidate.rotationDeg * Math.PI) / 180;
|
|
235
276
|
occupied.push(itemPlanAabb([candidate.x, 0, candidate.z], asset.dimensions, rotation));
|
|
236
277
|
items.push(ItemNode.parse({
|
|
@@ -242,15 +283,21 @@ export const furnishRoom = (nodes, input, context) => {
|
|
|
242
283
|
}));
|
|
243
284
|
}
|
|
244
285
|
const itemIds = items.map((item) => item.id);
|
|
286
|
+
// Each piece with its size and id, as the skips are told: the set is not read back from the scene.
|
|
287
|
+
const pieces = items.map((item) => {
|
|
288
|
+
const [width = 1, , depth = 1] = item.asset.dimensions ?? [1, 1, 1];
|
|
289
|
+
return `${item.name ?? item.asset.name} (${round(width)} × ${round(depth)} m): ${item.id}`;
|
|
290
|
+
});
|
|
245
291
|
return {
|
|
246
292
|
result: {
|
|
247
293
|
ok: true,
|
|
248
294
|
placed: items.length,
|
|
249
295
|
itemIds,
|
|
296
|
+
pieces,
|
|
250
297
|
skipped,
|
|
251
298
|
doorWallIndex: doorWall,
|
|
252
299
|
doorsDetected: doors.length,
|
|
253
|
-
message: `Furnished the ${input.roomType} with ${items.length} item${items.length === 1 ? '' : 's'}${skipped.length ? `, skipped ${skipped.length}` : ''}
|
|
300
|
+
message: `Furnished the ${input.roomType} with ${items.length} item${items.length === 1 ? '' : 's'}${skipped.length ? `, skipped ${skipped.length}` : ''}.${skipped.length ? ` For what was skipped: ${OTHER_SOURCES}` : ''}${input.zoneId && items.length ? ` view_scene with interior { zoneId: "${input.zoneId}" } shows the room from inside, at a person's height.` : ''}`,
|
|
254
301
|
},
|
|
255
302
|
...(items.length
|
|
256
303
|
? { changes: { create: items.map((node) => ({ node, parentId: levelId })) } }
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type ItemNode } from '../schema/index.js';
|
|
2
|
+
/** How a piece of furniture stands in a room, read from what the catalog calls it. */
|
|
3
|
+
export type FurnitureKind = 'chair' | 'free' | 'wall';
|
|
4
|
+
type Named = {
|
|
5
|
+
id: string;
|
|
6
|
+
name?: string | undefined;
|
|
7
|
+
};
|
|
8
|
+
/** Only a named, flat floor covering is nonblocking, never an arbitrary short solid or low top surface. */
|
|
9
|
+
export declare function isFloorUnderlay(item: ItemNode): boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Wall-bound pieces (a fridge, a counter, a bed, a sofa) stand against a wall and never in the
|
|
12
|
+
* middle of a room; free-standing ones (a dining table, a rug, a plant) may take the middle; a chair
|
|
13
|
+
* is placed around its table. A name the table does not know is free-standing.
|
|
14
|
+
*/
|
|
15
|
+
export declare function furnitureKind(asset: Named): FurnitureKind;
|
|
16
|
+
/**
|
|
17
|
+
* What a piece faces when it does not stand against a wall, as a pattern for the name of the item
|
|
18
|
+
* it belongs with: the coffee table and the TV face the sofa, a chair faces its table.
|
|
19
|
+
*/
|
|
20
|
+
export declare function anchorOf(asset: Named): string | null;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=furniture-kind.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"furniture-kind.d.ts","sourceRoot":"","sources":["../../src/agent-operations/furniture-kind.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,QAAQ,EAAuC,MAAM,WAAW,CAAA;AAEnG,sFAAsF;AACtF,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AAErD,KAAK,KAAK,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAetD,2GAA2G;AAC3G,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CA+BvD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAQzD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAMpD"}
|