@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,300 @@
|
|
|
1
|
+
import { AXIS_DESIGN_MIN_WORDS, BEYOND_LAYERS, BEYOND_MIN_LAYERS, BRIEF_AXES, CATALOG_PLACEMENT_TOOLS, FURNISHING_CREATION_TOOLS, layerPieces, } from '../agent-tools/design-brief.js';
|
|
2
|
+
import { AgentRefusal, refuse } from '../agent-tools/refusal.js';
|
|
3
|
+
/**
|
|
4
|
+
* Furnishing follows the turn's design brief. A host that gates keeps the brief in force
|
|
5
|
+
* (`AgentContext.designBrief`, null while there is none) and each furnishing tool asks
|
|
6
|
+
* `requireFurnishing` before it runs, inside `run_batch` too. A host that does not gate leaves the
|
|
7
|
+
* context's brief out and nothing is refused (Pro, a person's own tools).
|
|
8
|
+
*/
|
|
9
|
+
export const NO_BRIEF = "Furnishing follows the turn's design brief: design_brief records what the request fixes, what it leaves open and where objects come from; until then the catalog can be searched and viewed, not placed, and no furnishing is made.";
|
|
10
|
+
const openSource = (piece) => `The brief left the source open: ${piece} can be made with add_object or place_design (view_assets shows the catalog's for reference), or, for technical equipment, named in the brief's asIs after view_assets, with a reason.`;
|
|
11
|
+
/**
|
|
12
|
+
* The function tags of the catalog's technical equipment: sanitaryware, kitchen, laundry and climate
|
|
13
|
+
* appliances, fixed services. A hosted item's `category` is its primary function tag; the built-in
|
|
14
|
+
* list carries function tags too. An item whose tags are not all technical is furniture here.
|
|
15
|
+
*/
|
|
16
|
+
const TECHNICAL_FUNCTIONS = new Set([
|
|
17
|
+
'plumbing',
|
|
18
|
+
'sinks',
|
|
19
|
+
'toilets',
|
|
20
|
+
'showers',
|
|
21
|
+
'bathtubs',
|
|
22
|
+
'appliances',
|
|
23
|
+
'appliance',
|
|
24
|
+
'kitchen-appliances',
|
|
25
|
+
'laundry-appliances',
|
|
26
|
+
'climate-appliances',
|
|
27
|
+
'utilities',
|
|
28
|
+
]);
|
|
29
|
+
export function isTechnicalEquipment(item) {
|
|
30
|
+
const tags = item.functionTags?.length ? item.functionTags : [item.category];
|
|
31
|
+
return tags.every((tag) => TECHNICAL_FUNCTIONS.has(tag));
|
|
32
|
+
}
|
|
33
|
+
const furnitureFact = (name) => `${name} is furniture: in an open brief furniture is made (add_object, place_design) or the request names a catalog source; asIs keeps technical equipment (sanitaryware, appliances).`;
|
|
34
|
+
const notViewed = (ids) => `${ids.join(', ')} ${ids.length === 1 ? 'was' : 'were'} not viewed: asIs keeps a catalog piece only after view_assets showed it earlier in the same turn (chat) or session (MCP).`;
|
|
35
|
+
const SOURCE_NOT_IN_REQUEST = "A source is set by the request: the brief's sourceQuote must be the person's own words naming it, a brand, the catalog or what is already there; this request names none, so its source is open.";
|
|
36
|
+
/** Case, accents and spaces folded away: how a quote is compared with the request and the lists. */
|
|
37
|
+
const fold = (text) => text
|
|
38
|
+
.normalize('NFD')
|
|
39
|
+
.replace(/\p{M}/gu, '')
|
|
40
|
+
.replace(/[\u2019\u2018]/g, "'")
|
|
41
|
+
.toLowerCase()
|
|
42
|
+
.replace(/\s+/g, ' ')
|
|
43
|
+
.trim();
|
|
44
|
+
/**
|
|
45
|
+
* The words that name the catalog as a source, English and French, folded; a word matches from its
|
|
46
|
+
* start. Phrases, not single words, where a single word also names a room or a building ("a house
|
|
47
|
+
* with a library", "the existing house").
|
|
48
|
+
*/
|
|
49
|
+
const CATALOG_WORDS = [
|
|
50
|
+
'catalog',
|
|
51
|
+
'pascal library',
|
|
52
|
+
"pascal's library",
|
|
53
|
+
'bibliotheque pascal',
|
|
54
|
+
"pascal's items",
|
|
55
|
+
"pascal's objects",
|
|
56
|
+
'pascal items',
|
|
57
|
+
'pascal objects',
|
|
58
|
+
'from the stock',
|
|
59
|
+
'in stock',
|
|
60
|
+
'du stock',
|
|
61
|
+
'en stock',
|
|
62
|
+
];
|
|
63
|
+
/** The words that name what is already there as a source, English and French, folded. */
|
|
64
|
+
const EXISTING_WORDS = [
|
|
65
|
+
'existing furniture',
|
|
66
|
+
'existing pieces',
|
|
67
|
+
'existing items',
|
|
68
|
+
'my furniture',
|
|
69
|
+
'my own furniture',
|
|
70
|
+
'current furniture',
|
|
71
|
+
'what is already there',
|
|
72
|
+
"what's already there",
|
|
73
|
+
'mes meubles',
|
|
74
|
+
'meubles existants',
|
|
75
|
+
'meubles actuels',
|
|
76
|
+
"ce qu'il y a",
|
|
77
|
+
];
|
|
78
|
+
const wordsRegex = (words) => new RegExp(`\\b(?:${words.map((word) => word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|')})`);
|
|
79
|
+
const CATALOG_WORD = wordsRegex(CATALOG_WORDS);
|
|
80
|
+
const EXISTING_WORD = wordsRegex(EXISTING_WORDS);
|
|
81
|
+
/** Whether the quote, at least two words, names the brief's source: its brand, the catalog, what is already there. */
|
|
82
|
+
function quoteNamesSource(source, brand, quote) {
|
|
83
|
+
const folded = fold(quote);
|
|
84
|
+
if (folded.split(' ').length < 2)
|
|
85
|
+
return false;
|
|
86
|
+
if (source === 'brand')
|
|
87
|
+
return Boolean(brand) && folded.includes(fold(brand));
|
|
88
|
+
return (source === 'catalog' ? CATALOG_WORD : EXISTING_WORD).test(folded);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Every axis is stated, bounded or open. A bounded axis quotes the person's own words: where
|
|
92
|
+
* the host lends the message (the chat, `requestText`) the quote is in it, folded as the
|
|
93
|
+
* source quote is; over MCP there is no message, so the quote is required by the contract and
|
|
94
|
+
* not compared with anything. An open axis carries a design statement of at least
|
|
95
|
+
* AXIS_DESIGN_MIN_WORDS words. The source axis is the `source` fields, checked separately.
|
|
96
|
+
*/
|
|
97
|
+
function requireAxes(input, context) {
|
|
98
|
+
const axes = input.axes ?? {};
|
|
99
|
+
const missing = BRIEF_AXES.filter((axis) => !axes[axis]);
|
|
100
|
+
if (missing.length)
|
|
101
|
+
refuse('axis_missing', `The brief reads the request axis by axis: ${missing.join(', ')} ${missing.length === 1 ? 'is' : 'are'} absent. Each axis is bounded by the person's words or open with a design statement; an axis the request does not touch is open.`, { axes: missing });
|
|
102
|
+
for (const axis of BRIEF_AXES) {
|
|
103
|
+
const reading = axes[axis];
|
|
104
|
+
if (reading.kind === 'bounded') {
|
|
105
|
+
const quote = fold(reading.quote);
|
|
106
|
+
if (!quote ||
|
|
107
|
+
(context.requestText !== undefined && !fold(context.requestText).includes(quote)))
|
|
108
|
+
refuse('axis_quote_not_in_request', `The ${axis} is bounded by the request's own words: its quote must be words of the person's message.`, { axis });
|
|
109
|
+
}
|
|
110
|
+
else if (fold(reading.design).split(' ').filter(Boolean).length < AXIS_DESIGN_MIN_WORDS)
|
|
111
|
+
refuse('axis_open_without_design', `The ${axis} is open: say how it is designed.`, { axis });
|
|
112
|
+
}
|
|
113
|
+
return axes;
|
|
114
|
+
}
|
|
115
|
+
/** The pieces `beyond` names, flattened: the brief's own list of the dressing. */
|
|
116
|
+
export function dressingOf(beyond) {
|
|
117
|
+
return BEYOND_LAYERS.flatMap(([key]) => layerPieces(beyond[key]));
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* The dressing axis alone decides what `beyond` owes. Bounded, `beyond` may say none
|
|
121
|
+
* everywhere, except that the named pieces read as a minimum do not bound it: a dressing
|
|
122
|
+
* quote inside a minimum pieces quote is refused. Open, at least BEYOND_MIN_LAYERS of the
|
|
123
|
+
* layers name pieces.
|
|
124
|
+
*/
|
|
125
|
+
function requireDressing(input, axes) {
|
|
126
|
+
const dressing = axes.dressing;
|
|
127
|
+
if (dressing.kind === 'bounded') {
|
|
128
|
+
const pieces = axes.pieces;
|
|
129
|
+
if (pieces.kind === 'bounded' &&
|
|
130
|
+
(pieces.extent ?? 'minimum') === 'minimum' &&
|
|
131
|
+
fold(dressing.quote) &&
|
|
132
|
+
fold(pieces.quote).includes(fold(dressing.quote)))
|
|
133
|
+
refuse('dressing_bounded_by_minimum', 'The pieces the request names are a minimum: they do not bound the dressing. The dressing is bounded only by words that limit the pieces or the action.');
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const empty = BEYOND_LAYERS.filter(([key]) => layerPieces(input.beyond[key]).length === 0);
|
|
137
|
+
if (BEYOND_LAYERS.length - empty.length >= BEYOND_MIN_LAYERS)
|
|
138
|
+
return;
|
|
139
|
+
refuse('beyond_too_thin', `The request leaves the dressing open: beyond names pieces for at least ${BEYOND_MIN_LAYERS} of its ${BEYOND_LAYERS.length} layers (${BEYOND_LAYERS.map(([, label]) => label).join(', ')}); ${empty.map(([, label]) => label).join(', ')} say none.`, { layers: empty.map(([key]) => key) });
|
|
140
|
+
}
|
|
141
|
+
/** Whether `design_brief` reads the item library: an open brief naming pieces as they are. */
|
|
142
|
+
export function briefReadsCatalog(tool, input) {
|
|
143
|
+
const { source, asIs } = asRecord(input);
|
|
144
|
+
return tool === 'design_brief' && source === 'open' && Array.isArray(asIs) && asIs.length > 0;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* An open brief keeps a catalog piece as it is only if it is technical equipment and view_assets
|
|
148
|
+
* showed it to the agent (the session's `viewed`). Furniture is refused first: looking at it would
|
|
149
|
+
* change nothing.
|
|
150
|
+
*/
|
|
151
|
+
function requireAsIs(brief, context) {
|
|
152
|
+
const named = [...new Set((brief.asIs ?? []).map((piece) => piece.assetId))];
|
|
153
|
+
if (brief.source !== 'open' || !named.length)
|
|
154
|
+
return;
|
|
155
|
+
const furniture = named.flatMap((id) => {
|
|
156
|
+
const item = context.catalog?.find((candidate) => candidate.id === id);
|
|
157
|
+
return item && !isTechnicalEquipment(item) ? [{ id, name: item.name }] : [];
|
|
158
|
+
});
|
|
159
|
+
if (furniture.length)
|
|
160
|
+
refuse('brief_as_is_furniture', furniture.map(({ name }) => furnitureFact(name)).join(' '), {
|
|
161
|
+
pieces: furniture.map(({ id }) => id),
|
|
162
|
+
});
|
|
163
|
+
const viewed = new Set(context.session?.viewed ?? []);
|
|
164
|
+
const unseen = named.filter((id) => !viewed.has(id));
|
|
165
|
+
if (unseen.length)
|
|
166
|
+
refuse('brief_as_is_not_viewed', notViewed(unseen), { pieces: unseen });
|
|
167
|
+
}
|
|
168
|
+
const isCatalogPlacement = (tool) => CATALOG_PLACEMENT_TOOLS.includes(tool);
|
|
169
|
+
const isCreation = (tool) => FURNISHING_CREATION_TOOLS.includes(tool);
|
|
170
|
+
const asRecord = (value) => typeof value === 'object' && value !== null ? value : {};
|
|
171
|
+
/** The catalog ids a placement call names. */
|
|
172
|
+
function placedAssets(tool, input) {
|
|
173
|
+
const named = tool === 'place_items'
|
|
174
|
+
? (Array.isArray(input.items) ? input.items : []).map((item) => asRecord(item).assetId)
|
|
175
|
+
: [input.assetId];
|
|
176
|
+
return [...new Set(named.filter((id) => typeof id === 'string'))];
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Why a furnishing call may not run under this brief, or null. `brief` null is no brief yet. An
|
|
180
|
+
* `add_object` that names a `nodeId` edits an object that stands: it places and makes nothing.
|
|
181
|
+
* A batch holding a refused call is refused whole: the gate says nothing about its other calls.
|
|
182
|
+
*/
|
|
183
|
+
export function furnishingRefusal(tool, input, brief) {
|
|
184
|
+
if (tool === 'run_batch') {
|
|
185
|
+
const calls = asRecord(input).calls;
|
|
186
|
+
for (const [index, call] of (Array.isArray(calls) ? calls : []).entries()) {
|
|
187
|
+
const { tool: name, input: callInput } = asRecord(call);
|
|
188
|
+
if (typeof name !== 'string')
|
|
189
|
+
continue;
|
|
190
|
+
const refusal = furnishingRefusal(name, callInput, brief);
|
|
191
|
+
if (refusal)
|
|
192
|
+
return new AgentRefusal(refusal.code, `The batch's call ${index + 1} (${name}) is refused: ${refusal.message} Nothing in the batch was applied.`, { ...refusal.details, index, tool: name });
|
|
193
|
+
}
|
|
194
|
+
return null;
|
|
195
|
+
}
|
|
196
|
+
if (!(isCatalogPlacement(tool) || isCreation(tool)))
|
|
197
|
+
return null;
|
|
198
|
+
const args = asRecord(input);
|
|
199
|
+
if (tool === 'add_object' && typeof args.nodeId === 'string')
|
|
200
|
+
return null;
|
|
201
|
+
if (!brief)
|
|
202
|
+
return new AgentRefusal('design_brief_required', NO_BRIEF, { tool });
|
|
203
|
+
if (brief.source !== 'open' || isCreation(tool))
|
|
204
|
+
return null;
|
|
205
|
+
if (tool === 'furnish_room')
|
|
206
|
+
return new AgentRefusal('brief_source_open', openSource("the pieces of furnish_room's stock set"), {
|
|
207
|
+
tool,
|
|
208
|
+
source: brief.source,
|
|
209
|
+
});
|
|
210
|
+
const unnamed = placedAssets(tool, args).filter((id) => !brief.asIs?.some((piece) => piece.assetId === id));
|
|
211
|
+
return unnamed.length
|
|
212
|
+
? new AgentRefusal('brief_source_open', openSource(unnamed.join(', ')), {
|
|
213
|
+
tool,
|
|
214
|
+
source: brief.source,
|
|
215
|
+
pieces: unnamed,
|
|
216
|
+
})
|
|
217
|
+
: null;
|
|
218
|
+
}
|
|
219
|
+
/** Throws the refusal when the host gates and the call may not run; a host with no brief to keep passes. */
|
|
220
|
+
export function requireFurnishing(tool, input, brief) {
|
|
221
|
+
if (brief === undefined)
|
|
222
|
+
return;
|
|
223
|
+
const refusal = furnishingRefusal(tool, input, brief);
|
|
224
|
+
if (refusal)
|
|
225
|
+
throw refusal;
|
|
226
|
+
}
|
|
227
|
+
/** The operation of a furnishing tool, refusing as `requireFurnishing` says before it runs. */
|
|
228
|
+
export function gatedByBrief(tool, operation) {
|
|
229
|
+
return (nodes, input, context) => {
|
|
230
|
+
requireFurnishing(tool, input, context.designBrief);
|
|
231
|
+
return operation(nodes, input, context);
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
/** What a brief opens and leaves closed, as facts. */
|
|
235
|
+
export function briefUnlocks(brief) {
|
|
236
|
+
if (brief.source !== 'open')
|
|
237
|
+
return {
|
|
238
|
+
unlocks: [
|
|
239
|
+
`${CATALOG_PLACEMENT_TOOLS.join(', ')} place the catalog's pieces.`,
|
|
240
|
+
`${FURNISHING_CREATION_TOOLS.join(', ')} stay open for what the catalog lacks.`,
|
|
241
|
+
],
|
|
242
|
+
closed: [],
|
|
243
|
+
};
|
|
244
|
+
const asIs = brief.asIs ?? [];
|
|
245
|
+
return {
|
|
246
|
+
unlocks: [
|
|
247
|
+
`${FURNISHING_CREATION_TOOLS.join(', ')} make the pieces.`,
|
|
248
|
+
...(asIs.length
|
|
249
|
+
? [
|
|
250
|
+
`place_items and place_in_room place the technical equipment named in asIs: ${asIs.map((piece) => piece.assetId).join(', ')}.`,
|
|
251
|
+
]
|
|
252
|
+
: []),
|
|
253
|
+
],
|
|
254
|
+
closed: [
|
|
255
|
+
'furnish_room places a whole stock set.',
|
|
256
|
+
'Catalog pieces not named in asIs: place_items and place_in_room refuse them; view_assets shows the catalog for reference.',
|
|
257
|
+
'asIs keeps technical equipment (sanitaryware, appliances); furniture is made.',
|
|
258
|
+
],
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* `design_brief`: the request read as a brief, recorded as the turn's design record. The operation
|
|
263
|
+
* echoes it with what it opens and hands it back for the host to keep with the session; nothing in
|
|
264
|
+
* the scene changes.
|
|
265
|
+
*/
|
|
266
|
+
export const designBrief = (_nodes, input, context) => {
|
|
267
|
+
const axes = requireAxes(input, context);
|
|
268
|
+
const brand = input.brand?.trim();
|
|
269
|
+
if (input.source === 'brand' && !brand)
|
|
270
|
+
refuse('brand_required', 'source brand names a range: give its name as brand ("IKEA").');
|
|
271
|
+
const quote = input.sourceQuote?.trim();
|
|
272
|
+
if (input.source !== 'open') {
|
|
273
|
+
if (!quote)
|
|
274
|
+
refuse('source_quote_required', `source ${input.source} is set by the request: give sourceQuote, the person's own words that name it ("IKEA furniture only"); a request that names no source is open.`);
|
|
275
|
+
if (!quoteNamesSource(input.source, brand, quote))
|
|
276
|
+
refuse('source_not_named', SOURCE_NOT_IN_REQUEST);
|
|
277
|
+
if (context.requestText !== undefined && !fold(context.requestText).includes(fold(quote)))
|
|
278
|
+
refuse('source_not_in_request', SOURCE_NOT_IN_REQUEST);
|
|
279
|
+
}
|
|
280
|
+
requireDressing(input, axes);
|
|
281
|
+
const brief = {
|
|
282
|
+
axes,
|
|
283
|
+
source: input.source,
|
|
284
|
+
...(input.source !== 'open' && quote ? { sourceQuote: quote } : {}),
|
|
285
|
+
...(input.source === 'brand' && brand ? { brand } : {}),
|
|
286
|
+
vision: input.vision,
|
|
287
|
+
beyond: input.beyond,
|
|
288
|
+
...(input.source === 'open' && input.asIs?.length ? { asIs: input.asIs } : {}),
|
|
289
|
+
};
|
|
290
|
+
requireAsIs(brief, context);
|
|
291
|
+
return {
|
|
292
|
+
result: {
|
|
293
|
+
status: 'recorded',
|
|
294
|
+
brief,
|
|
295
|
+
dressing: dressingOf(input.beyond),
|
|
296
|
+
...briefUnlocks(brief),
|
|
297
|
+
},
|
|
298
|
+
keep: { designBrief: brief },
|
|
299
|
+
};
|
|
300
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AgentOperation } from './types.js';
|
|
2
|
+
type DesignInput = string | Record<string, unknown>;
|
|
3
|
+
type ValidateDesignInput = {
|
|
4
|
+
design: DesignInput;
|
|
5
|
+
parameters?: Record<string, number>;
|
|
6
|
+
};
|
|
7
|
+
type PlaceDesignInput = {
|
|
8
|
+
design: DesignInput;
|
|
9
|
+
hostId: string;
|
|
10
|
+
position: number[];
|
|
11
|
+
rotation?: number;
|
|
12
|
+
side?: 'front' | 'back';
|
|
13
|
+
surfaceId?: string;
|
|
14
|
+
parameters?: Record<string, number>;
|
|
15
|
+
slots?: Record<string, string>;
|
|
16
|
+
name?: string;
|
|
17
|
+
id?: string;
|
|
18
|
+
};
|
|
19
|
+
/** `validate_design`: a procedural recipe checked on its own; the scene is untouched. */
|
|
20
|
+
export declare const validateDesignOperation: AgentOperation<ValidateDesignInput>;
|
|
21
|
+
/** `place_design`: one instance of a validated design, created on its host. */
|
|
22
|
+
export declare const placeDesign: AgentOperation<PlaceDesignInput>;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=designs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"designs.d.ts","sourceRoot":"","sources":["../../src/agent-operations/designs.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEnD,KAAK,mBAAmB,GAAG;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAA;AAEvF,KAAK,gBAAgB,GAAG;IACtB,MAAM,EAAE,WAAW,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,yFAAyF;AACzF,eAAO,MAAM,uBAAuB,EAAE,cAAc,CAAC,mBAAmB,CAKtE,CAAA;AAEF,+EAA+E;AAC/E,eAAO,MAAM,WAAW,EAAE,cAAc,CAAC,gBAAgB,CAqCxD,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { refuse } from '../agent-tools/refusal.js';
|
|
2
|
+
import { validateDesign } from '../procedural-items/design.js';
|
|
3
|
+
import { DesignPlacementError, planDesignPlacement } from '../procedural-items/design-placement.js';
|
|
4
|
+
/** `validate_design`: a procedural recipe checked on its own; the scene is untouched. */
|
|
5
|
+
export const validateDesignOperation = (_nodes, { design, parameters }) => ({
|
|
6
|
+
result: validateDesign(design, { parameters }),
|
|
7
|
+
});
|
|
8
|
+
/** `place_design`: one instance of a validated design, created on its host. */
|
|
9
|
+
export const placeDesign = (nodes, input) => {
|
|
10
|
+
const [x, y, z] = input.position;
|
|
11
|
+
if (x === undefined || y === undefined || z === undefined) {
|
|
12
|
+
refuse('invalid_placement', 'position must hold three coordinates.', {
|
|
13
|
+
position: input.position,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
let placement;
|
|
17
|
+
try {
|
|
18
|
+
placement = planDesignPlacement(nodes, {
|
|
19
|
+
...input,
|
|
20
|
+
position: [x, y, z],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
if (!(error instanceof DesignPlacementError))
|
|
25
|
+
throw error;
|
|
26
|
+
refuse(error.code, error.message, {
|
|
27
|
+
message: error.message,
|
|
28
|
+
...(error.diagnostics.length > 0 ? { diagnostics: error.diagnostics.slice(0, 8) } : {}),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
const { node, parentId, hostUpdate } = placement;
|
|
32
|
+
return {
|
|
33
|
+
result: { designId: node.id, parentId, surfaceId: input.surfaceId ?? null },
|
|
34
|
+
changes: {
|
|
35
|
+
create: [{ node: node, parentId }],
|
|
36
|
+
...(hostUpdate
|
|
37
|
+
? {
|
|
38
|
+
update: [
|
|
39
|
+
{
|
|
40
|
+
id: hostUpdate.id,
|
|
41
|
+
data: { attachments: hostUpdate.attachments },
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
}
|
|
45
|
+
: {}),
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
};
|
|
@@ -29,10 +29,12 @@ export type DoorKeepout = {
|
|
|
29
29
|
doorId: string;
|
|
30
30
|
wallId: string;
|
|
31
31
|
levelId: string | null;
|
|
32
|
-
/** World-space AABB on
|
|
32
|
+
/** World-space AABB: the full clear depth on the swing side, a walkway on the other. */
|
|
33
33
|
aabb: PlanAabb;
|
|
34
34
|
width: number;
|
|
35
35
|
localX: number;
|
|
36
|
+
/** The door's height: an item whose bottom is above it does not block the door. */
|
|
37
|
+
height: number;
|
|
36
38
|
};
|
|
37
39
|
/**
|
|
38
40
|
* Wall shape these helpers accept. Deliberately structural rather than
|
|
@@ -54,11 +56,16 @@ export type DoorOpeningLike = {
|
|
|
54
56
|
id: string;
|
|
55
57
|
position?: readonly number[];
|
|
56
58
|
width?: number;
|
|
59
|
+
height?: number;
|
|
60
|
+
/** Which face the leaf swings towards: 'inward' is the wall's +normal side, as the door plan draws it. */
|
|
61
|
+
swingDirection?: 'inward' | 'outward';
|
|
57
62
|
};
|
|
58
63
|
/** Plan depth (m) cleared on each side of the wall face through the opening. */
|
|
59
64
|
export declare const DEFAULT_DOOR_CLEAR_DEPTH = 0.65;
|
|
60
65
|
/** Extra half-width (m) beyond the door leaf along the wall. */
|
|
61
66
|
export declare const DEFAULT_DOOR_SIDE_PAD = 0.05;
|
|
67
|
+
/** Plan depth (m) kept free on the side a door does not swing to: room to walk through. */
|
|
68
|
+
export declare const DOOR_WALKWAY_DEPTH = 0.35;
|
|
62
69
|
/**
|
|
63
70
|
* True when A and B come closer than `gap` meters (including penetration).
|
|
64
71
|
* `gap` is the **minimum free space required** between boxes:
|
|
@@ -76,6 +83,14 @@ export declare function resolveNodeLevelId(nodeId: string, byId: Map<string, Any
|
|
|
76
83
|
export declare function itemPlanAabb(position: [number, number, number] | number[], dimensions: [number, number, number] | number[] | undefined, rotationYRad?: number): PlanAabb;
|
|
77
84
|
/** Scaled plan footprint used by legacy placement and door-clearance callers. */
|
|
78
85
|
export declare function itemNodePlanAabb(node: AnyNode): PlanAabb | null;
|
|
86
|
+
/**
|
|
87
|
+
* Script bounds need not be centred on the item origin, and the asset's own corrective scale,
|
|
88
|
+
* rotation and offset sit inside the node's scale, as `scriptItemBoundsInLevel` measures them;
|
|
89
|
+
* catalog bounds are normalized.
|
|
90
|
+
*/
|
|
91
|
+
export declare function itemNodePlanCorners(node: Extract<AnyNode, {
|
|
92
|
+
type: 'item';
|
|
93
|
+
}>): Vec2[];
|
|
79
94
|
export declare function inspectItemPlanFootprint(node: Extract<AnyNode, {
|
|
80
95
|
type: 'item';
|
|
81
96
|
}>, options?: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"door-clearance.d.ts","sourceRoot":"","sources":["../../src/agent-operations/door-clearance.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"door-clearance.d.ts","sourceRoot":"","sources":["../../src/agent-operations/door-clearance.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,12 +6,18 @@
|
|
|
6
6
|
*
|
|
7
7
|
* See docs/layout-clearance-error-log.md for pitfalls (levels, gap sign, scale).
|
|
8
8
|
*/
|
|
9
|
+
import { boxCorners, rotateVector } from '../procedural-items/spatial.js';
|
|
9
10
|
import { getScaledDimensions } from '../schema/index.js';
|
|
11
|
+
import { isFloorUnderlay } from './furniture-kind.js';
|
|
12
|
+
import { itemLevelHeightRange, itemPlanAabbInLevel } from './item-space.js';
|
|
10
13
|
import { wallLength } from './plan-geometry.js';
|
|
11
14
|
/** Plan depth (m) cleared on each side of the wall face through the opening. */
|
|
12
15
|
export const DEFAULT_DOOR_CLEAR_DEPTH = 0.65;
|
|
13
16
|
/** Extra half-width (m) beyond the door leaf along the wall. */
|
|
14
17
|
export const DEFAULT_DOOR_SIDE_PAD = 0.05;
|
|
18
|
+
/** Plan depth (m) kept free on the side a door does not swing to: room to walk through. */
|
|
19
|
+
export const DOOR_WALKWAY_DEPTH = 0.35;
|
|
20
|
+
const DEFAULT_DOOR_HEIGHT = 2.1;
|
|
15
21
|
/**
|
|
16
22
|
* True when A and B come closer than `gap` meters (including penetration).
|
|
17
23
|
* `gap` is the **minimum free space required** between boxes:
|
|
@@ -89,7 +95,37 @@ export function itemNodePlanAabb(node) {
|
|
|
89
95
|
if (![node.position[0], node.position[2], width, height, depth, rotationY].every(Number.isFinite)) {
|
|
90
96
|
return null;
|
|
91
97
|
}
|
|
92
|
-
|
|
98
|
+
const corners = itemNodePlanCorners(node);
|
|
99
|
+
if (!corners.every((corner) => corner.every(Number.isFinite)))
|
|
100
|
+
return null;
|
|
101
|
+
return {
|
|
102
|
+
minX: Math.min(...corners.map(([x]) => x)),
|
|
103
|
+
maxX: Math.max(...corners.map(([x]) => x)),
|
|
104
|
+
minZ: Math.min(...corners.map(([, z]) => z)),
|
|
105
|
+
maxZ: Math.max(...corners.map(([, z]) => z)),
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Script bounds need not be centred on the item origin, and the asset's own corrective scale,
|
|
110
|
+
* rotation and offset sit inside the node's scale, as `scriptItemBoundsInLevel` measures them;
|
|
111
|
+
* catalog bounds are normalized.
|
|
112
|
+
*/
|
|
113
|
+
export function itemNodePlanCorners(node) {
|
|
114
|
+
const yaw = node.rotation?.[1] ?? 0;
|
|
115
|
+
const place = (lx, lz) => [
|
|
116
|
+
node.position[0] + lx * Math.cos(yaw) + lz * Math.sin(yaw),
|
|
117
|
+
node.position[2] - lx * Math.sin(yaw) + lz * Math.cos(yaw),
|
|
118
|
+
];
|
|
119
|
+
const bounds = node.source?.manifest.bounds;
|
|
120
|
+
if (!bounds) {
|
|
121
|
+
const [width, , depth] = node.asset.dimensions;
|
|
122
|
+
return [-width / 2, width / 2].flatMap((x) => [-depth / 2, depth / 2].map((z) => place(x * node.scale[0], z * node.scale[2])));
|
|
123
|
+
}
|
|
124
|
+
const assetScale = node.asset.scale ?? [1, 1, 1];
|
|
125
|
+
return boxCorners(bounds.min, bounds.max).map((point) => {
|
|
126
|
+
const [x, , z] = rotateVector(point.map((value, axis) => value * assetScale[axis]), node.asset.rotation);
|
|
127
|
+
return place((x + node.asset.offset[0]) * node.scale[0], (z + node.asset.offset[2]) * node.scale[2]);
|
|
128
|
+
});
|
|
93
129
|
}
|
|
94
130
|
export function inspectItemPlanFootprint(node, options) {
|
|
95
131
|
if (options?.floorOnly &&
|
|
@@ -153,9 +189,12 @@ export function inspectItemPlanFootprint(node, options) {
|
|
|
153
189
|
if (effectiveDimensions[0] <= 0 || effectiveDimensions[2] <= 0) {
|
|
154
190
|
return { ok: false, reason: 'non_positive_plan_dimensions' };
|
|
155
191
|
}
|
|
192
|
+
const aabb = itemNodePlanAabb(node);
|
|
193
|
+
if (!aabb)
|
|
194
|
+
return { ok: false, reason: 'non_finite_dimensions' };
|
|
156
195
|
return {
|
|
157
196
|
ok: true,
|
|
158
|
-
aabb
|
|
197
|
+
aabb,
|
|
159
198
|
sourceDimensions: [width, height, depth],
|
|
160
199
|
effectiveDimensions,
|
|
161
200
|
rotationY,
|
|
@@ -180,11 +219,19 @@ export function doorKeepoutFromWall(wall, door, options) {
|
|
|
180
219
|
const nx = -dz;
|
|
181
220
|
const nz = dx;
|
|
182
221
|
const half = width / 2 + sidePad;
|
|
222
|
+
// The leaf needs the full depth where it swings; the other side only needs a walkway. Without a
|
|
223
|
+
// known swing, both sides get the full depth.
|
|
224
|
+
const walkway = Math.min(clearDepth, DOOR_WALKWAY_DEPTH);
|
|
225
|
+
const [back, front] = door.swingDirection === 'inward'
|
|
226
|
+
? [-walkway, clearDepth]
|
|
227
|
+
: door.swingDirection === 'outward'
|
|
228
|
+
? [-clearDepth, walkway]
|
|
229
|
+
: [-clearDepth, clearDepth];
|
|
183
230
|
const corners = [];
|
|
184
231
|
for (const along of [localX - half, localX + half]) {
|
|
185
232
|
const cx = sx + dx * along;
|
|
186
233
|
const cz = sz + dz * along;
|
|
187
|
-
for (const side of [
|
|
234
|
+
for (const side of [back, front]) {
|
|
188
235
|
corners.push([cx + nx * side, cz + nz * side]);
|
|
189
236
|
}
|
|
190
237
|
}
|
|
@@ -196,6 +243,7 @@ export function doorKeepoutFromWall(wall, door, options) {
|
|
|
196
243
|
levelId: options?.levelId ?? null,
|
|
197
244
|
width,
|
|
198
245
|
localX,
|
|
246
|
+
height: typeof door.height === 'number' && door.height > 0 ? door.height : DEFAULT_DOOR_HEIGHT,
|
|
199
247
|
aabb: {
|
|
200
248
|
minX: Math.min(...xs),
|
|
201
249
|
maxX: Math.max(...xs),
|
|
@@ -251,9 +299,15 @@ export function findBlockedDoors(args) {
|
|
|
251
299
|
const itemLevel = resolveNodeLevelId(node.id, byId);
|
|
252
300
|
if (args.levelId && itemLevel !== args.levelId)
|
|
253
301
|
continue;
|
|
254
|
-
|
|
302
|
+
// A rug is walked over; a thing on a wall is read by the wall observations.
|
|
303
|
+
if (isFloorUnderlay(node))
|
|
304
|
+
continue;
|
|
305
|
+
if (node.parentId && byId.get(node.parentId)?.type === 'wall')
|
|
306
|
+
continue;
|
|
307
|
+
const aabb = itemPlanAabbInLevel(node, byId);
|
|
255
308
|
if (!aabb)
|
|
256
309
|
continue;
|
|
310
|
+
const heights = itemLevelHeightRange(node, byId);
|
|
257
311
|
for (const keepout of keepouts) {
|
|
258
312
|
// Same-level only (multi-story safety).
|
|
259
313
|
if (keepout.levelId && itemLevel && keepout.levelId !== itemLevel)
|
|
@@ -262,6 +316,9 @@ export function findBlockedDoors(args) {
|
|
|
262
316
|
continue;
|
|
263
317
|
if (!itemBlocksDoorKeepout(aabb, keepout))
|
|
264
318
|
continue;
|
|
319
|
+
// A pendant over the doorway is above the leaf.
|
|
320
|
+
if (heights && heights.min >= keepout.height - 0.05)
|
|
321
|
+
continue;
|
|
265
322
|
const itemName = node.name ?? node.asset?.name ?? node.id;
|
|
266
323
|
issues.push({
|
|
267
324
|
doorId: keepout.doorId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"duplicate-level.d.ts","sourceRoot":"","sources":["../../src/agent-operations/duplicate-level.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,+BAA+B,CAAA;AAKtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B,CAAA;AAQD,sFAAsF;AACtF,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,mBAAmB,
|
|
1
|
+
{"version":3,"file":"duplicate-level.d.ts","sourceRoot":"","sources":["../../src/agent-operations/duplicate-level.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,oBAAoB,EAE1B,MAAM,+BAA+B,CAAA;AAKtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,KAAK,mBAAmB,GAAG;IACzB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,CAAA;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,oBAAoB,CAAA;CAC9B,CAAA;AAQD,sFAAsF;AACtF,eAAO,MAAM,cAAc,EAAE,cAAc,CAAC,mBAAmB,CA8C9D,CAAA"}
|
|
@@ -22,7 +22,7 @@ export const duplicateLevel = (nodes, input, context) => {
|
|
|
22
22
|
refuse('no_building', `Level ${levelId} is not in a building, so it has no floors to join.`, {
|
|
23
23
|
levelId,
|
|
24
24
|
});
|
|
25
|
-
const { createOps, newLevelId, shiftedLevels, updateOps, skippedNodes } = buildLevelDuplicateCreateOps({
|
|
25
|
+
const { createOps, newLevelId, shiftedLevels, updateOps, skippedNodes, notes } = buildLevelDuplicateCreateOps({
|
|
26
26
|
nodes: all,
|
|
27
27
|
level,
|
|
28
28
|
levels: levelsOf(nodes).filter((entry) => entry.parentId === building.id || building.children.includes(entry.id)),
|
|
@@ -45,6 +45,7 @@ export const duplicateLevel = (nodes, input, context) => {
|
|
|
45
45
|
// Counts are in `copied`; a floor copy is hundreds of ids the model reads back every call.
|
|
46
46
|
newNodeIds: create.slice(0, 40).map(({ node }) => node.id),
|
|
47
47
|
...(create.length > 40 ? { newNodeIdsOmitted: create.length - 40 } : {}),
|
|
48
|
+
...(notes.length ? { notes } : {}),
|
|
48
49
|
},
|
|
49
50
|
changes: {
|
|
50
51
|
create,
|
|
@@ -1,11 +1,18 @@
|
|
|
1
1
|
import type { AgentOperation } from './types.js';
|
|
2
|
+
export type FindByTypeInput = {
|
|
3
|
+
type?: string;
|
|
4
|
+
levelId?: string;
|
|
5
|
+
parentId?: string;
|
|
6
|
+
zoneId?: string;
|
|
7
|
+
sourceId?: string;
|
|
8
|
+
sourceIdPrefix?: string;
|
|
9
|
+
limit?: number;
|
|
10
|
+
};
|
|
2
11
|
/**
|
|
3
|
-
* `find_by_type`: everything of one type, nodes and the typed parts of
|
|
4
|
-
*
|
|
5
|
-
* object stays the thing that is selected, moved and edited.
|
|
12
|
+
* `find_by_type`: everything of one type, nodes and the typed parts of authored objects alike,
|
|
13
|
+
* narrowed by level, parent, zone or source id. Parts are read from each object's manifest; the
|
|
14
|
+
* object stays the thing that is selected, moved and edited. Each result is the node's summary;
|
|
15
|
+
* `get_node` reads it whole. Past `limit` results are counted, not listed.
|
|
6
16
|
*/
|
|
7
|
-
export declare const findByType: AgentOperation<
|
|
8
|
-
type: string;
|
|
9
|
-
levelId?: string;
|
|
10
|
-
}>;
|
|
17
|
+
export declare const findByType: AgentOperation<FindByTypeInput>;
|
|
11
18
|
//# sourceMappingURL=find-by-type.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-by-type.d.ts","sourceRoot":"","sources":["../../src/agent-operations/find-by-type.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"find-by-type.d.ts","sourceRoot":"","sources":["../../src/agent-operations/find-by-type.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAgB,cAAc,EAAc,MAAM,SAAS,CAAA;AAIvE,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAsPD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,cAAc,CAAC,eAAe,CAiGtD,CAAA"}
|