@pascal-app/core 1.0.6 → 1.0.7
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 +31 -0
- package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
- package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/cases.js +19 -11
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
- package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
- package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
- package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
- package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
- package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
- package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
- package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
- package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
- package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
- package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
- package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
- package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
- package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
- package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
- package/dist/agent-operations/add-column.d.ts.map +1 -1
- package/dist/agent-operations/add-column.js +32 -3
- package/dist/agent-operations/add-fence.d.ts.map +1 -1
- package/dist/agent-operations/add-fence.js +2 -1
- package/dist/agent-operations/add-level.d.ts.map +1 -1
- package/dist/agent-operations/add-level.js +4 -4
- package/dist/agent-operations/add-object.d.ts +32 -6
- package/dist/agent-operations/add-object.d.ts.map +1 -1
- package/dist/agent-operations/add-object.js +59 -12
- package/dist/agent-operations/add-wall.d.ts +3 -8
- package/dist/agent-operations/add-wall.d.ts.map +1 -1
- package/dist/agent-operations/add-wall.js +31 -8
- package/dist/agent-operations/apply-changes.d.ts.map +1 -1
- package/dist/agent-operations/apply-changes.js +2 -1
- package/dist/agent-operations/asset-catalog.d.ts +63 -0
- package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
- package/dist/agent-operations/asset-catalog.js +182 -0
- package/dist/agent-operations/asset-views.d.ts +4 -2
- package/dist/agent-operations/asset-views.d.ts.map +1 -1
- package/dist/agent-operations/asset-views.js +1 -3
- package/dist/agent-operations/author-scene-checks.d.ts +38 -0
- package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
- package/dist/agent-operations/author-scene-checks.js +266 -0
- package/dist/agent-operations/author-scene.d.ts +54 -20
- package/dist/agent-operations/author-scene.d.ts.map +1 -1
- package/dist/agent-operations/author-scene.js +1164 -196
- package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
- package/dist/agent-operations/authored-scene-merge.js +61 -3
- package/dist/agent-operations/batch.d.ts +1 -1
- package/dist/agent-operations/batch.d.ts.map +1 -1
- package/dist/agent-operations/batch.js +38 -39
- package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/ceiling-object-observations.js +5 -4
- package/dist/agent-operations/circulation-geometry.d.ts +14 -0
- package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
- package/dist/agent-operations/circulation-geometry.js +151 -0
- package/dist/agent-operations/circulation-graph.d.ts +72 -0
- package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
- package/dist/agent-operations/circulation-graph.js +713 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
- package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-non-spaces.js +88 -0
- package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
- package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
- package/dist/agent-operations/circulation-spaces.js +368 -0
- package/dist/agent-operations/collections.d.ts.map +1 -1
- package/dist/agent-operations/collections.js +9 -7
- package/dist/agent-operations/corner-window.d.ts.map +1 -1
- package/dist/agent-operations/corner-window.js +2 -4
- package/dist/agent-operations/create-roof.d.ts.map +1 -1
- package/dist/agent-operations/create-roof.js +5 -7
- package/dist/agent-operations/create-room.d.ts +4 -1
- package/dist/agent-operations/create-room.d.ts.map +1 -1
- package/dist/agent-operations/create-room.js +7 -4
- package/dist/agent-operations/create-stair.js +2 -2
- package/dist/agent-operations/design-brief.d.ts +13 -7
- package/dist/agent-operations/design-brief.d.ts.map +1 -1
- package/dist/agent-operations/design-brief.js +172 -92
- package/dist/agent-operations/door-clearance.d.ts +68 -8
- package/dist/agent-operations/door-clearance.d.ts.map +1 -1
- package/dist/agent-operations/door-clearance.js +127 -20
- package/dist/agent-operations/dress-targets.d.ts +23 -0
- package/dist/agent-operations/dress-targets.d.ts.map +1 -0
- package/dist/agent-operations/dress-targets.js +34 -0
- package/dist/agent-operations/duplicate-node.d.ts +14 -0
- package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
- package/dist/agent-operations/duplicate-node.js +173 -0
- package/dist/agent-operations/find-by-type.d.ts.map +1 -1
- package/dist/agent-operations/find-by-type.js +3 -0
- package/dist/agent-operations/furnish-room.d.ts +2 -0
- package/dist/agent-operations/furnish-room.d.ts.map +1 -1
- package/dist/agent-operations/furnish-room.js +15 -4
- package/dist/agent-operations/furniture-kind.d.ts +28 -1
- package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
- package/dist/agent-operations/furniture-kind.js +105 -6
- package/dist/agent-operations/ground-reader.d.ts +10 -0
- package/dist/agent-operations/ground-reader.d.ts.map +1 -0
- package/dist/agent-operations/ground-reader.js +25 -0
- package/dist/agent-operations/index.d.ts +118 -12
- package/dist/agent-operations/index.d.ts.map +1 -1
- package/dist/agent-operations/index.js +26 -1
- package/dist/agent-operations/item-solids.d.ts +39 -0
- package/dist/agent-operations/item-solids.d.ts.map +1 -0
- package/dist/agent-operations/item-solids.js +128 -0
- package/dist/agent-operations/layout-clearance.d.ts +91 -11
- package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
- package/dist/agent-operations/layout-clearance.js +280 -73
- package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
- package/dist/agent-operations/level-height-fill.js +7 -1
- package/dist/agent-operations/level-reads.d.ts +5 -0
- package/dist/agent-operations/level-reads.d.ts.map +1 -1
- package/dist/agent-operations/level-reads.js +38 -2
- package/dist/agent-operations/list-levels.d.ts.map +1 -1
- package/dist/agent-operations/list-levels.js +2 -4
- package/dist/agent-operations/move-node.d.ts +12 -0
- package/dist/agent-operations/move-node.d.ts.map +1 -0
- package/dist/agent-operations/move-node.js +28 -0
- package/dist/agent-operations/move-plan.d.ts +28 -0
- package/dist/agent-operations/move-plan.d.ts.map +1 -0
- package/dist/agent-operations/move-plan.js +257 -0
- package/dist/agent-operations/node-patch.d.ts.map +1 -1
- package/dist/agent-operations/node-patch.js +15 -0
- package/dist/agent-operations/paint.d.ts +3 -1
- package/dist/agent-operations/paint.d.ts.map +1 -1
- package/dist/agent-operations/paint.js +14 -1
- package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
- package/dist/agent-operations/photo-elevation.js +2 -1
- package/dist/agent-operations/place-in-room.d.ts.map +1 -1
- package/dist/agent-operations/place-in-room.js +1 -0
- package/dist/agent-operations/place-items.d.ts.map +1 -1
- package/dist/agent-operations/place-items.js +3 -4
- package/dist/agent-operations/plan-clearance.d.ts +28 -0
- package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
- package/dist/agent-operations/plan-clearance.js +47 -0
- package/dist/agent-operations/plan-geometry.d.ts +2 -0
- package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
- package/dist/agent-operations/plan-geometry.js +10 -0
- package/dist/agent-operations/project-files.d.ts +10 -0
- package/dist/agent-operations/project-files.d.ts.map +1 -1
- package/dist/agent-operations/reachability.d.ts +41 -0
- package/dist/agent-operations/reachability.d.ts.map +1 -0
- package/dist/agent-operations/reachability.js +199 -0
- package/dist/agent-operations/room-checks.d.ts +60 -0
- package/dist/agent-operations/room-checks.d.ts.map +1 -0
- package/dist/agent-operations/room-checks.js +226 -0
- package/dist/agent-operations/room-faces.d.ts +30 -0
- package/dist/agent-operations/room-faces.d.ts.map +1 -0
- package/dist/agent-operations/room-faces.js +31 -0
- package/dist/agent-operations/room-findings.d.ts +5 -2
- package/dist/agent-operations/room-findings.d.ts.map +1 -1
- package/dist/agent-operations/room-findings.js +30 -0
- package/dist/agent-operations/room-finishes.d.ts +87 -0
- package/dist/agent-operations/room-finishes.d.ts.map +1 -0
- package/dist/agent-operations/room-finishes.js +193 -0
- package/dist/agent-operations/room-floor-script.d.ts +3 -3
- package/dist/agent-operations/room-floor-script.js +3 -3
- package/dist/agent-operations/room-readings.d.ts +90 -0
- package/dist/agent-operations/room-readings.d.ts.map +1 -0
- package/dist/agent-operations/room-readings.js +369 -0
- package/dist/agent-operations/room-tile.d.ts +15 -0
- package/dist/agent-operations/room-tile.d.ts.map +1 -0
- package/dist/agent-operations/room-tile.js +30 -0
- package/dist/agent-operations/room-wet.d.ts +55 -0
- package/dist/agent-operations/room-wet.d.ts.map +1 -0
- package/dist/agent-operations/room-wet.js +203 -0
- package/dist/agent-operations/scene-check-policy.d.ts +5 -0
- package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
- package/dist/agent-operations/scene-check-policy.js +24 -0
- package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
- package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/scene-checkpoint.js +31 -0
- package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
- package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
- package/dist/agent-operations/scene-issue-groups.js +71 -0
- package/dist/agent-operations/scene-materials.d.ts +23 -0
- package/dist/agent-operations/scene-materials.d.ts.map +1 -1
- package/dist/agent-operations/scene-materials.js +41 -0
- package/dist/agent-operations/scene-queries.d.ts +1667 -866
- package/dist/agent-operations/scene-queries.d.ts.map +1 -1
- package/dist/agent-operations/scene-queries.js +3 -3
- package/dist/agent-operations/scene-review.d.ts.map +1 -1
- package/dist/agent-operations/scene-review.js +3 -2
- package/dist/agent-operations/scene-view.d.ts.map +1 -1
- package/dist/agent-operations/scene-view.js +91 -21
- package/dist/agent-operations/search-assets.d.ts +10 -6
- package/dist/agent-operations/search-assets.d.ts.map +1 -1
- package/dist/agent-operations/search-assets.js +37 -22
- package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
- package/dist/agent-operations/set-checkpoint.js +1 -0
- package/dist/agent-operations/set-ground-level.d.ts +1 -1
- package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
- package/dist/agent-operations/set-ground-level.js +3 -14
- package/dist/agent-operations/site.js +3 -2
- package/dist/agent-operations/slab-surface-script.d.ts +25 -0
- package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
- package/dist/agent-operations/slab-surface-script.js +60 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
- package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
- package/dist/agent-operations/stair-plan-footprint.js +50 -0
- package/dist/agent-operations/types.d.ts +10 -5
- package/dist/agent-operations/types.d.ts.map +1 -1
- package/dist/agent-operations/units.d.ts +26 -0
- package/dist/agent-operations/units.d.ts.map +1 -0
- package/dist/agent-operations/units.js +110 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
- package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
- package/dist/agent-operations/unreachable-rooms-check.js +35 -0
- package/dist/agent-operations/usage-checks.d.ts +2 -0
- package/dist/agent-operations/usage-checks.d.ts.map +1 -0
- package/dist/agent-operations/usage-checks.js +12 -0
- package/dist/agent-operations/verify-scene.d.ts +8 -11
- package/dist/agent-operations/verify-scene.d.ts.map +1 -1
- package/dist/agent-operations/verify-scene.js +55 -11
- package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
- package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
- package/dist/agent-operations/wall-face-defaults.js +229 -0
- package/dist/agent-operations/wall-joins.d.ts +119 -0
- package/dist/agent-operations/wall-joins.d.ts.map +1 -0
- package/dist/agent-operations/wall-joins.js +308 -0
- package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
- package/dist/agent-operations/wall-object-observations.js +4 -6
- package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
- package/dist/agent-operations/wall-skirting.js +2 -0
- package/dist/agent-operations/wall-type.d.ts +49 -0
- package/dist/agent-operations/wall-type.d.ts.map +1 -0
- package/dist/agent-operations/wall-type.js +31 -0
- package/dist/agent-operations/zone-coverage.d.ts +85 -0
- package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
- package/dist/agent-operations/zone-coverage.js +208 -0
- package/dist/agent-tools/add-object.d.ts +31 -0
- package/dist/agent-tools/add-object.d.ts.map +1 -1
- package/dist/agent-tools/add-object.js +44 -7
- package/dist/agent-tools/assets.d.ts +4 -0
- package/dist/agent-tools/assets.d.ts.map +1 -1
- package/dist/agent-tools/assets.js +11 -1
- package/dist/agent-tools/author-scene.d.ts +810 -15
- package/dist/agent-tools/author-scene.d.ts.map +1 -1
- package/dist/agent-tools/author-scene.js +275 -34
- package/dist/agent-tools/batch.d.ts +1 -1
- package/dist/agent-tools/batch.d.ts.map +1 -1
- package/dist/agent-tools/batch.js +5 -1
- package/dist/agent-tools/checkpoints.js +1 -1
- package/dist/agent-tools/columns.d.ts +14 -0
- package/dist/agent-tools/columns.d.ts.map +1 -1
- package/dist/agent-tools/columns.js +14 -2
- package/dist/agent-tools/contract.d.ts +10 -0
- package/dist/agent-tools/contract.d.ts.map +1 -1
- package/dist/agent-tools/contract.js +5 -1
- package/dist/agent-tools/corner-window.d.ts +1 -0
- package/dist/agent-tools/corner-window.d.ts.map +1 -1
- package/dist/agent-tools/corner-window.js +1 -1
- package/dist/agent-tools/create-room.d.ts +85 -0
- package/dist/agent-tools/create-room.d.ts.map +1 -1
- package/dist/agent-tools/create-room.js +8 -1
- package/dist/agent-tools/design-brief.d.ts +513 -7
- package/dist/agent-tools/design-brief.d.ts.map +1 -1
- package/dist/agent-tools/design-brief.js +192 -14
- package/dist/agent-tools/designs.js +1 -1
- package/dist/agent-tools/find-by-type.js +1 -1
- package/dist/agent-tools/index.d.ts +658 -10
- package/dist/agent-tools/index.d.ts.map +1 -1
- package/dist/agent-tools/index.js +9 -1
- package/dist/agent-tools/levels.js +4 -4
- package/dist/agent-tools/move-duplicate.d.ts +65 -0
- package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
- package/dist/agent-tools/move-duplicate.js +68 -0
- package/dist/agent-tools/paint.d.ts +6 -0
- package/dist/agent-tools/paint.d.ts.map +1 -1
- package/dist/agent-tools/paint.js +7 -3
- package/dist/agent-tools/photo-elevation.js +1 -1
- package/dist/agent-tools/project-files.d.ts +2 -2
- package/dist/agent-tools/project-files.d.ts.map +1 -1
- package/dist/agent-tools/project-files.js +1 -1
- package/dist/agent-tools/refusal.d.ts +9 -1
- package/dist/agent-tools/refusal.d.ts.map +1 -1
- package/dist/agent-tools/refusal.js +5 -1
- package/dist/agent-tools/roofs.js +1 -1
- package/dist/agent-tools/room-structure.d.ts +60 -0
- package/dist/agent-tools/room-structure.d.ts.map +1 -1
- package/dist/agent-tools/room-structure.js +20 -1
- package/dist/agent-tools/search-materials.d.ts +1 -0
- package/dist/agent-tools/search-materials.d.ts.map +1 -1
- package/dist/agent-tools/site.js +1 -1
- package/dist/agent-tools/stairs.js +1 -1
- package/dist/agent-tools/units.d.ts +84 -0
- package/dist/agent-tools/units.d.ts.map +1 -0
- package/dist/agent-tools/units.js +54 -0
- package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
- package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
- package/dist/agent-tools/verify-scene-usage.js +146 -0
- package/dist/agent-tools/verify-scene.d.ts +12 -1
- package/dist/agent-tools/verify-scene.d.ts.map +1 -1
- package/dist/agent-tools/verify-scene.js +183 -3
- package/dist/agent-tools/view-scene.d.ts +3 -0
- package/dist/agent-tools/view-scene.d.ts.map +1 -1
- package/dist/agent-tools/view-scene.js +4 -1
- package/dist/agent-tools/wall-openings.d.ts +121 -2
- package/dist/agent-tools/wall-openings.d.ts.map +1 -1
- package/dist/agent-tools/wall-openings.js +123 -18
- package/dist/agent-tools/walls.d.ts +30 -0
- package/dist/agent-tools/walls.d.ts.map +1 -1
- package/dist/agent-tools/walls.js +54 -2
- package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
- package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
- package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
- package/dist/building/code-profile.d.ts +231 -0
- package/dist/building/code-profile.d.ts.map +1 -0
- package/dist/building/code-profile.js +208 -0
- package/dist/building/corner-window.d.ts +2 -2
- package/dist/building/corner-window.d.ts.map +1 -1
- package/dist/building/corner-window.js +11 -2
- package/dist/building/door-types.d.ts +1 -0
- package/dist/building/door-types.d.ts.map +1 -1
- package/dist/building/door-types.js +2 -0
- package/dist/building/floor-item-fit.d.ts.map +1 -1
- package/dist/building/floor-item-fit.js +2 -4
- package/dist/building/ground-level.d.ts +1 -3
- package/dist/building/ground-level.d.ts.map +1 -1
- package/dist/building/ground-level.js +3 -5
- package/dist/building/index.d.ts +2 -0
- package/dist/building/index.d.ts.map +1 -1
- package/dist/building/index.js +2 -0
- package/dist/building/level-duplication.d.ts +5951 -4351
- package/dist/building/level-duplication.d.ts.map +1 -1
- package/dist/building/level-insertion.d.ts +1 -1
- package/dist/building/level-wall-copy.d.ts +24 -0
- package/dist/building/level-wall-copy.d.ts.map +1 -0
- package/dist/building/level-wall-copy.js +53 -0
- package/dist/building/merge-windows.d.ts.map +1 -1
- package/dist/building/merge-windows.js +1 -0
- package/dist/building/opening-style-presets.d.ts +2 -0
- package/dist/building/opening-style-presets.d.ts.map +1 -1
- package/dist/building/opening-style-presets.js +26 -5
- package/dist/building/room-use.d.ts +26 -0
- package/dist/building/room-use.d.ts.map +1 -0
- package/dist/building/room-use.js +102 -0
- package/dist/building/wall-openings.d.ts +115 -7
- package/dist/building/wall-openings.d.ts.map +1 -1
- package/dist/building/wall-openings.js +121 -29
- package/dist/building/window-types.d.ts +1 -0
- package/dist/building/window-types.d.ts.map +1 -1
- package/dist/building/window-types.js +3 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
- package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
- package/dist/commands/structure/attached-walls.d.ts +16 -0
- package/dist/commands/structure/attached-walls.d.ts.map +1 -0
- package/dist/commands/structure/attached-walls.js +53 -0
- package/dist/commands/structure/index.d.ts +3 -0
- package/dist/commands/structure/index.d.ts.map +1 -1
- package/dist/commands/structure/index.js +3 -0
- package/dist/commands/structure/move-separators.d.ts +62 -0
- package/dist/commands/structure/move-separators.d.ts.map +1 -0
- package/dist/commands/structure/move-separators.js +346 -0
- package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
- package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
- package/dist/commands/structure/set-wall-geometry.js +44 -11
- package/dist/commands/structure/set-zone-intent.d.ts +26 -0
- package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
- package/dist/commands/structure/set-zone-intent.js +107 -2
- package/dist/commands/structure/shared.d.ts +888 -88
- package/dist/commands/structure/shared.d.ts.map +1 -1
- package/dist/commands/structure/wall-overlap.d.ts +45 -0
- package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
- package/dist/commands/structure/wall-overlap.js +289 -0
- package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
- package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.d.ts +2 -2
- package/dist/contracts/reference-discovery.d.ts.map +1 -1
- package/dist/contracts/reference-discovery.js +5 -3
- package/dist/contracts/reference-inventory.d.ts.map +1 -1
- package/dist/contracts/reference-inventory.js +75 -24
- package/dist/events/bus.d.ts +15 -2
- package/dist/events/bus.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
- package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
- package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
- package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
- package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
- package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
- package/dist/i18n/format.d.ts +41 -0
- package/dist/i18n/format.d.ts.map +1 -0
- package/dist/i18n/format.js +124 -0
- package/dist/i18n/index.d.ts +5 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +3 -0
- package/dist/i18n/registry.d.ts +78 -0
- package/dist/i18n/registry.d.ts.map +1 -0
- package/dist/i18n/registry.js +252 -0
- package/dist/i18n/use-translate.d.ts +16 -0
- package/dist/i18n/use-translate.d.ts.map +1 -0
- package/dist/i18n/use-translate.js +23 -0
- package/dist/index.d.ts +32 -16
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -15
- package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
- package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
- package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
- package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
- package/dist/lib/beam.d.ts +137 -0
- package/dist/lib/beam.d.ts.map +1 -0
- package/dist/lib/beam.js +297 -0
- package/dist/lib/below-grade-footprints.d.ts +13 -5
- package/dist/lib/below-grade-footprints.d.ts.map +1 -1
- package/dist/lib/below-grade-footprints.js +53 -10
- package/dist/lib/build-up.d.ts +89 -0
- package/dist/lib/build-up.d.ts.map +1 -0
- package/dist/lib/build-up.js +216 -0
- package/dist/lib/corner-pair.d.ts +205 -4
- package/dist/lib/corner-pair.d.ts.map +1 -1
- package/dist/lib/deck-boards.d.ts +80 -0
- package/dist/lib/deck-boards.d.ts.map +1 -0
- package/dist/lib/deck-boards.js +184 -0
- package/dist/lib/deck-framing.d.ts +150 -0
- package/dist/lib/deck-framing.d.ts.map +1 -0
- package/dist/lib/deck-framing.js +515 -0
- package/dist/lib/deepest-drawn.d.ts +3 -6
- package/dist/lib/deepest-drawn.d.ts.map +1 -1
- package/dist/lib/deepest-drawn.js +4 -8
- package/dist/lib/door-opening.d.ts +19 -0
- package/dist/lib/door-opening.d.ts.map +1 -0
- package/dist/lib/door-opening.js +27 -0
- package/dist/lib/door-operation.d.ts +2 -0
- package/dist/lib/door-operation.d.ts.map +1 -1
- package/dist/lib/door-operation.js +4 -0
- package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
- package/dist/lib/exterior-wall-loops.js +2 -1
- package/dist/lib/finish-script.d.ts +5 -5
- package/dist/lib/finish-script.d.ts.map +1 -1
- package/dist/lib/finish-script.js +12 -5
- package/dist/lib/floor-footprint-name.d.ts +17 -0
- package/dist/lib/floor-footprint-name.d.ts.map +1 -1
- package/dist/lib/floor-footprint-name.js +17 -4
- package/dist/lib/floor-intent-changes.d.ts.map +1 -1
- package/dist/lib/floor-intent-changes.js +60 -35
- package/dist/lib/floor-opening-footprints.d.ts +1 -1
- package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
- package/dist/lib/floor-opening-footprints.js +10 -4
- package/dist/lib/floor-plate-paint.d.ts +2 -0
- package/dist/lib/floor-plate-paint.d.ts.map +1 -1
- package/dist/lib/floor-plate-paint.js +12 -0
- package/dist/lib/floor-plates.d.ts +250 -0
- package/dist/lib/floor-plates.d.ts.map +1 -1
- package/dist/lib/floor-plates.js +43 -4
- package/dist/lib/floor-script.d.ts +35 -6
- package/dist/lib/floor-script.d.ts.map +1 -1
- package/dist/lib/floor-script.js +96 -16
- package/dist/lib/foundation-construction.d.ts +4 -13
- package/dist/lib/foundation-construction.d.ts.map +1 -1
- package/dist/lib/foundation-construction.js +4 -14
- package/dist/lib/foundation-standard.d.ts +2 -3
- package/dist/lib/foundation-standard.d.ts.map +1 -1
- package/dist/lib/foundation-standard.js +2 -3
- package/dist/lib/foundation-wall.d.ts +1 -2
- package/dist/lib/foundation-wall.d.ts.map +1 -1
- package/dist/lib/foundation-wall.js +1 -2
- package/dist/lib/framing-post.d.ts +91 -0
- package/dist/lib/framing-post.d.ts.map +1 -0
- package/dist/lib/framing-post.js +174 -0
- package/dist/lib/geometry-script-node.d.ts +11 -0
- package/dist/lib/geometry-script-node.d.ts.map +1 -1
- package/dist/lib/geometry-script-node.js +35 -0
- package/dist/lib/grade-standing.d.ts +16 -2
- package/dist/lib/grade-standing.d.ts.map +1 -1
- package/dist/lib/grade-standing.js +129 -9
- package/dist/lib/ground-seat.d.ts +2 -22
- package/dist/lib/ground-seat.d.ts.map +1 -1
- package/dist/lib/ground-seat.js +2 -17
- package/dist/lib/ground-window.d.ts +2 -1
- package/dist/lib/ground-window.d.ts.map +1 -1
- package/dist/lib/ground-window.js +5 -2
- package/dist/lib/level-footprints.d.ts +2 -0
- package/dist/lib/level-footprints.d.ts.map +1 -1
- package/dist/lib/level-footprints.js +7 -0
- package/dist/lib/opening-casing.d.ts +67 -0
- package/dist/lib/opening-casing.d.ts.map +1 -0
- package/dist/lib/opening-casing.js +131 -0
- package/dist/lib/opening-exterior-face.d.ts +6 -0
- package/dist/lib/opening-exterior-face.d.ts.map +1 -0
- package/dist/lib/opening-exterior-face.js +15 -0
- package/dist/lib/opening-floor-datum.d.ts +11 -5
- package/dist/lib/opening-floor-datum.d.ts.map +1 -1
- package/dist/lib/opening-floor-datum.js +38 -6
- package/dist/lib/opening-frame-depth.d.ts +18 -0
- package/dist/lib/opening-frame-depth.d.ts.map +1 -0
- package/dist/lib/opening-frame-depth.js +22 -0
- package/dist/lib/outdoor-room.d.ts +32 -0
- package/dist/lib/outdoor-room.d.ts.map +1 -0
- package/dist/lib/outdoor-room.js +66 -0
- package/dist/lib/plate-surface.d.ts +8 -0
- package/dist/lib/plate-surface.d.ts.map +1 -1
- package/dist/lib/plate-surface.js +53 -3
- package/dist/lib/porch-framing-sync.d.ts +46 -0
- package/dist/lib/porch-framing-sync.d.ts.map +1 -0
- package/dist/lib/porch-framing-sync.js +206 -0
- package/dist/lib/porch-framing.d.ts +44 -0
- package/dist/lib/porch-framing.d.ts.map +1 -0
- package/dist/lib/porch-framing.js +159 -0
- package/dist/lib/railing-rooms.d.ts +13 -0
- package/dist/lib/railing-rooms.d.ts.map +1 -0
- package/dist/lib/railing-rooms.js +37 -0
- package/dist/lib/roof-eave.d.ts +135 -0
- package/dist/lib/roof-eave.d.ts.map +1 -0
- package/dist/lib/roof-eave.js +186 -0
- package/dist/lib/room-floor-plate.d.ts +3 -1
- package/dist/lib/room-floor-plate.d.ts.map +1 -1
- package/dist/lib/room-floor-plate.js +7 -0
- package/dist/lib/space-detection.d.ts +13 -0
- package/dist/lib/space-detection.d.ts.map +1 -1
- package/dist/lib/space-detection.js +112 -24
- package/dist/lib/structure-kernel.d.ts +22 -9
- package/dist/lib/structure-kernel.d.ts.map +1 -1
- package/dist/lib/structure-kernel.js +146 -28
- package/dist/lib/structure-reconcile.d.ts +1 -1
- package/dist/lib/structure-reconcile.d.ts.map +1 -1
- package/dist/lib/structure-reconcile.js +7 -4
- package/dist/lib/surface-intent.d.ts +10 -0
- package/dist/lib/surface-intent.d.ts.map +1 -0
- package/dist/lib/surface-intent.js +18 -0
- package/dist/lib/terrain-source.d.ts.map +1 -1
- package/dist/lib/terrain-source.js +2 -1
- package/dist/lib/wall-face-script.d.ts.map +1 -1
- package/dist/lib/wall-face-script.js +5 -2
- package/dist/material-kinds.d.ts +1 -1
- package/dist/material-kinds.d.ts.map +1 -1
- package/dist/material-kinds.js +1 -0
- package/dist/material-library.d.ts +15 -0
- package/dist/material-library.d.ts.map +1 -1
- package/dist/material-library.js +458 -59
- package/dist/node-slots/door.d.ts +3 -4
- package/dist/node-slots/door.d.ts.map +1 -1
- package/dist/node-slots/door.js +4 -3
- package/dist/node-slots/wall.d.ts.map +1 -1
- package/dist/node-slots/wall.js +21 -3
- package/dist/node-slots/window.d.ts +2 -2
- package/dist/node-slots/window.d.ts.map +1 -1
- package/dist/node-slots/window.js +6 -1
- package/dist/procedural-items/design.d.ts +8 -0
- package/dist/procedural-items/design.d.ts.map +1 -1
- package/dist/procedural-items/design.js +169 -21
- package/dist/procedural-items/motion-controller.d.ts +2 -0
- package/dist/procedural-items/motion-controller.d.ts.map +1 -1
- package/dist/procedural-items/motion-controller.js +2 -1
- package/dist/registry/index.d.ts +2 -2
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/registry/mechanism.d.ts +4 -1
- package/dist/registry/mechanism.d.ts.map +1 -1
- package/dist/registry/mechanism.js +10 -0
- package/dist/registry/types.d.ts +65 -23
- package/dist/registry/types.d.ts.map +1 -1
- package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
- package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
- package/dist/runtime/__fixtures__/live-scene.js +64 -0
- package/dist/runtime/apply.d.ts +42 -0
- package/dist/runtime/apply.d.ts.map +1 -0
- package/dist/runtime/apply.js +274 -0
- package/dist/runtime/dependencies.d.ts +97 -0
- package/dist/runtime/dependencies.d.ts.map +1 -0
- package/dist/runtime/dependencies.js +42 -0
- package/dist/runtime/ids.d.ts +11 -0
- package/dist/runtime/ids.d.ts.map +1 -0
- package/dist/runtime/ids.js +80 -0
- package/dist/runtime/index.d.ts +14 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +11 -0
- package/dist/runtime/node-queries.d.ts +16 -0
- package/dist/runtime/node-queries.d.ts.map +1 -0
- package/dist/runtime/node-queries.js +30 -0
- package/dist/runtime/patch.d.ts +26 -0
- package/dist/runtime/patch.d.ts.map +1 -0
- package/dist/runtime/patch.js +165 -0
- package/dist/runtime/reader.d.ts +104 -0
- package/dist/runtime/reader.d.ts.map +1 -0
- package/dist/runtime/reader.js +455 -0
- package/dist/runtime/scene-runtime.d.ts +112 -0
- package/dist/runtime/scene-runtime.d.ts.map +1 -0
- package/dist/runtime/scene-runtime.js +302 -0
- package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
- package/dist/schema/__fixtures__/node-fixtures.js +1 -0
- package/dist/schema/assembly.d.ts +3 -0
- package/dist/schema/assembly.d.ts.map +1 -1
- package/dist/schema/assembly.js +13 -0
- package/dist/schema/asset-url.d.ts +37 -2
- package/dist/schema/asset-url.d.ts.map +1 -1
- package/dist/schema/asset-url.js +80 -11
- package/dist/schema/base.d.ts +8 -0
- package/dist/schema/base.d.ts.map +1 -1
- package/dist/schema/base.js +19 -1
- package/dist/schema/build-up.d.ts +247 -0
- package/dist/schema/build-up.d.ts.map +1 -0
- package/dist/schema/build-up.js +83 -0
- package/dist/schema/geometry-source.d.ts +80 -0
- package/dist/schema/geometry-source.d.ts.map +1 -1
- package/dist/schema/geometry-source.js +38 -0
- package/dist/schema/index.d.ts +12 -7
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +12 -6
- package/dist/schema/material.d.ts +5 -0
- package/dist/schema/material.d.ts.map +1 -1
- package/dist/schema/material.js +6 -0
- package/dist/schema/nodes/beam.d.ts +264 -0
- package/dist/schema/nodes/beam.d.ts.map +1 -0
- package/dist/schema/nodes/beam.js +139 -0
- package/dist/schema/nodes/box-vent.d.ts +5 -0
- package/dist/schema/nodes/box-vent.d.ts.map +1 -1
- package/dist/schema/nodes/cabinet.d.ts +10 -0
- package/dist/schema/nodes/cabinet.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.d.ts +48 -0
- package/dist/schema/nodes/ceiling.d.ts.map +1 -1
- package/dist/schema/nodes/ceiling.js +5 -0
- package/dist/schema/nodes/chimney.d.ts +10 -0
- package/dist/schema/nodes/chimney.d.ts.map +1 -1
- package/dist/schema/nodes/column.d.ts +42 -0
- package/dist/schema/nodes/column.d.ts.map +1 -1
- package/dist/schema/nodes/column.js +11 -1
- package/dist/schema/nodes/cupola.d.ts +5 -0
- package/dist/schema/nodes/cupola.d.ts.map +1 -1
- package/dist/schema/nodes/door.d.ts +54 -3
- package/dist/schema/nodes/door.d.ts.map +1 -1
- package/dist/schema/nodes/door.js +41 -7
- package/dist/schema/nodes/dormer.d.ts +20 -0
- package/dist/schema/nodes/dormer.d.ts.map +1 -1
- package/dist/schema/nodes/downspout.d.ts +5 -0
- package/dist/schema/nodes/downspout.d.ts.map +1 -1
- package/dist/schema/nodes/elevator.d.ts +5 -0
- package/dist/schema/nodes/elevator.d.ts.map +1 -1
- package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
- package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
- package/dist/schema/nodes/fence.d.ts +5 -0
- package/dist/schema/nodes/fence.d.ts.map +1 -1
- package/dist/schema/nodes/guide.d.ts +14 -0
- package/dist/schema/nodes/guide.d.ts.map +1 -1
- package/dist/schema/nodes/guide.js +2 -0
- package/dist/schema/nodes/gutter.d.ts +5 -0
- package/dist/schema/nodes/gutter.d.ts.map +1 -1
- package/dist/schema/nodes/item.d.ts +71 -0
- package/dist/schema/nodes/item.d.ts.map +1 -1
- package/dist/schema/nodes/item.js +5 -1
- package/dist/schema/nodes/level.d.ts +1 -1
- package/dist/schema/nodes/level.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.d.ts +13 -0
- package/dist/schema/nodes/opening-types.d.ts.map +1 -1
- package/dist/schema/nodes/opening-types.js +8 -1
- package/dist/schema/nodes/railing-wall.d.ts +112 -0
- package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
- package/dist/schema/nodes/railing-wall.js +160 -0
- package/dist/schema/nodes/ridge-vent.d.ts +5 -0
- package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.d.ts +224 -1
- package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
- package/dist/schema/nodes/roof-segment.js +57 -10
- package/dist/schema/nodes/roof-types.d.ts +11 -0
- package/dist/schema/nodes/roof-types.d.ts.map +1 -1
- package/dist/schema/nodes/roof-types.js +6 -0
- package/dist/schema/nodes/roof.d.ts +60 -0
- package/dist/schema/nodes/roof.d.ts.map +1 -1
- package/dist/schema/nodes/roof.js +4 -0
- package/dist/schema/nodes/shelf.d.ts +5 -0
- package/dist/schema/nodes/shelf.d.ts.map +1 -1
- package/dist/schema/nodes/site.d.ts +80 -0
- package/dist/schema/nodes/site.d.ts.map +1 -1
- package/dist/schema/nodes/site.js +7 -0
- package/dist/schema/nodes/skylight.d.ts +10 -0
- package/dist/schema/nodes/skylight.d.ts.map +1 -1
- package/dist/schema/nodes/slab.d.ts +137 -0
- package/dist/schema/nodes/slab.d.ts.map +1 -1
- package/dist/schema/nodes/slab.js +3 -0
- package/dist/schema/nodes/solar-panel.d.ts +10 -0
- package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
- package/dist/schema/nodes/stair-segment.d.ts +5 -0
- package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
- package/dist/schema/nodes/stair-structure.d.ts +69 -0
- package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
- package/dist/schema/nodes/stair-structure.js +39 -0
- package/dist/schema/nodes/stair.d.ts +46 -0
- package/dist/schema/nodes/stair.d.ts.map +1 -1
- package/dist/schema/nodes/stair.js +3 -0
- package/dist/schema/nodes/turbine-vent.d.ts +5 -0
- package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
- package/dist/schema/nodes/wall.d.ts +135 -2
- package/dist/schema/nodes/wall.d.ts.map +1 -1
- package/dist/schema/nodes/wall.js +42 -6
- package/dist/schema/nodes/window.d.ts +66 -1
- package/dist/schema/nodes/window.d.ts.map +1 -1
- package/dist/schema/nodes/window.js +50 -5
- package/dist/schema/nodes/zone.d.ts +68 -0
- package/dist/schema/nodes/zone.d.ts.map +1 -1
- package/dist/schema/nodes/zone.js +32 -0
- package/dist/schema/scene-material.d.ts +5 -0
- package/dist/schema/scene-material.d.ts.map +1 -1
- package/dist/schema/types.d.ts +1079 -4
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/types.js +2 -0
- package/dist/schema/wall-type.d.ts +95 -0
- package/dist/schema/wall-type.d.ts.map +1 -0
- package/dist/schema/wall-type.js +32 -0
- package/dist/services/roof-bearing.d.ts.map +1 -1
- package/dist/services/roof-bearing.js +6 -3
- package/dist/services/roof-level.d.ts.map +1 -1
- package/dist/services/roof-level.js +4 -3
- package/dist/services/roof-move.d.ts.map +1 -1
- package/dist/services/roof-move.js +13 -7
- package/dist/services/storey.d.ts.map +1 -1
- package/dist/services/storey.js +13 -8
- package/dist/spatial/usage-field/beds.d.ts +51 -0
- package/dist/spatial/usage-field/beds.d.ts.map +1 -0
- package/dist/spatial/usage-field/beds.js +346 -0
- package/dist/spatial/usage-field/blocked.d.ts +28 -0
- package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
- package/dist/spatial/usage-field/blocked.js +185 -0
- package/dist/spatial/usage-field/boxes.d.ts +17 -0
- package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
- package/dist/spatial/usage-field/boxes.js +82 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
- package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
- package/dist/spatial/usage-field/catalogue.d.ts +6 -0
- package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
- package/dist/spatial/usage-field/catalogue.js +11 -0
- package/dist/spatial/usage-field/clash.d.ts +40 -0
- package/dist/spatial/usage-field/clash.d.ts.map +1 -0
- package/dist/spatial/usage-field/clash.js +187 -0
- package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
- package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/door-stairs.js +129 -0
- package/dist/spatial/usage-field/entry-way.d.ts +14 -0
- package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
- package/dist/spatial/usage-field/entry-way.js +219 -0
- package/dist/spatial/usage-field/fences.d.ts +18 -0
- package/dist/spatial/usage-field/fences.d.ts.map +1 -0
- package/dist/spatial/usage-field/fences.js +253 -0
- package/dist/spatial/usage-field/field.d.ts +44 -0
- package/dist/spatial/usage-field/field.d.ts.map +1 -0
- package/dist/spatial/usage-field/field.js +145 -0
- package/dist/spatial/usage-field/findings.d.ts +76 -0
- package/dist/spatial/usage-field/findings.d.ts.map +1 -0
- package/dist/spatial/usage-field/findings.js +252 -0
- package/dist/spatial/usage-field/fixtures.d.ts +18 -0
- package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
- package/dist/spatial/usage-field/fixtures.js +160 -0
- package/dist/spatial/usage-field/flag.d.ts +10 -0
- package/dist/spatial/usage-field/flag.d.ts.map +1 -0
- package/dist/spatial/usage-field/flag.js +12 -0
- package/dist/spatial/usage-field/floors.d.ts +13 -0
- package/dist/spatial/usage-field/floors.d.ts.map +1 -0
- package/dist/spatial/usage-field/floors.js +36 -0
- package/dist/spatial/usage-field/index.d.ts +7 -0
- package/dist/spatial/usage-field/index.d.ts.map +1 -0
- package/dist/spatial/usage-field/index.js +5 -0
- package/dist/spatial/usage-field/items.d.ts +38 -0
- package/dist/spatial/usage-field/items.d.ts.map +1 -0
- package/dist/spatial/usage-field/items.js +261 -0
- package/dist/spatial/usage-field/labels.d.ts +8 -0
- package/dist/spatial/usage-field/labels.d.ts.map +1 -0
- package/dist/spatial/usage-field/labels.js +14 -0
- package/dist/spatial/usage-field/level-field.d.ts +47 -0
- package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
- package/dist/spatial/usage-field/level-field.js +96 -0
- package/dist/spatial/usage-field/measure.d.ts +324 -0
- package/dist/spatial/usage-field/measure.d.ts.map +1 -0
- package/dist/spatial/usage-field/measure.js +458 -0
- package/dist/spatial/usage-field/obstacles.d.ts +63 -0
- package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
- package/dist/spatial/usage-field/obstacles.js +215 -0
- package/dist/spatial/usage-field/openings.d.ts +12 -0
- package/dist/spatial/usage-field/openings.d.ts.map +1 -0
- package/dist/spatial/usage-field/openings.js +162 -0
- package/dist/spatial/usage-field/path.d.ts +48 -0
- package/dist/spatial/usage-field/path.d.ts.map +1 -0
- package/dist/spatial/usage-field/path.js +354 -0
- package/dist/spatial/usage-field/pieces.d.ts +27 -0
- package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
- package/dist/spatial/usage-field/pieces.js +89 -0
- package/dist/spatial/usage-field/shapes.d.ts +18 -0
- package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
- package/dist/spatial/usage-field/shapes.js +92 -0
- package/dist/spatial/usage-field/stairs.d.ts +23 -0
- package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
- package/dist/spatial/usage-field/stairs.js +163 -0
- package/dist/spatial/usage-field/support.d.ts +24 -0
- package/dist/spatial/usage-field/support.d.ts.map +1 -0
- package/dist/spatial/usage-field/support.js +46 -0
- package/dist/spatial/usage-field/swings.d.ts +846 -0
- package/dist/spatial/usage-field/swings.d.ts.map +1 -0
- package/dist/spatial/usage-field/swings.js +427 -0
- package/dist/spatial/usage-field/types.d.ts +65 -0
- package/dist/spatial/usage-field/types.d.ts.map +1 -0
- package/dist/spatial/usage-field/types.js +1 -0
- package/dist/spatial/usage-field/walls.d.ts +1057 -0
- package/dist/spatial/usage-field/walls.d.ts.map +1 -0
- package/dist/spatial/usage-field/walls.js +166 -0
- package/dist/spatial/usage-field/way-in.d.ts +26 -0
- package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
- package/dist/spatial/usage-field/way-in.js +113 -0
- package/dist/store/actions/node-actions.d.ts +2124 -1322
- package/dist/store/actions/node-actions.d.ts.map +1 -1
- package/dist/store/actions/node-actions.js +42 -16
- package/dist/store/derived-node-guard.d.ts +10 -2
- package/dist/store/derived-node-guard.d.ts.map +1 -1
- package/dist/store/derived-node-guard.js +31 -11
- package/dist/store/document-settling.d.ts +9 -0
- package/dist/store/document-settling.d.ts.map +1 -0
- package/dist/store/document-settling.js +22 -0
- package/dist/store/history-control.d.ts +19 -10
- package/dist/store/history-control.d.ts.map +1 -1
- package/dist/store/history-control.js +176 -127
- package/dist/store/history-drafts.d.ts.map +1 -1
- package/dist/store/history-drafts.js +21 -17
- package/dist/store/live-previews.d.ts +9 -0
- package/dist/store/live-previews.d.ts.map +1 -0
- package/dist/store/live-previews.js +19 -0
- package/dist/store/scene-annotations.d.ts +6751 -5151
- package/dist/store/scene-annotations.d.ts.map +1 -1
- package/dist/store/scene-environment.d.ts +33 -0
- package/dist/store/scene-environment.d.ts.map +1 -0
- package/dist/store/scene-environment.js +54 -0
- package/dist/store/scene-hydration.d.ts.map +1 -1
- package/dist/store/scene-hydration.js +41 -30
- package/dist/store/use-interactive.d.ts +9 -3
- package/dist/store/use-interactive.d.ts.map +1 -1
- package/dist/store/use-interactive.js +43 -11
- package/dist/store/use-live-node-overrides.d.ts.map +1 -1
- package/dist/store/use-live-node-overrides.js +3 -0
- package/dist/store/use-scene.d.ts +25 -0
- package/dist/store/use-scene.d.ts.map +1 -1
- package/dist/store/use-scene.js +408 -336
- package/dist/systems/document-reconcile.d.ts +40 -0
- package/dist/systems/document-reconcile.d.ts.map +1 -0
- package/dist/systems/document-reconcile.js +159 -0
- package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
- package/dist/systems/elevator/elevator-opening-system.js +9 -24
- package/dist/systems/fence/guard-layout.d.ts +69 -0
- package/dist/systems/fence/guard-layout.d.ts.map +1 -0
- package/dist/systems/fence/guard-layout.js +194 -0
- package/dist/systems/owned-floor-openings.d.ts +13 -1
- package/dist/systems/owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/owned-floor-openings.js +58 -2
- package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
- package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
- package/dist/systems/reconcile-owned-floor-openings.js +4 -4
- package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation-system.js +8 -26
- package/dist/systems/roof/roof-elevation.d.ts +16 -1
- package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
- package/dist/systems/roof/roof-elevation.js +85 -4
- package/dist/systems/roof/roof-footprint.d.ts +42 -1
- package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
- package/dist/systems/roof/roof-footprint.js +160 -4
- package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
- package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
- package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
- package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.d.ts +7 -0
- package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
- package/dist/systems/stair/stair-clearance.js +31 -11
- package/dist/systems/stair/stair-construction.d.ts +8 -3
- package/dist/systems/stair/stair-construction.d.ts.map +1 -1
- package/dist/systems/stair/stair-construction.js +55 -4
- package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
- package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
- package/dist/systems/stair/stair-opening-system.js +18 -34
- package/dist/systems/stair/stair-presets.d.ts +36 -0
- package/dist/systems/stair/stair-presets.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise-query.js +3 -2
- package/dist/systems/stair/stair-rise.d.ts.map +1 -1
- package/dist/systems/stair/stair-rise.js +6 -0
- package/dist/systems/stair/stair-sizing.d.ts +42 -11
- package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
- package/dist/systems/stair/stair-sizing.js +10 -1
- package/dist/systems/stair/stair-structure.d.ts +277 -0
- package/dist/systems/stair/stair-structure.d.ts.map +1 -0
- package/dist/systems/stair/stair-structure.js +496 -0
- package/dist/systems/wall/wall-assembly.d.ts +84 -6
- package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
- package/dist/systems/wall/wall-assembly.js +204 -5
- package/dist/systems/wall/wall-finish.d.ts +38 -2
- package/dist/systems/wall/wall-finish.d.ts.map +1 -1
- package/dist/systems/wall/wall-finish.js +70 -2
- package/dist/systems/wall/wall-footprint.js +2 -2
- package/dist/systems/wall/wall-merge.d.ts.map +1 -1
- package/dist/systems/wall/wall-merge.js +28 -7
- package/dist/systems/wall/wall-mitering.d.ts +1 -0
- package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
- package/dist/systems/wall/wall-mitering.js +152 -52
- package/dist/systems/wall/wall-move.d.ts +23 -6
- package/dist/systems/wall/wall-move.d.ts.map +1 -1
- package/dist/systems/wall/wall-move.js +65 -0
- package/dist/systems/wall/wall-top.d.ts +2 -2
- package/dist/systems/wall/wall-top.d.ts.map +1 -1
- package/dist/systems/wall/wall-top.js +6 -1
- package/dist/systems/wall/wall-topology.d.ts +32 -1
- package/dist/systems/wall/wall-topology.d.ts.map +1 -1
- package/dist/systems/wall/wall-topology.js +118 -10
- package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
- package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
- package/dist/systems/wall/wall-trim-profiles.js +191 -0
- package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
- package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
- package/dist/utils/floor-piece-adoption.d.ts +5 -0
- package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
- package/dist/utils/floor-plate-migration.d.ts +1930 -1130
- package/dist/utils/floor-plate-migration.d.ts.map +1 -1
- package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
- package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
- package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
- package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
- package/dist/utils/structure-id.d.ts.map +1 -1
- package/dist/utils/structure-id.js +4 -0
- package/package.json +22 -5
- package/dist/lib/generic-foundation.d.ts +0 -40
- package/dist/lib/generic-foundation.d.ts.map +0 -1
- package/dist/lib/generic-foundation.js +0 -200
|
@@ -58,7 +58,7 @@ export const fitStairTool = {
|
|
|
58
58
|
export const createStairTool = {
|
|
59
59
|
name: 'create_stair',
|
|
60
60
|
title: 'Create stair',
|
|
61
|
-
description: "Create a staircase rising from a level, as the editor's stair tool builds one
|
|
61
|
+
description: "Create a straight, L or U staircase rising from a level, as the editor's stair tool builds one, and return its id, its footprint and where the top step arrives. An L is a flight, a landing as deep as the stair is wide and a flight turned 90°; a U is a flight, a landing across and a flight back beside the first. It rises to the level above and owns the floor opening it cuts in every floor it passes; when no level stands above, a blank one is made for it. toLevelId null makes a flight to no level (porch steps, a deck, a raised platform): it rises height, cuts nothing and makes no level. Refused with a code: a flight to or from a declared roof level, and a toLevelId that is not above the level it rises from.\n\nGEOMETRY (get this wrong and the stair pokes through a wall):\n- (x, z) is the middle of the bottom riser, where the flight starts. The first flight runs from there along the climb: at rotation 0 it covers x − width/2 .. x + width/2 and z .. z + its run.\n- rotation in degrees about Y: 0 climbs toward +Z, 90 → +X, 180 → −Z, 270 → −X. Point the climb into the room, away from the wall the bottom step sits against.\n- An L or U turns to the climber's left or right (turn). The result gives the whole footprint and the point the top step arrives at.\n- Keep 0.9 m clear at the foot and at the head of the flight, and the whole footprint inside one room on both levels (a hall is typical): read the room's outline first (get_zones).\n\nOPENINGS: by default the stair owns the opening over its flights and keeps it as the stair moves (openingOffset widens it). An opening of another size, centre or turn, through a slab or ceiling you name, or through one of the two only, is cut as an opening the stair owns, as given.",
|
|
62
62
|
input: {
|
|
63
63
|
x: z.number().describe('X of the middle of the bottom riser.'),
|
|
64
64
|
z: z.number().describe('Z of the middle of the bottom riser.'),
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const unitKind: z.ZodEnum<{
|
|
3
|
+
apartment: "apartment";
|
|
4
|
+
commercial: "commercial";
|
|
5
|
+
common: "common";
|
|
6
|
+
"hotel-room": "hotel-room";
|
|
7
|
+
}>;
|
|
8
|
+
export declare const createUnitTool: {
|
|
9
|
+
readonly name: 'create_unit';
|
|
10
|
+
readonly title: 'Create unit';
|
|
11
|
+
readonly description: "A unit is one dwelling, suite or tenancy of a building that holds several (an apartment, a condo, a hotel room, a shop): a named group of rooms (zones) under the building. Its members may span levels (a duplex). A zone belongs to at most one unit; a zone in no unit is common area (a corridor, a lobby, the stairs). A single-family house has no units. Create one in a building, named as a person would (Apartment 2B, Suite 301, Shop 1), with the rooms it holds; add or change them later with set_unit_members.";
|
|
12
|
+
readonly input: {
|
|
13
|
+
readonly buildingId: z.ZodOptional<z.ZodString>;
|
|
14
|
+
readonly name: z.ZodString;
|
|
15
|
+
readonly kind: z.ZodOptional<z.ZodEnum<{
|
|
16
|
+
apartment: "apartment";
|
|
17
|
+
commercial: "commercial";
|
|
18
|
+
common: "common";
|
|
19
|
+
"hotel-room": "hotel-room";
|
|
20
|
+
}>>;
|
|
21
|
+
readonly color: z.ZodOptional<z.ZodString>;
|
|
22
|
+
readonly memberZoneIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
23
|
+
readonly move: z.ZodOptional<z.ZodBoolean>;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export declare const setUnitMembersTool: {
|
|
27
|
+
readonly name: 'set_unit_members';
|
|
28
|
+
readonly title: 'Set unit members';
|
|
29
|
+
readonly description: "A unit is one dwelling, suite or tenancy of a building that holds several (an apartment, a condo, a hotel room, a shop): a named group of rooms (zones) under the building. Its members may span levels (a duplex). A zone belongs to at most one unit; a zone in no unit is common area (a corridor, a lobby, the stairs). A single-family house has no units. Replace the rooms a unit holds with this list: a zone left out leaves the unit and becomes common area, an empty list empties it. Every zone must be on a level of the unit's building.";
|
|
30
|
+
readonly input: {
|
|
31
|
+
readonly unitId: z.ZodString;
|
|
32
|
+
readonly memberZoneIds: z.ZodArray<z.ZodString>;
|
|
33
|
+
readonly move: z.ZodOptional<z.ZodBoolean>;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export declare const listUnitsTool: {
|
|
37
|
+
readonly name: 'list_units';
|
|
38
|
+
readonly title: 'List units';
|
|
39
|
+
readonly description: "A unit is one dwelling, suite or tenancy of a building that holds several (an apartment, a condo, a hotel room, a shop): a named group of rooms (zones) under the building. Its members may span levels (a duplex). A zone belongs to at most one unit; a zone in no unit is common area (a corridor, a lobby, the stairs). A single-family house has no units. List the units of a building, or of every building: id, name, kind, colour, member zone ids and a report (member count, the levels it spans, gross area, each member with its name, level and area).";
|
|
40
|
+
readonly input: {
|
|
41
|
+
readonly buildingId: z.ZodOptional<z.ZodString>;
|
|
42
|
+
};
|
|
43
|
+
readonly annotations: {
|
|
44
|
+
readonly readOnlyHint: true;
|
|
45
|
+
};
|
|
46
|
+
};
|
|
47
|
+
export declare const UNIT_TOOL_CONTRACTS: readonly [{
|
|
48
|
+
readonly name: 'create_unit';
|
|
49
|
+
readonly title: 'Create unit';
|
|
50
|
+
readonly description: "A unit is one dwelling, suite or tenancy of a building that holds several (an apartment, a condo, a hotel room, a shop): a named group of rooms (zones) under the building. Its members may span levels (a duplex). A zone belongs to at most one unit; a zone in no unit is common area (a corridor, a lobby, the stairs). A single-family house has no units. Create one in a building, named as a person would (Apartment 2B, Suite 301, Shop 1), with the rooms it holds; add or change them later with set_unit_members.";
|
|
51
|
+
readonly input: {
|
|
52
|
+
readonly buildingId: z.ZodOptional<z.ZodString>;
|
|
53
|
+
readonly name: z.ZodString;
|
|
54
|
+
readonly kind: z.ZodOptional<z.ZodEnum<{
|
|
55
|
+
apartment: "apartment";
|
|
56
|
+
commercial: "commercial";
|
|
57
|
+
common: "common";
|
|
58
|
+
"hotel-room": "hotel-room";
|
|
59
|
+
}>>;
|
|
60
|
+
readonly color: z.ZodOptional<z.ZodString>;
|
|
61
|
+
readonly memberZoneIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
62
|
+
readonly move: z.ZodOptional<z.ZodBoolean>;
|
|
63
|
+
};
|
|
64
|
+
}, {
|
|
65
|
+
readonly name: 'set_unit_members';
|
|
66
|
+
readonly title: 'Set unit members';
|
|
67
|
+
readonly description: "A unit is one dwelling, suite or tenancy of a building that holds several (an apartment, a condo, a hotel room, a shop): a named group of rooms (zones) under the building. Its members may span levels (a duplex). A zone belongs to at most one unit; a zone in no unit is common area (a corridor, a lobby, the stairs). A single-family house has no units. Replace the rooms a unit holds with this list: a zone left out leaves the unit and becomes common area, an empty list empties it. Every zone must be on a level of the unit's building.";
|
|
68
|
+
readonly input: {
|
|
69
|
+
readonly unitId: z.ZodString;
|
|
70
|
+
readonly memberZoneIds: z.ZodArray<z.ZodString>;
|
|
71
|
+
readonly move: z.ZodOptional<z.ZodBoolean>;
|
|
72
|
+
};
|
|
73
|
+
}, {
|
|
74
|
+
readonly name: 'list_units';
|
|
75
|
+
readonly title: 'List units';
|
|
76
|
+
readonly description: "A unit is one dwelling, suite or tenancy of a building that holds several (an apartment, a condo, a hotel room, a shop): a named group of rooms (zones) under the building. Its members may span levels (a duplex). A zone belongs to at most one unit; a zone in no unit is common area (a corridor, a lobby, the stairs). A single-family house has no units. List the units of a building, or of every building: id, name, kind, colour, member zone ids and a report (member count, the levels it spans, gross area, each member with its name, level and area).";
|
|
77
|
+
readonly input: {
|
|
78
|
+
readonly buildingId: z.ZodOptional<z.ZodString>;
|
|
79
|
+
};
|
|
80
|
+
readonly annotations: {
|
|
81
|
+
readonly readOnlyHint: true;
|
|
82
|
+
};
|
|
83
|
+
}];
|
|
84
|
+
//# sourceMappingURL=units.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"units.d.ts","sourceRoot":"","sources":["../../src/agent-tools/units.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAMvB,eAAO,MAAM,QAAQ;;;;;EAIlB,CAAA;AAqBH,eAAO,MAAM,cAAc;mBACnB,aAAa;oBACZ,aAAa;;;;;;;;;;;;;;;CAiBgB,CAAA;AAEtC,eAAO,MAAM,kBAAkB;mBACvB,kBAAkB;oBACjB,kBAAkB;;;;;;;CAOW,CAAA;AAEtC,eAAO,MAAM,aAAa;mBAClB,YAAY;oBACX,YAAY;;;;;;iBAGJ,YAAY;;CACS,CAAA;AAEtC,eAAO,MAAM,mBAAmB;mBAvCxB,aAAa;oBACZ,aAAa;;;;;;;;;;;;;;;;mBAoBd,kBAAkB;oBACjB,kBAAkB;;;;;;;;mBAUnB,YAAY;oBACX,YAAY;;;;;;iBAGJ,YAAY;;EAGkE,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { NodeId } from './node-id.js';
|
|
3
|
+
// The schema's UNIT_KINDS, spelled here: a contract imports zod and dependency-free files only
|
|
4
|
+
// (contracts-purity.test.ts), and the operation parses the node with the schema itself.
|
|
5
|
+
export const unitKind = z
|
|
6
|
+
.enum(['apartment', 'hotel-room', 'commercial', 'common'])
|
|
7
|
+
.describe('What the unit is: apartment (a dwelling: a flat, a condo, one side of a duplex), hotel-room (a suite or guest room), commercial (a shop, an office, a lot let on its own), common (shared space grouped on purpose). Default apartment.');
|
|
8
|
+
const WHAT_A_UNIT_IS = 'A unit is one dwelling, suite or tenancy of a building that holds several (an apartment, a condo, a hotel room, a shop): a named group of rooms (zones) under the building. Its members may span levels (a duplex). A zone belongs to at most one unit; a zone in no unit is common area (a corridor, a lobby, the stairs). A single-family house has no units.';
|
|
9
|
+
const buildingId = NodeId.optional().describe("The building. Default: the building of the floor the person is viewing, else the scene's only building.");
|
|
10
|
+
const memberZoneIds = (what) => z
|
|
11
|
+
.array(NodeId)
|
|
12
|
+
.describe(`${what}, by zone ids from get_zones or create_room, on any level of the building. A zone already in another unit is refused (zone_in_other_unit, naming that unit) unless move is true.`);
|
|
13
|
+
const move = z
|
|
14
|
+
.boolean()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe('true: a zone already in another unit leaves that unit for this one.');
|
|
17
|
+
export const createUnitTool = {
|
|
18
|
+
name: 'create_unit',
|
|
19
|
+
title: 'Create unit',
|
|
20
|
+
description: `${WHAT_A_UNIT_IS} Create one in a building, named as a person would (Apartment 2B, Suite 301, Shop 1), with the rooms it holds; add or change them later with set_unit_members.`,
|
|
21
|
+
input: {
|
|
22
|
+
buildingId,
|
|
23
|
+
name: z
|
|
24
|
+
.string()
|
|
25
|
+
.min(1)
|
|
26
|
+
.max(120)
|
|
27
|
+
.describe('The unit as a person names it: Apartment 2B, Suite 301, Shop 1.'),
|
|
28
|
+
kind: unitKind.optional(),
|
|
29
|
+
color: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe('#rrggbb tint of the unit in the plan (default Pascal’s).'),
|
|
33
|
+
memberZoneIds: memberZoneIds('The rooms the unit holds').optional(),
|
|
34
|
+
move,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
export const setUnitMembersTool = {
|
|
38
|
+
name: 'set_unit_members',
|
|
39
|
+
title: 'Set unit members',
|
|
40
|
+
description: `${WHAT_A_UNIT_IS} Replace the rooms a unit holds with this list: a zone left out leaves the unit and becomes common area, an empty list empties it. Every zone must be on a level of the unit's building.`,
|
|
41
|
+
input: {
|
|
42
|
+
unitId: NodeId.describe('The unit, by an id from create_unit or list_units.'),
|
|
43
|
+
memberZoneIds: memberZoneIds('The rooms the unit holds from now on'),
|
|
44
|
+
move,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
export const listUnitsTool = {
|
|
48
|
+
name: 'list_units',
|
|
49
|
+
title: 'List units',
|
|
50
|
+
description: `${WHAT_A_UNIT_IS} List the units of a building, or of every building: id, name, kind, colour, member zone ids and a report (member count, the levels it spans, gross area, each member with its name, level and area).`,
|
|
51
|
+
input: { buildingId },
|
|
52
|
+
annotations: { readOnlyHint: true },
|
|
53
|
+
};
|
|
54
|
+
export const UNIT_TOOL_CONTRACTS = [createUnitTool, setUnitMembersTool, listUnitsTool];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* How `verify_scene` shows the usage findings to a model: a room's missing turning circle and
|
|
3
|
+
* pocket as one entry for the room, a narrow place as one entry for the rooms it leads to, every
|
|
4
|
+
* other finding whole but without the structure its message and node ids already carry, and the
|
|
5
|
+
* words every entry would repeat once. The report keeps each finding as measured (`usageIssues`);
|
|
6
|
+
* `type` and `room` give them back.
|
|
7
|
+
*/
|
|
8
|
+
/** The findings a room's one entry holds. */
|
|
9
|
+
export declare const ROOM_FOLDED_TYPES: readonly ['usage_turning_narrow', 'usage_pocket'];
|
|
10
|
+
/** The type of a narrow passage's finding: one for each place, naming the rooms it leads to. */
|
|
11
|
+
export declare const PASSAGE_TYPE = "usage_passage_narrow";
|
|
12
|
+
/** The type of a room's one entry; asking for it returns the findings it holds. */
|
|
13
|
+
export declare const ROOM_ENTRY_TYPE = "usage_room";
|
|
14
|
+
export declare const isUsageType: (type: unknown) => type is string;
|
|
15
|
+
export declare const isRoomFolded: (type: unknown) => boolean;
|
|
16
|
+
type Found = Record<string, unknown>;
|
|
17
|
+
/** The ids of the rooms a narrow passage leads to. */
|
|
18
|
+
export declare const servedRoomIds: (passages: Found[]) => Set<string>;
|
|
19
|
+
/** The entrances the passages were measured from: said once in the note when there is one, by each entry when there are several. */
|
|
20
|
+
export declare const passageEntrances: (passages: Found[]) => string[];
|
|
21
|
+
/**
|
|
22
|
+
* One entry per room for its turning circle and pocket findings, in the order the rooms first
|
|
23
|
+
* appear. A pocket that is the room's whole free floor, in a room a narrow passage leads to, says
|
|
24
|
+
* what the passage says (a path under a 0.60 m unit leads nowhere a unit can leave), so the entry
|
|
25
|
+
* does not say it twice and a room with nothing else has none; `count` is every finding it holds.
|
|
26
|
+
*/
|
|
27
|
+
export declare function foldUsageRooms(members: Found[], served: ReadonlySet<string>): Found[];
|
|
28
|
+
/**
|
|
29
|
+
* A usage finding without what its message and node ids already say (obstacles, thresholds, code
|
|
30
|
+
* table row). A narrow place keeps its sentence and the things that bound it: the figure and the
|
|
31
|
+
* rooms are in the sentence, and a room's own findings are asked for by its name.
|
|
32
|
+
*/
|
|
33
|
+
export declare function slimUsageFinding(found: Found, entrances?: readonly string[]): Found;
|
|
34
|
+
/** Findings placed in, serving or naming a room or one of its contents, returned whole. */
|
|
35
|
+
export declare function findingsOfRoom(issues: unknown[], room: string, scope: unknown): Found[];
|
|
36
|
+
/** The rooms that have usage findings, for the answer to a room nothing was found for. */
|
|
37
|
+
export declare function roomsWithUsageFindings(issues: unknown[]): string[];
|
|
38
|
+
/**
|
|
39
|
+
* The words every usage entry would repeat, said once: what a finding is, the thresholds it reads
|
|
40
|
+
* against (the numbers the checks apply; a test holds them to those), and what the entries are.
|
|
41
|
+
*/
|
|
42
|
+
export declare function usageNote(measuredFrom?: readonly string[]): string;
|
|
43
|
+
export {};
|
|
44
|
+
//# sourceMappingURL=verify-scene-usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify-scene-usage.d.ts","sourceRoot":"","sources":["../../src/agent-tools/verify-scene-usage.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AAEH,6CAA6C;AAC7C,eAAO,MAAM,iBAAiB,YAAI,sBAAsB,EAAE,cAAc,CAAU,CAAA;AAElF,gGAAgG;AAChG,eAAO,MAAM,YAAY,yBAAyB,CAAA;AAElD,mFAAmF;AACnF,eAAO,MAAM,eAAe,eAAe,CAAA;AAE3C,eAAO,MAAM,WAAW,SAAU,OAAO,KAAG,IAAI,IAAI,MACG,CAAA;AAEvD,eAAO,MAAM,YAAY,SAAU,OAAO,KAAG,OACa,CAAA;AAE1D,KAAK,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAgCpC,sDAAsD;AACtD,eAAO,MAAM,aAAa,aAAc,KAAK,EAAE,gBACmC,CAAA;AAElF,oIAAoI;AACpI,eAAO,MAAM,gBAAgB,aAAc,KAAK,EAAE,KAAG,MAAM,EAI1D,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,GAAG,KAAK,EAAE,CA2BrF;AAKD;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,GAAE,SAAS,MAAM,EAAO,GAAG,KAAK,CAkBvF;AAOD,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,CAyBvF;AAED,0FAA0F;AAC1F,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,EAAE,CAQlE;AAID;;;GAGG;AACH,wBAAgB,SAAS,CAAC,YAAY,GAAE,SAAS,MAAM,EAAO,GAAG,MAAM,CAYtE"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { USAGE_INDICATORS } from '../building/code-profile.js';
|
|
2
|
+
/**
|
|
3
|
+
* How `verify_scene` shows the usage findings to a model: a room's missing turning circle and
|
|
4
|
+
* pocket as one entry for the room, a narrow place as one entry for the rooms it leads to, every
|
|
5
|
+
* other finding whole but without the structure its message and node ids already carry, and the
|
|
6
|
+
* words every entry would repeat once. The report keeps each finding as measured (`usageIssues`);
|
|
7
|
+
* `type` and `room` give them back.
|
|
8
|
+
*/
|
|
9
|
+
/** The findings a room's one entry holds. */
|
|
10
|
+
export const ROOM_FOLDED_TYPES = ['usage_turning_narrow', 'usage_pocket'];
|
|
11
|
+
/** The type of a narrow passage's finding: one for each place, naming the rooms it leads to. */
|
|
12
|
+
export const PASSAGE_TYPE = 'usage_passage_narrow';
|
|
13
|
+
/** The type of a room's one entry; asking for it returns the findings it holds. */
|
|
14
|
+
export const ROOM_ENTRY_TYPE = 'usage_room';
|
|
15
|
+
export const isUsageType = (type) => typeof type === 'string' && type.startsWith('usage_');
|
|
16
|
+
export const isRoomFolded = (type) => ROOM_FOLDED_TYPES.includes(type);
|
|
17
|
+
const isRecord = (value) => !!value && typeof value === 'object' && !Array.isArray(value);
|
|
18
|
+
const placeOf = (found) => (isRecord(found.place) ? found.place : {});
|
|
19
|
+
const roomIdOf = (found) => String(placeOf(found).roomId ?? '');
|
|
20
|
+
const stringsOf = (value) => Array.isArray(value) ? value.filter((item) => typeof item === 'string') : [];
|
|
21
|
+
const round2 = (value) => Math.round(value * 100) / 100;
|
|
22
|
+
/** A finding's place on the plan to the centimetre, or nothing. */
|
|
23
|
+
function atOf(found) {
|
|
24
|
+
const at = placeOf(found).at;
|
|
25
|
+
return Array.isArray(at) && typeof at[0] === 'number' && typeof at[1] === 'number'
|
|
26
|
+
? [round2(at[0]), round2(at[1])]
|
|
27
|
+
: undefined;
|
|
28
|
+
}
|
|
29
|
+
/** The rooms a narrow passage leads to: its `serves`. */
|
|
30
|
+
function servedBy(found) {
|
|
31
|
+
return Array.isArray(found.serves)
|
|
32
|
+
? found.serves.filter(isRecord).map((room) => ({
|
|
33
|
+
room: String(room.room ?? ''),
|
|
34
|
+
roomId: String(room.roomId ?? ''),
|
|
35
|
+
}))
|
|
36
|
+
: [];
|
|
37
|
+
}
|
|
38
|
+
/** The ids of the rooms a narrow passage leads to. */
|
|
39
|
+
export const servedRoomIds = (passages) => new Set(passages.flatMap((found) => servedBy(found).map((room) => room.roomId)));
|
|
40
|
+
/** The entrances the passages were measured from: said once in the note when there is one, by each entry when there are several. */
|
|
41
|
+
export const passageEntrances = (passages) => [
|
|
42
|
+
...new Set(passages.flatMap((found) => (typeof found.fromDoor === 'string' ? [found.fromDoor] : []))),
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* One entry per room for its turning circle and pocket findings, in the order the rooms first
|
|
46
|
+
* appear. A pocket that is the room's whole free floor, in a room a narrow passage leads to, says
|
|
47
|
+
* what the passage says (a path under a 0.60 m unit leads nowhere a unit can leave), so the entry
|
|
48
|
+
* does not say it twice and a room with nothing else has none; `count` is every finding it holds.
|
|
49
|
+
*/
|
|
50
|
+
export function foldUsageRooms(members, served) {
|
|
51
|
+
const rooms = new Map();
|
|
52
|
+
for (const found of members) {
|
|
53
|
+
const key = roomIdOf(found);
|
|
54
|
+
rooms.set(key, [...(rooms.get(key) ?? []), found]);
|
|
55
|
+
}
|
|
56
|
+
return [...rooms.entries()].flatMap(([roomId, held]) => {
|
|
57
|
+
const clauses = held
|
|
58
|
+
.filter((found) => !(found.type === 'usage_pocket' && found.wholeRoom === true && served.has(roomId)))
|
|
59
|
+
.map((found) => String(found.brief ?? found.message));
|
|
60
|
+
if (!clauses.length)
|
|
61
|
+
return [];
|
|
62
|
+
const warning = held.some((found) => found.severity !== 'info');
|
|
63
|
+
const first = held[0];
|
|
64
|
+
return [
|
|
65
|
+
{
|
|
66
|
+
type: ROOM_ENTRY_TYPE,
|
|
67
|
+
severity: warning ? 'warning' : 'info',
|
|
68
|
+
message: `${String(placeOf(first).room ?? '')}: ${clauses.join('; ')}.`,
|
|
69
|
+
nodeIds: [...new Set(held.flatMap((found) => stringsOf(found.nodeIds)))],
|
|
70
|
+
count: held.length,
|
|
71
|
+
...(held.some((found) => found.approximate === true) ? { approximate: true } : {}),
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** What an entry for one finding keeps: its sentence, its nodes, its measured values and where. */
|
|
77
|
+
const KEPT = ['type', 'severity', 'message', 'nodeIds', 'valueM', 'valueM2', 'valueDeg'];
|
|
78
|
+
/**
|
|
79
|
+
* A usage finding without what its message and node ids already say (obstacles, thresholds, code
|
|
80
|
+
* table row). A narrow place keeps its sentence and the things that bound it: the figure and the
|
|
81
|
+
* rooms are in the sentence, and a room's own findings are asked for by its name.
|
|
82
|
+
*/
|
|
83
|
+
export function slimUsageFinding(found, entrances = []) {
|
|
84
|
+
if (found.type === PASSAGE_TYPE) {
|
|
85
|
+
const rooms = new Set(servedBy(found).map((room) => room.roomId));
|
|
86
|
+
return {
|
|
87
|
+
type: found.type,
|
|
88
|
+
severity: found.severity,
|
|
89
|
+
message: entrances.length < 2 && typeof found.brief === 'string' ? found.brief : found.message,
|
|
90
|
+
nodeIds: stringsOf(found.nodeIds).filter((id) => !rooms.has(id)),
|
|
91
|
+
...(found.approximate === true ? { approximate: true } : {}),
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const slim = {};
|
|
95
|
+
for (const key of KEPT)
|
|
96
|
+
if (found[key] !== undefined)
|
|
97
|
+
slim[key] = found[key];
|
|
98
|
+
if (found.approximate === true)
|
|
99
|
+
slim.approximate = true;
|
|
100
|
+
const at = atOf(found);
|
|
101
|
+
if (at)
|
|
102
|
+
slim.at = at;
|
|
103
|
+
return slim;
|
|
104
|
+
}
|
|
105
|
+
/** The rooms a usage finding is about: its own, and the rooms a narrow passage leads to. */
|
|
106
|
+
function roomsOf(found) {
|
|
107
|
+
return [...servedBy(found), { room: String(placeOf(found).room ?? ''), roomId: roomIdOf(found) }];
|
|
108
|
+
}
|
|
109
|
+
/** Findings placed in, serving or naming a room or one of its contents, returned whole. */
|
|
110
|
+
export function findingsOfRoom(issues, room, scope) {
|
|
111
|
+
const wanted = room.trim().toLowerCase();
|
|
112
|
+
const rooms = Array.isArray(scope)
|
|
113
|
+
? scope.filter((entry) => isRecord(entry) &&
|
|
114
|
+
[entry.roomId, entry.room].some((name) => typeof name === 'string' && name.trim().toLowerCase() === wanted))
|
|
115
|
+
: [];
|
|
116
|
+
const nodeIds = new Set(rooms.flatMap((entry) => stringsOf(entry.nodeIds)));
|
|
117
|
+
return issues.filter((issue) => isRecord(issue) &&
|
|
118
|
+
(roomsOf(issue).some((found) => found.roomId.toLowerCase() === wanted || found.room.trim().toLowerCase() === wanted) ||
|
|
119
|
+
Object.entries(issue).some(([key, value]) => key.endsWith('Ids')
|
|
120
|
+
? stringsOf(value).some((id) => nodeIds.has(id))
|
|
121
|
+
: key.endsWith('Id') && typeof value === 'string' && nodeIds.has(value))));
|
|
122
|
+
}
|
|
123
|
+
/** The rooms that have usage findings, for the answer to a room nothing was found for. */
|
|
124
|
+
export function roomsWithUsageFindings(issues) {
|
|
125
|
+
return [
|
|
126
|
+
...new Set(issues.flatMap((issue) => isRecord(issue) && isUsageType(issue.type) ? roomsOf(issue).map((room) => room.room) : [])),
|
|
127
|
+
].filter(Boolean);
|
|
128
|
+
}
|
|
129
|
+
const metres = (value) => value.toFixed(2);
|
|
130
|
+
/**
|
|
131
|
+
* The words every usage entry would repeat, said once: what a finding is, the thresholds it reads
|
|
132
|
+
* against (the numbers the checks apply; a test holds them to those), and what the entries are.
|
|
133
|
+
*/
|
|
134
|
+
export function usageNote(measuredFrom = []) {
|
|
135
|
+
const { passage, doorClear, turning } = USAGE_INDICATORS;
|
|
136
|
+
return [
|
|
137
|
+
'Usage findings are indicators read from the drawn scene, not code checks; a figure from a code names it.',
|
|
138
|
+
`A passage is narrow under ${metres(passage.value)} m (${metres(doorClear.value)} m through a doorway), a turning circle under ${metres(turning.value)} m; a pocket is floor a 0.60 m unit fits on and cannot leave.`,
|
|
139
|
+
'A piece 2 cm into another is a contact, 8 cm a warning; a window is blocked by a piece within 15 cm of the glass and over 30 cm above its sill; a door stopping before 80° is a finding; a bed wants 0.60 m at a side and at the foot. Use defects warn even on approximate shapes.',
|
|
140
|
+
...(measuredFrom.length
|
|
141
|
+
? [`Ground-floor passages are measured from “${measuredFrom[0]}”.`]
|
|
142
|
+
: []),
|
|
143
|
+
'A doorway is read between its jambs, and the limit applies to that clear width, not the door as drawn.',
|
|
144
|
+
'A narrow passage is one entry for the place, naming the rooms it leads to; a slot or cupboard on no way to a room has none, a pocket speaks for dead floor. One usage_room entry per room holds its turning circle and pocket.',
|
|
145
|
+
].join(' ');
|
|
146
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { z } from 'zod';
|
|
2
2
|
/** Adds inputs and a sentence of description to verify_scene, for a check registered with it. */
|
|
3
3
|
export declare function extendVerifyScene(extension: {
|
|
4
4
|
input: Record<string, z.ZodType>;
|
|
@@ -10,4 +10,15 @@ export declare const verifySceneTool: {
|
|
|
10
10
|
readonly description: string;
|
|
11
11
|
readonly input: Record<string, z.ZodType>;
|
|
12
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* What the model reads for `verify_scene`: the same facts, grouped. Every warning and error is
|
|
15
|
+
* whole — its message, its node ids and its measurements — a repeated informational finding is one
|
|
16
|
+
* entry per type with a few examples and the call that returns them all, The usage findings are the exception that
|
|
17
|
+
* keeps every finding: a narrow passage is one entry for its place, a room's turning circle and
|
|
18
|
+
* pocket are one entry for the room, the others arrive one by one without the structure their sentence repeats (`verify-scene-usage.ts`).
|
|
19
|
+
* A `type` or `room` question and a refusal answer as they came; no other argument widens the
|
|
20
|
+
* answer. The editor, the structured MCP result and the benchmarks keep the report `verify_scene`
|
|
21
|
+
* returned.
|
|
22
|
+
*/
|
|
23
|
+
export declare function verifySceneModelResult(output: unknown, input: unknown): unknown;
|
|
13
24
|
//# sourceMappingURL=verify-scene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-scene.d.ts","sourceRoot":"","sources":["../../src/agent-tools/verify-scene.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"verify-scene.d.ts","sourceRoot":"","sources":["../../src/agent-tools/verify-scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAsBvB,iGAAiG;AACjG,wBAAgB,iBAAiB,CAAC,SAAS,EAAE;IAC3C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;IAChC,WAAW,EAAE,MAAM,CAAA;CACpB,QAEA;AAKD,eAAO,MAAM,eAAe;IAC1B,IAAI;IACJ,KAAK;aACD,WAAW;aAQX,KAAK,EAAI,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC;CAqBvC,CAAA;AAsCD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAY/E"}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { findingsOfRoom, foldUsageRooms, isRoomFolded, isUsageType, PASSAGE_TYPE, passageEntrances, ROOM_ENTRY_TYPE, roomsWithUsageFindings, servedRoomIds, slimUsageFinding, usageNote, } from './verify-scene-usage.js';
|
|
1
3
|
/**
|
|
2
4
|
* `verify_scene`'s contract. Other modules extend it with an input and a sentence for the check
|
|
3
5
|
* they register (the photo's: `photo`), so it stays one tool agents know, with one contract on
|
|
@@ -8,14 +10,192 @@ const extensions = [];
|
|
|
8
10
|
export function extendVerifyScene(extension) {
|
|
9
11
|
extensions.push(extension);
|
|
10
12
|
}
|
|
11
|
-
const DESCRIPTION = 'Optional whole-scene evidence: per-level content, roles (storey, roof-only, support) and the spaces its walls enclose, then every problem found, each with a type: empty levels, walls with no room or door, a space the walls enclose with no room over it (space_no_room) or with several and no wall between them (space_many_rooms), a room the walls do not close (room_not_enclosed) or with no name (room_unnamed), rooms with no floor or ceiling, storeys with no stair, roof levels misused, walls intersecting a covering slab or ending coplanar with its walking surface (wall_covering_slab_contact, with wallId and slabId), openings off their wall, stairs off their slab or blocked, furniture blocking a door or overlapping, a house past its lot line or in its required yards, every node field its schema rejects (schema_invalid, with its nodeId and path; valid is then false, and the level holding the node lists it as unread and is measured once it is fixed), a node kind no schema here knows, once per kind (schema_unknown_kind, info: a plugin kind), a hidden site (site_hidden). Static authored ceiling objects report transformed bounds extending above their ceiling attachment and bounds overlapping solid covering slab bands, with node IDs and measured metres; stored and derived slab holes are subtracted. Wall-mounted objects report a front oriented toward their host; static authored wall bounds report wall-body overlap and extension through the opposite face. With settled editor meshes, catalog wall bounds and large competing coplanar faces against the host or another item on the same wall are also measured within 1 mm. Hidden back-to-wall contact is not competing face evidence. These are observations, not instructions to change the scene or proof of exact mesh intersection. Bounds are measured in the owning building frame, including stacked level elevations. Unknown catalog raw bounds without meshes, animated models, unsupported attachment frames, unresolved scripted wall cuts, roof collisions, recessed slab shells and foundation volumes are not assessed.';
|
|
13
|
+
const DESCRIPTION = 'Optional whole-scene evidence: per-level content, roles (storey, roof-only, support) and the spaces its walls enclose, then every problem found, each with a type: empty levels, walls with no room or door, a space the walls enclose with no room over it (space_no_room) or with several and no wall between them (space_many_rooms), a room the walls do not close (room_not_enclosed) or with no name (room_unnamed), two rooms on the same clear floor (zones_overlap) and floor inside a covered space that no zone or stair claims (floor_unclaimed), both warnings with their area, width and place and quiet under 0.1 m² (overlap), 0.3 m² (unclaimed) or 15 cm wide, wall bodies not counting as floor, an end that stops 3-25 cm short of another wall (wall_end_short, warning: the daylight in cm, both walls named; an end that touches a wall is a joint) and a wall 0.5-6 degrees off the line of the walls it carries on from or sits between, when that moves its far end 2 cm or more off the line (wall_nearly_aligned, warning: the angle, the offset, the neighbours; a larger turn is an angle drawn on purpose and is not named), rooms with no floor or ceiling, storeys with no stair, roof levels misused, walls intersecting a covering slab or ending coplanar with its walking surface (wall_covering_slab_contact, with wallId and slabId), openings off their wall, stairs off their slab or blocked, furniture blocking a door or overlapping, a house past its lot line or in its required yards, every node field its schema rejects (schema_invalid, with its nodeId and path; valid is then false, and the level holding the node lists it as unread and is measured once it is fixed), a node kind no schema here knows, once per kind (schema_unknown_kind, info: a plugin kind), a hidden site (site_hidden). What the surfaces of a room say, each one an observation to keep when it is intended: a wet room whose walls are not tiled where its fixtures stand (room_wet_untiled), skirting in no room or on part of the wall faces of a room (rooms_no_skirting, rooms_skirting_partial), and floors and wall faces left at the default finish (rooms_floors_default, wall_faces_default). Static authored ceiling objects report transformed bounds extending above their ceiling attachment and bounds overlapping solid covering slab bands, with node IDs and measured metres; stored and derived slab holes are subtracted. Wall-mounted objects report a front oriented toward their host; static authored wall bounds report wall-body overlap and extension through the opposite face. With settled editor meshes, catalog wall bounds and large competing coplanar faces against the host or another item on the same wall are also measured within 1 mm. Hidden back-to-wall contact is not competing face evidence. These are observations, not instructions to change the scene or proof of exact mesh intersection. Bounds are measured in the owning building frame, including stacked level elevations. Unknown catalog raw bounds without meshes, animated models, unsupported attachment frames, unresolved scripted wall cuts, roof collisions, recessed slab shells and foundation volumes are not assessed.';
|
|
12
14
|
export const verifySceneTool = {
|
|
13
15
|
name: 'verify_scene',
|
|
14
16
|
title: 'Verify scene',
|
|
15
17
|
get description() {
|
|
16
|
-
return [
|
|
18
|
+
return [
|
|
19
|
+
DESCRIPTION,
|
|
20
|
+
'Every warning and every error arrives whole, its own measurements with it; a repeated informational finding (severity info) arrives once, with its count, its elements and a few examples.',
|
|
21
|
+
"Usage findings arrive trimmed, a narrow passage as one entry for the place with the rooms it leads to, each room's turning circle and pocket as one usage_room entry; `room` (a room's id or name) returns its whole findings plus every finding naming its items, doors or windows, even when placed in a neighbouring room; `type` returns the whole findings of that kind.",
|
|
22
|
+
...extensions.map((extension) => extension.description),
|
|
23
|
+
].join(' ');
|
|
17
24
|
},
|
|
18
25
|
get input() {
|
|
19
|
-
return Object.assign({
|
|
26
|
+
return Object.assign({
|
|
27
|
+
type: z
|
|
28
|
+
.string()
|
|
29
|
+
.min(1)
|
|
30
|
+
.optional()
|
|
31
|
+
.describe('One finding type (for example "usage_passage_narrow"): the answer then lists every original finding of that type, whole, and none of the other blocks of the report.'),
|
|
32
|
+
room: z
|
|
33
|
+
.string()
|
|
34
|
+
.min(1)
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("A room's id or name: the answer lists its findings whole, including passages serving it and every finding naming its items, doors or windows."),
|
|
37
|
+
}, ...extensions.map((extension) => extension.input));
|
|
20
38
|
},
|
|
21
39
|
};
|
|
40
|
+
const groupedReport = z.object({
|
|
41
|
+
issues: z.array(z.unknown()),
|
|
42
|
+
issueGroups: z.array(z.looseObject({
|
|
43
|
+
type: z.string(),
|
|
44
|
+
message: z.string(),
|
|
45
|
+
count: z.number().int().positive(),
|
|
46
|
+
issueIndexes: z.array(z.number().int().nonnegative()).min(1),
|
|
47
|
+
// Read for the presentation alone: a group's other fields (its moves) ride along untouched.
|
|
48
|
+
severity: z.enum(['info', 'warning']).optional(),
|
|
49
|
+
nodes: z.unknown().optional(),
|
|
50
|
+
})),
|
|
51
|
+
});
|
|
52
|
+
/** Complete examples of one repeated informational finding that ride with its group. */
|
|
53
|
+
const GROUP_EXAMPLES = 3;
|
|
54
|
+
function isRecord(value) {
|
|
55
|
+
return !!value && typeof value === 'object' && !Array.isArray(value);
|
|
56
|
+
}
|
|
57
|
+
/** `verify_scene`'s arguments, read for the presentation; the operation itself receives them all. */
|
|
58
|
+
function requestedType(input) {
|
|
59
|
+
const type = isRecord(input) ? input.type : null;
|
|
60
|
+
return typeof type === 'string' && type.length > 0 ? type : null;
|
|
61
|
+
}
|
|
62
|
+
function requestedRoom(input) {
|
|
63
|
+
const room = isRecord(input) ? input.room : null;
|
|
64
|
+
return typeof room === 'string' && room.trim().length > 0 ? room : null;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* What the model reads for `verify_scene`: the same facts, grouped. Every warning and error is
|
|
68
|
+
* whole — its message, its node ids and its measurements — a repeated informational finding is one
|
|
69
|
+
* entry per type with a few examples and the call that returns them all, The usage findings are the exception that
|
|
70
|
+
* keeps every finding: a narrow passage is one entry for its place, a room's turning circle and
|
|
71
|
+
* pocket are one entry for the room, the others arrive one by one without the structure their sentence repeats (`verify-scene-usage.ts`).
|
|
72
|
+
* A `type` or `room` question and a refusal answer as they came; no other argument widens the
|
|
73
|
+
* answer. The editor, the structured MCP result and the benchmarks keep the report `verify_scene`
|
|
74
|
+
* returned.
|
|
75
|
+
*/
|
|
76
|
+
export function verifySceneModelResult(output, input) {
|
|
77
|
+
const parsed = groupedReport.safeParse(output);
|
|
78
|
+
if (!parsed.success)
|
|
79
|
+
return output;
|
|
80
|
+
const { issues, issueGroups } = parsed.data;
|
|
81
|
+
if (issueGroups.some((group) => group.issueIndexes.some((index) => index >= issues.length)))
|
|
82
|
+
return output;
|
|
83
|
+
const report = output;
|
|
84
|
+
const type = requestedType(input);
|
|
85
|
+
const room = requestedRoom(input);
|
|
86
|
+
if (type)
|
|
87
|
+
return oneTypeReport(report, issues, issueGroups, type, room);
|
|
88
|
+
if (room)
|
|
89
|
+
return oneRoomReport(report, issues, room);
|
|
90
|
+
return compactReport(report, issues, issueGroups);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* `type: "…"`: every original finding of that one type, and none of the report's other blocks.
|
|
94
|
+
* `usage_room`, the type of a room's entry, gives the findings the entries hold; with a `room`, only that room's.
|
|
95
|
+
*/
|
|
96
|
+
function oneTypeReport(report, issues, issueGroups, type, room) {
|
|
97
|
+
const ofType = issues.filter((issue) => isRecord(issue) &&
|
|
98
|
+
(type === ROOM_ENTRY_TYPE ? isRoomFolded(issue.type) : issue.type === type));
|
|
99
|
+
const findings = room ? findingsOfRoom(ofType, room, report.roomScope) : ofType;
|
|
100
|
+
const named = { ok: report.ok, type, ...(room ? { room } : {}) };
|
|
101
|
+
if (findings.length > 0)
|
|
102
|
+
return { ...named, issueCount: findings.length, issues: findings };
|
|
103
|
+
return {
|
|
104
|
+
...named,
|
|
105
|
+
issueCount: 0,
|
|
106
|
+
issues: [],
|
|
107
|
+
types: Object.fromEntries(issueGroups.map((group) => [group.type, group.count])),
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** `room: "…"`: the room's findings and those naming its contents, whole. */
|
|
111
|
+
function oneRoomReport(report, issues, room) {
|
|
112
|
+
const findings = findingsOfRoom(issues, room, report.roomScope);
|
|
113
|
+
if (findings.length > 0)
|
|
114
|
+
return { ok: report.ok, room, issueCount: findings.length, issues: findings };
|
|
115
|
+
return {
|
|
116
|
+
ok: report.ok,
|
|
117
|
+
room,
|
|
118
|
+
issueCount: 0,
|
|
119
|
+
issues: [],
|
|
120
|
+
rooms: roomsWithUsageFindings(issues),
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
function compactReport(report, issues, issueGroups) {
|
|
124
|
+
const { issueGroups: _groups, ...rest } = report;
|
|
125
|
+
const { shown, measuredFrom } = shownIssues(issues, issueGroups);
|
|
126
|
+
return {
|
|
127
|
+
...rest,
|
|
128
|
+
issueCount: issues.length,
|
|
129
|
+
issues: shown,
|
|
130
|
+
...(shown.some((issue) => isRecord(issue) && isUsageType(issue.type))
|
|
131
|
+
? { usageNote: usageNote(measuredFrom) }
|
|
132
|
+
: {}),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/** Every warning and error whole; one entry for each repeated informational finding; the usage findings as the room entries and the singles they are. */
|
|
136
|
+
function shownIssues(issues, issueGroups) {
|
|
137
|
+
const shown = [];
|
|
138
|
+
const grouped = new Set();
|
|
139
|
+
const roomFindings = [];
|
|
140
|
+
let roomsAt = -1;
|
|
141
|
+
const passages = issues.filter(isRecord).filter((issue) => issue.type === PASSAGE_TYPE);
|
|
142
|
+
const entrances = passageEntrances(passages);
|
|
143
|
+
for (const group of issueGroups) {
|
|
144
|
+
const members = group.issueIndexes.map((index) => {
|
|
145
|
+
grouped.add(index);
|
|
146
|
+
return issues[index];
|
|
147
|
+
});
|
|
148
|
+
// A room's turning circle and pocket are one entry for the room, where the first of them stood.
|
|
149
|
+
if (isRoomFolded(group.type)) {
|
|
150
|
+
if (roomsAt < 0)
|
|
151
|
+
roomsAt = shown.length;
|
|
152
|
+
roomFindings.push(...members.filter(isRecord));
|
|
153
|
+
continue;
|
|
154
|
+
}
|
|
155
|
+
// The other usage findings arrive one by one, info or not, without the structure their message repeats.
|
|
156
|
+
if (isUsageType(group.type)) {
|
|
157
|
+
shown.push(...members.map((member) => isRecord(member) ? slimUsageFinding(member, entrances) : member));
|
|
158
|
+
continue;
|
|
159
|
+
}
|
|
160
|
+
// A lone finding of a type is its own complete example, informational or not.
|
|
161
|
+
if (group.severity === 'info' && members.length > 1) {
|
|
162
|
+
shown.push(infoGroup(group, members));
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
shown.push(...members);
|
|
166
|
+
}
|
|
167
|
+
if (roomsAt >= 0) {
|
|
168
|
+
const entries = foldUsageRooms(roomFindings, servedRoomIds(passages));
|
|
169
|
+
shown.splice(roomsAt, 0, ...entries.filter((entry) => entry.severity !== 'info'), ...entries.filter((entry) => entry.severity === 'info'));
|
|
170
|
+
}
|
|
171
|
+
// A finding no group gathered still arrives whole: the presentation hides none.
|
|
172
|
+
issues.forEach((issue, index) => {
|
|
173
|
+
if (!grouped.has(index))
|
|
174
|
+
shown.push(issue);
|
|
175
|
+
});
|
|
176
|
+
return { shown, measuredFrom: entrances.length === 1 ? entrances : [] };
|
|
177
|
+
}
|
|
178
|
+
/** A repeated informational finding: how many, where, a few examples, and how to read them all. */
|
|
179
|
+
function infoGroup(group, members) {
|
|
180
|
+
const { issueIndexes: _indexes, nodes: _nodes, ...summary } = group;
|
|
181
|
+
return {
|
|
182
|
+
...summary,
|
|
183
|
+
examples: distinctExamples(members),
|
|
184
|
+
detail: `verify_scene({ "type": "${group.type}" }) returns all ${members.length} findings`,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/** The first few findings that differ, so a group of identical records costs one of them. */
|
|
188
|
+
function distinctExamples(members) {
|
|
189
|
+
const examples = [];
|
|
190
|
+
const seen = new Set();
|
|
191
|
+
for (const member of members) {
|
|
192
|
+
const key = JSON.stringify(member);
|
|
193
|
+
if (seen.has(key))
|
|
194
|
+
continue;
|
|
195
|
+
seen.add(key);
|
|
196
|
+
examples.push(member);
|
|
197
|
+
if (examples.length === GROUP_EXAMPLES)
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
return examples;
|
|
201
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view-scene.d.ts","sourceRoot":"","sources":["../../src/agent-tools/view-scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,kFAAkF;AAClF,eAAO,MAAM,aAAa,YACxB,OAAO,EACP,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,MAAM,EACN,YAAY,CACJ,CAAA;AAEV;;;;GAIG;AACH,eAAO,MAAM,YAAY,YACvB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,MAAM,EACN,OAAO,EACP,MAAM,EACN,WAAW,EACX,YAAY,CACJ,CAAA;AAEV,eAAO,MAAM,UAAU,2MAAwD,CAAA;AAE/E,+FAA+F;AAC/F,eAAO,MAAM,aAAa,YAAI,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AAE/F,6FAA6F;AAC7F,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B,eAAO,MAAM,aAAa;IACxB,IAAI;IACJ,KAAK;IACL,WAAW;IAEX,KAAK;QACH,MAAM;QAMN,QAAQ;;;;QASR,YAAY;;;;;;;;QAUZ,IAAI;;;;;;;;;;;;;;;;;;;QAMJ,SAAS;QAMT,SAAS;QAKT,QAAQ;QAGR,GAAG;QAKH,UAAU;;;;QAIV,MAAM;;;;;;QAcN,QAAQ;;;;;;;;QAMR,KAAK;QASL,KAAK;;;;;CAmBR,CAAA"}
|
|
1
|
+
{"version":3,"file":"view-scene.d.ts","sourceRoot":"","sources":["../../src/agent-tools/view-scene.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,kFAAkF;AAClF,eAAO,MAAM,aAAa,YACxB,OAAO,EACP,YAAY,EACZ,MAAM,EACN,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,MAAM,EACN,YAAY,CACJ,CAAA;AAEV;;;;GAIG;AACH,eAAO,MAAM,YAAY,YACvB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,MAAM,EACN,OAAO,EACP,MAAM,EACN,WAAW,EACX,YAAY,CACJ,CAAA;AAEV,eAAO,MAAM,UAAU,2MAAwD,CAAA;AAE/E,+FAA+F;AAC/F,eAAO,MAAM,aAAa,YAAI,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAU,CAAA;AAE/F,6FAA6F;AAC7F,eAAO,MAAM,WAAW,OAAO,CAAA;AAE/B,eAAO,MAAM,aAAa;IACxB,IAAI;IACJ,KAAK;IACL,WAAW;IAEX,YAAY;QACV,GAAG;;IAEL,KAAK;QACH,MAAM;QAMN,QAAQ;;;;QASR,YAAY;;;;;;;;QAUZ,IAAI;;;;;;;;;;;;;;;;;;;QAMJ,SAAS;QAMT,SAAS;QAKT,QAAQ;QAGR,GAAG;QAKH,UAAU;;;;QAIV,MAAM;;;;;;QAcN,QAAQ;;;;;;;;QAMR,KAAK;QASL,KAAK;;;;;CAmBR,CAAA"}
|
|
@@ -35,7 +35,10 @@ export const VIEW_MAX_PX = 1920;
|
|
|
35
35
|
export const viewSceneTool = {
|
|
36
36
|
name: 'view_scene',
|
|
37
37
|
title: 'Look at the scene',
|
|
38
|
-
description: "Look at the building in 3D from a viewpoint you pick and get the picture back: the finished house, every storey and the roof by default, or an explicit Solo/Exploded level presentation, whatever view mode the person has on. Use it to compare what you built with a reference and say what differs before you fix it: the facade from the photo's own camera (camera: its position, aim, field of view and aspect), rendered at the photo's aspect to lay beside it; or from the photo's side at street height (from 'street', 'street-left', …, eyeHeight 1.7), in its light (lighting); one face square on (projection orthographic); the massing from above, or an aerial view (elevation 40). The view frames the target (a building, a level, a wall or a zone; the whole building, its roof included, by default) from outside, unless you place the eye yourself with position or camera. To stand inside a room and see its furniture and finishes at a person's height, give interior {zoneId} (a room: an id from get_zones or create_room): the eye stands in the room a step in from a corner, looking across it, with the cut below; from picks the side of the room it stands on, target something in the room to look at it. To see inside a floor, give interior {levelId}: the other floors and that floor's roofs and ceilings are left out of the picture, and everything on it, walls, openings and furniture alike, is cut at 0.65 of the storey's height (about two thirds), so a tall wardrobe or a door head is cut, not short; a roof level has no inside; with no eye given it looks down into the floor, or into the room or zone you target. A level below grade, targeted alone, is looked into the same way (from outside the ground would cover it), the ground over it drawn as a faint veil. The live view is not changed. A door, a window or an item on a floor frames at detail scale, an opening seen from its outside face: a close-up to lay beside the photo's crop of the same element, to see what differs.
|
|
38
|
+
description: "Look at the building in 3D from a viewpoint you pick and get the picture back: the finished house, every storey and the roof by default, or an explicit Solo/Exploded level presentation, whatever view mode the person has on. Use it to compare what you built with a reference and say what differs before you fix it: the facade from the photo's own camera (camera: its position, aim, field of view and aspect), rendered at the photo's aspect to lay beside it; or from the photo's side at street height (from 'street', 'street-left', …, eyeHeight 1.7), in its light (lighting); one face square on (projection orthographic); the massing from above, or an aerial view (elevation 40). The view frames the target (a building, a level, a wall or a zone; the whole building, its roof included, by default) from outside, unless you place the eye yourself with position or camera. To stand inside a room and see its furniture and finishes at a person's height, give interior {zoneId} (a room: an id from get_zones or create_room): the eye stands in the room a step in from a corner, looking across it, with the cut below; from picks the side of the room it stands on, target something in the room to look at it. To see inside a floor, give interior {levelId}: the other floors and that floor's roofs and ceilings are left out of the picture, and everything on it, walls, openings and furniture alike, is cut at 0.65 of the storey's height (about two thirds), so a tall wardrobe or a door head is cut, not short; a roof level has no inside; with no eye given it looks down into the floor, or into the room or zone you target. A level below grade, targeted alone, is looked into the same way (from outside the ground would cover it), the ground over it drawn as a faint veil. The live view is not changed. A door, a window or an item on a floor frames at detail scale, an opening seen from its outside face: a close-up to lay beside the photo's crop of the same element, to see what differs. Where the host keeps the picture it answers its viewId: name it to use that exact frame later (a Studio render of this view) without taking it again. A picture is not a measure: take sizes and counts from the tools.",
|
|
39
|
+
surfaceNotes: {
|
|
40
|
+
mcp: "The MCP has no renderer of its own: an editor open on the project renders the picture, the user's own tab or, where the host offers one, an editor on its servers (each view it renders costs credits). A refusal says what to do: editor_tab_required (no editor can render it), editor_tab_hidden (the user's tab is in the background: it must be brought to the front), editor_tab_busy (a tab is open but busy or still loading: call view_scene again in a few seconds, the user need not be asked).",
|
|
41
|
+
},
|
|
39
42
|
input: {
|
|
40
43
|
target: z
|
|
41
44
|
.string()
|