@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.
Files changed (940) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +31 -0
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  4. package/dist/agent-operations/__fixtures__/build-room-cases.js +27 -0
  5. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  6. package/dist/agent-operations/__fixtures__/cases.js +19 -11
  7. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +25 -2
  8. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -1
  9. package/dist/agent-operations/__fixtures__/design-brief-cases.js +509 -66
  10. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts +30 -0
  11. package/dist/agent-operations/__fixtures__/dressing-scenes.d.ts.map +1 -0
  12. package/dist/agent-operations/__fixtures__/dressing-scenes.js +82 -0
  13. package/dist/agent-operations/__fixtures__/native-materials.d.ts +407 -9
  14. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -1
  15. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -1
  16. package/dist/agent-operations/__fixtures__/notation-cases.js +14 -0
  17. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +7253 -4053
  18. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -1
  19. package/dist/agent-operations/__fixtures__/room-cases.d.ts +1 -0
  20. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  21. package/dist/agent-operations/__fixtures__/room-cases.js +57 -1
  22. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts +51 -0
  23. package/dist/agent-operations/__fixtures__/room-check-scenes.d.ts.map +1 -0
  24. package/dist/agent-operations/__fixtures__/room-check-scenes.js +121 -0
  25. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -1
  26. package/dist/agent-operations/__fixtures__/scene-check-cases.js +152 -18
  27. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  28. package/dist/agent-operations/__fixtures__/search-assets-cases.js +91 -0
  29. package/dist/agent-operations/__fixtures__/site-cases.d.ts +40 -1
  30. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -1
  31. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +3 -0
  32. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  33. package/dist/agent-operations/__fixtures__/structure-cases.js +199 -18
  34. package/dist/agent-operations/__fixtures__/unit-cases.d.ts +6 -0
  35. package/dist/agent-operations/__fixtures__/unit-cases.d.ts.map +1 -0
  36. package/dist/agent-operations/__fixtures__/unit-cases.js +266 -0
  37. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +109 -73
  38. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  39. package/dist/agent-operations/add-column.d.ts.map +1 -1
  40. package/dist/agent-operations/add-column.js +32 -3
  41. package/dist/agent-operations/add-fence.d.ts.map +1 -1
  42. package/dist/agent-operations/add-fence.js +2 -1
  43. package/dist/agent-operations/add-level.d.ts.map +1 -1
  44. package/dist/agent-operations/add-level.js +4 -4
  45. package/dist/agent-operations/add-object.d.ts +32 -6
  46. package/dist/agent-operations/add-object.d.ts.map +1 -1
  47. package/dist/agent-operations/add-object.js +59 -12
  48. package/dist/agent-operations/add-wall.d.ts +3 -8
  49. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  50. package/dist/agent-operations/add-wall.js +31 -8
  51. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  52. package/dist/agent-operations/apply-changes.js +2 -1
  53. package/dist/agent-operations/asset-catalog.d.ts +63 -0
  54. package/dist/agent-operations/asset-catalog.d.ts.map +1 -0
  55. package/dist/agent-operations/asset-catalog.js +182 -0
  56. package/dist/agent-operations/asset-views.d.ts +4 -2
  57. package/dist/agent-operations/asset-views.d.ts.map +1 -1
  58. package/dist/agent-operations/asset-views.js +1 -3
  59. package/dist/agent-operations/author-scene-checks.d.ts +38 -0
  60. package/dist/agent-operations/author-scene-checks.d.ts.map +1 -0
  61. package/dist/agent-operations/author-scene-checks.js +266 -0
  62. package/dist/agent-operations/author-scene.d.ts +54 -20
  63. package/dist/agent-operations/author-scene.d.ts.map +1 -1
  64. package/dist/agent-operations/author-scene.js +1164 -196
  65. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -1
  66. package/dist/agent-operations/authored-scene-merge.js +61 -3
  67. package/dist/agent-operations/batch.d.ts +1 -1
  68. package/dist/agent-operations/batch.d.ts.map +1 -1
  69. package/dist/agent-operations/batch.js +38 -39
  70. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -1
  71. package/dist/agent-operations/ceiling-object-observations.js +5 -4
  72. package/dist/agent-operations/circulation-geometry.d.ts +14 -0
  73. package/dist/agent-operations/circulation-geometry.d.ts.map +1 -0
  74. package/dist/agent-operations/circulation-geometry.js +151 -0
  75. package/dist/agent-operations/circulation-graph.d.ts +72 -0
  76. package/dist/agent-operations/circulation-graph.d.ts.map +1 -0
  77. package/dist/agent-operations/circulation-graph.js +713 -0
  78. package/dist/agent-operations/circulation-non-spaces.d.ts +10 -0
  79. package/dist/agent-operations/circulation-non-spaces.d.ts.map +1 -0
  80. package/dist/agent-operations/circulation-non-spaces.js +88 -0
  81. package/dist/agent-operations/circulation-spaces.d.ts +5880 -0
  82. package/dist/agent-operations/circulation-spaces.d.ts.map +1 -0
  83. package/dist/agent-operations/circulation-spaces.js +368 -0
  84. package/dist/agent-operations/collections.d.ts.map +1 -1
  85. package/dist/agent-operations/collections.js +9 -7
  86. package/dist/agent-operations/corner-window.d.ts.map +1 -1
  87. package/dist/agent-operations/corner-window.js +2 -4
  88. package/dist/agent-operations/create-roof.d.ts.map +1 -1
  89. package/dist/agent-operations/create-roof.js +5 -7
  90. package/dist/agent-operations/create-room.d.ts +4 -1
  91. package/dist/agent-operations/create-room.d.ts.map +1 -1
  92. package/dist/agent-operations/create-room.js +7 -4
  93. package/dist/agent-operations/create-stair.js +2 -2
  94. package/dist/agent-operations/design-brief.d.ts +13 -7
  95. package/dist/agent-operations/design-brief.d.ts.map +1 -1
  96. package/dist/agent-operations/design-brief.js +172 -92
  97. package/dist/agent-operations/door-clearance.d.ts +68 -8
  98. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  99. package/dist/agent-operations/door-clearance.js +127 -20
  100. package/dist/agent-operations/dress-targets.d.ts +23 -0
  101. package/dist/agent-operations/dress-targets.d.ts.map +1 -0
  102. package/dist/agent-operations/dress-targets.js +34 -0
  103. package/dist/agent-operations/duplicate-node.d.ts +14 -0
  104. package/dist/agent-operations/duplicate-node.d.ts.map +1 -0
  105. package/dist/agent-operations/duplicate-node.js +173 -0
  106. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  107. package/dist/agent-operations/find-by-type.js +3 -0
  108. package/dist/agent-operations/furnish-room.d.ts +2 -0
  109. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  110. package/dist/agent-operations/furnish-room.js +15 -4
  111. package/dist/agent-operations/furniture-kind.d.ts +28 -1
  112. package/dist/agent-operations/furniture-kind.d.ts.map +1 -1
  113. package/dist/agent-operations/furniture-kind.js +105 -6
  114. package/dist/agent-operations/ground-reader.d.ts +10 -0
  115. package/dist/agent-operations/ground-reader.d.ts.map +1 -0
  116. package/dist/agent-operations/ground-reader.js +25 -0
  117. package/dist/agent-operations/index.d.ts +118 -12
  118. package/dist/agent-operations/index.d.ts.map +1 -1
  119. package/dist/agent-operations/index.js +26 -1
  120. package/dist/agent-operations/item-solids.d.ts +39 -0
  121. package/dist/agent-operations/item-solids.d.ts.map +1 -0
  122. package/dist/agent-operations/item-solids.js +128 -0
  123. package/dist/agent-operations/layout-clearance.d.ts +91 -11
  124. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/layout-clearance.js +280 -73
  126. package/dist/agent-operations/level-height-fill.d.ts.map +1 -1
  127. package/dist/agent-operations/level-height-fill.js +7 -1
  128. package/dist/agent-operations/level-reads.d.ts +5 -0
  129. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  130. package/dist/agent-operations/level-reads.js +38 -2
  131. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  132. package/dist/agent-operations/list-levels.js +2 -4
  133. package/dist/agent-operations/move-node.d.ts +12 -0
  134. package/dist/agent-operations/move-node.d.ts.map +1 -0
  135. package/dist/agent-operations/move-node.js +28 -0
  136. package/dist/agent-operations/move-plan.d.ts +28 -0
  137. package/dist/agent-operations/move-plan.d.ts.map +1 -0
  138. package/dist/agent-operations/move-plan.js +257 -0
  139. package/dist/agent-operations/node-patch.d.ts.map +1 -1
  140. package/dist/agent-operations/node-patch.js +15 -0
  141. package/dist/agent-operations/paint.d.ts +3 -1
  142. package/dist/agent-operations/paint.d.ts.map +1 -1
  143. package/dist/agent-operations/paint.js +14 -1
  144. package/dist/agent-operations/photo-elevation.d.ts.map +1 -1
  145. package/dist/agent-operations/photo-elevation.js +2 -1
  146. package/dist/agent-operations/place-in-room.d.ts.map +1 -1
  147. package/dist/agent-operations/place-in-room.js +1 -0
  148. package/dist/agent-operations/place-items.d.ts.map +1 -1
  149. package/dist/agent-operations/place-items.js +3 -4
  150. package/dist/agent-operations/plan-clearance.d.ts +28 -0
  151. package/dist/agent-operations/plan-clearance.d.ts.map +1 -0
  152. package/dist/agent-operations/plan-clearance.js +47 -0
  153. package/dist/agent-operations/plan-geometry.d.ts +2 -0
  154. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  155. package/dist/agent-operations/plan-geometry.js +10 -0
  156. package/dist/agent-operations/project-files.d.ts +10 -0
  157. package/dist/agent-operations/project-files.d.ts.map +1 -1
  158. package/dist/agent-operations/reachability.d.ts +41 -0
  159. package/dist/agent-operations/reachability.d.ts.map +1 -0
  160. package/dist/agent-operations/reachability.js +199 -0
  161. package/dist/agent-operations/room-checks.d.ts +60 -0
  162. package/dist/agent-operations/room-checks.d.ts.map +1 -0
  163. package/dist/agent-operations/room-checks.js +226 -0
  164. package/dist/agent-operations/room-faces.d.ts +30 -0
  165. package/dist/agent-operations/room-faces.d.ts.map +1 -0
  166. package/dist/agent-operations/room-faces.js +31 -0
  167. package/dist/agent-operations/room-findings.d.ts +5 -2
  168. package/dist/agent-operations/room-findings.d.ts.map +1 -1
  169. package/dist/agent-operations/room-findings.js +30 -0
  170. package/dist/agent-operations/room-finishes.d.ts +87 -0
  171. package/dist/agent-operations/room-finishes.d.ts.map +1 -0
  172. package/dist/agent-operations/room-finishes.js +193 -0
  173. package/dist/agent-operations/room-floor-script.d.ts +3 -3
  174. package/dist/agent-operations/room-floor-script.js +3 -3
  175. package/dist/agent-operations/room-readings.d.ts +90 -0
  176. package/dist/agent-operations/room-readings.d.ts.map +1 -0
  177. package/dist/agent-operations/room-readings.js +369 -0
  178. package/dist/agent-operations/room-tile.d.ts +15 -0
  179. package/dist/agent-operations/room-tile.d.ts.map +1 -0
  180. package/dist/agent-operations/room-tile.js +30 -0
  181. package/dist/agent-operations/room-wet.d.ts +55 -0
  182. package/dist/agent-operations/room-wet.d.ts.map +1 -0
  183. package/dist/agent-operations/room-wet.js +203 -0
  184. package/dist/agent-operations/scene-check-policy.d.ts +5 -0
  185. package/dist/agent-operations/scene-check-policy.d.ts.map +1 -0
  186. package/dist/agent-operations/scene-check-policy.js +24 -0
  187. package/dist/agent-operations/scene-checkpoint.d.ts +10 -0
  188. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -1
  189. package/dist/agent-operations/scene-checkpoint.js +31 -0
  190. package/dist/agent-operations/scene-issue-groups.d.ts +17 -0
  191. package/dist/agent-operations/scene-issue-groups.d.ts.map +1 -0
  192. package/dist/agent-operations/scene-issue-groups.js +71 -0
  193. package/dist/agent-operations/scene-materials.d.ts +23 -0
  194. package/dist/agent-operations/scene-materials.d.ts.map +1 -1
  195. package/dist/agent-operations/scene-materials.js +41 -0
  196. package/dist/agent-operations/scene-queries.d.ts +1667 -866
  197. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  198. package/dist/agent-operations/scene-queries.js +3 -3
  199. package/dist/agent-operations/scene-review.d.ts.map +1 -1
  200. package/dist/agent-operations/scene-review.js +3 -2
  201. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  202. package/dist/agent-operations/scene-view.js +91 -21
  203. package/dist/agent-operations/search-assets.d.ts +10 -6
  204. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  205. package/dist/agent-operations/search-assets.js +37 -22
  206. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -1
  207. package/dist/agent-operations/set-checkpoint.js +1 -0
  208. package/dist/agent-operations/set-ground-level.d.ts +1 -1
  209. package/dist/agent-operations/set-ground-level.d.ts.map +1 -1
  210. package/dist/agent-operations/set-ground-level.js +3 -14
  211. package/dist/agent-operations/site.js +3 -2
  212. package/dist/agent-operations/slab-surface-script.d.ts +25 -0
  213. package/dist/agent-operations/slab-surface-script.d.ts.map +1 -0
  214. package/dist/agent-operations/slab-surface-script.js +60 -0
  215. package/dist/agent-operations/stair-plan-footprint.d.ts +9 -0
  216. package/dist/agent-operations/stair-plan-footprint.d.ts.map +1 -0
  217. package/dist/agent-operations/stair-plan-footprint.js +50 -0
  218. package/dist/agent-operations/types.d.ts +10 -5
  219. package/dist/agent-operations/types.d.ts.map +1 -1
  220. package/dist/agent-operations/units.d.ts +26 -0
  221. package/dist/agent-operations/units.d.ts.map +1 -0
  222. package/dist/agent-operations/units.js +110 -0
  223. package/dist/agent-operations/unreachable-rooms-check.d.ts +17 -0
  224. package/dist/agent-operations/unreachable-rooms-check.d.ts.map +1 -0
  225. package/dist/agent-operations/unreachable-rooms-check.js +35 -0
  226. package/dist/agent-operations/usage-checks.d.ts +2 -0
  227. package/dist/agent-operations/usage-checks.d.ts.map +1 -0
  228. package/dist/agent-operations/usage-checks.js +12 -0
  229. package/dist/agent-operations/verify-scene.d.ts +8 -11
  230. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  231. package/dist/agent-operations/verify-scene.js +55 -11
  232. package/dist/agent-operations/wall-face-defaults.d.ts +44 -0
  233. package/dist/agent-operations/wall-face-defaults.d.ts.map +1 -0
  234. package/dist/agent-operations/wall-face-defaults.js +229 -0
  235. package/dist/agent-operations/wall-joins.d.ts +119 -0
  236. package/dist/agent-operations/wall-joins.d.ts.map +1 -0
  237. package/dist/agent-operations/wall-joins.js +308 -0
  238. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -1
  239. package/dist/agent-operations/wall-object-observations.js +4 -6
  240. package/dist/agent-operations/wall-skirting.d.ts.map +1 -1
  241. package/dist/agent-operations/wall-skirting.js +2 -0
  242. package/dist/agent-operations/wall-type.d.ts +49 -0
  243. package/dist/agent-operations/wall-type.d.ts.map +1 -0
  244. package/dist/agent-operations/wall-type.js +31 -0
  245. package/dist/agent-operations/zone-coverage.d.ts +85 -0
  246. package/dist/agent-operations/zone-coverage.d.ts.map +1 -0
  247. package/dist/agent-operations/zone-coverage.js +208 -0
  248. package/dist/agent-tools/add-object.d.ts +31 -0
  249. package/dist/agent-tools/add-object.d.ts.map +1 -1
  250. package/dist/agent-tools/add-object.js +44 -7
  251. package/dist/agent-tools/assets.d.ts +4 -0
  252. package/dist/agent-tools/assets.d.ts.map +1 -1
  253. package/dist/agent-tools/assets.js +11 -1
  254. package/dist/agent-tools/author-scene.d.ts +810 -15
  255. package/dist/agent-tools/author-scene.d.ts.map +1 -1
  256. package/dist/agent-tools/author-scene.js +275 -34
  257. package/dist/agent-tools/batch.d.ts +1 -1
  258. package/dist/agent-tools/batch.d.ts.map +1 -1
  259. package/dist/agent-tools/batch.js +5 -1
  260. package/dist/agent-tools/checkpoints.js +1 -1
  261. package/dist/agent-tools/columns.d.ts +14 -0
  262. package/dist/agent-tools/columns.d.ts.map +1 -1
  263. package/dist/agent-tools/columns.js +14 -2
  264. package/dist/agent-tools/contract.d.ts +10 -0
  265. package/dist/agent-tools/contract.d.ts.map +1 -1
  266. package/dist/agent-tools/contract.js +5 -1
  267. package/dist/agent-tools/corner-window.d.ts +1 -0
  268. package/dist/agent-tools/corner-window.d.ts.map +1 -1
  269. package/dist/agent-tools/corner-window.js +1 -1
  270. package/dist/agent-tools/create-room.d.ts +85 -0
  271. package/dist/agent-tools/create-room.d.ts.map +1 -1
  272. package/dist/agent-tools/create-room.js +8 -1
  273. package/dist/agent-tools/design-brief.d.ts +513 -7
  274. package/dist/agent-tools/design-brief.d.ts.map +1 -1
  275. package/dist/agent-tools/design-brief.js +192 -14
  276. package/dist/agent-tools/designs.js +1 -1
  277. package/dist/agent-tools/find-by-type.js +1 -1
  278. package/dist/agent-tools/index.d.ts +658 -10
  279. package/dist/agent-tools/index.d.ts.map +1 -1
  280. package/dist/agent-tools/index.js +9 -1
  281. package/dist/agent-tools/levels.js +4 -4
  282. package/dist/agent-tools/move-duplicate.d.ts +65 -0
  283. package/dist/agent-tools/move-duplicate.d.ts.map +1 -0
  284. package/dist/agent-tools/move-duplicate.js +68 -0
  285. package/dist/agent-tools/paint.d.ts +6 -0
  286. package/dist/agent-tools/paint.d.ts.map +1 -1
  287. package/dist/agent-tools/paint.js +7 -3
  288. package/dist/agent-tools/photo-elevation.js +1 -1
  289. package/dist/agent-tools/project-files.d.ts +2 -2
  290. package/dist/agent-tools/project-files.d.ts.map +1 -1
  291. package/dist/agent-tools/project-files.js +1 -1
  292. package/dist/agent-tools/refusal.d.ts +9 -1
  293. package/dist/agent-tools/refusal.d.ts.map +1 -1
  294. package/dist/agent-tools/refusal.js +5 -1
  295. package/dist/agent-tools/roofs.js +1 -1
  296. package/dist/agent-tools/room-structure.d.ts +60 -0
  297. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  298. package/dist/agent-tools/room-structure.js +20 -1
  299. package/dist/agent-tools/search-materials.d.ts +1 -0
  300. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  301. package/dist/agent-tools/site.js +1 -1
  302. package/dist/agent-tools/stairs.js +1 -1
  303. package/dist/agent-tools/units.d.ts +84 -0
  304. package/dist/agent-tools/units.d.ts.map +1 -0
  305. package/dist/agent-tools/units.js +54 -0
  306. package/dist/agent-tools/verify-scene-usage.d.ts +44 -0
  307. package/dist/agent-tools/verify-scene-usage.d.ts.map +1 -0
  308. package/dist/agent-tools/verify-scene-usage.js +146 -0
  309. package/dist/agent-tools/verify-scene.d.ts +12 -1
  310. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  311. package/dist/agent-tools/verify-scene.js +183 -3
  312. package/dist/agent-tools/view-scene.d.ts +3 -0
  313. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  314. package/dist/agent-tools/view-scene.js +4 -1
  315. package/dist/agent-tools/wall-openings.d.ts +121 -2
  316. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  317. package/dist/agent-tools/wall-openings.js +123 -18
  318. package/dist/agent-tools/walls.d.ts +30 -0
  319. package/dist/agent-tools/walls.d.ts.map +1 -1
  320. package/dist/agent-tools/walls.js +54 -2
  321. package/dist/building/__fixtures__/wall-opening-cases.d.ts +340 -195
  322. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  323. package/dist/building/__fixtures__/wall-opening-cases.js +13 -0
  324. package/dist/building/code-profile.d.ts +231 -0
  325. package/dist/building/code-profile.d.ts.map +1 -0
  326. package/dist/building/code-profile.js +208 -0
  327. package/dist/building/corner-window.d.ts +2 -2
  328. package/dist/building/corner-window.d.ts.map +1 -1
  329. package/dist/building/corner-window.js +11 -2
  330. package/dist/building/door-types.d.ts +1 -0
  331. package/dist/building/door-types.d.ts.map +1 -1
  332. package/dist/building/door-types.js +2 -0
  333. package/dist/building/floor-item-fit.d.ts.map +1 -1
  334. package/dist/building/floor-item-fit.js +2 -4
  335. package/dist/building/ground-level.d.ts +1 -3
  336. package/dist/building/ground-level.d.ts.map +1 -1
  337. package/dist/building/ground-level.js +3 -5
  338. package/dist/building/index.d.ts +2 -0
  339. package/dist/building/index.d.ts.map +1 -1
  340. package/dist/building/index.js +2 -0
  341. package/dist/building/level-duplication.d.ts +5951 -4351
  342. package/dist/building/level-duplication.d.ts.map +1 -1
  343. package/dist/building/level-insertion.d.ts +1 -1
  344. package/dist/building/level-wall-copy.d.ts +24 -0
  345. package/dist/building/level-wall-copy.d.ts.map +1 -0
  346. package/dist/building/level-wall-copy.js +53 -0
  347. package/dist/building/merge-windows.d.ts.map +1 -1
  348. package/dist/building/merge-windows.js +1 -0
  349. package/dist/building/opening-style-presets.d.ts +2 -0
  350. package/dist/building/opening-style-presets.d.ts.map +1 -1
  351. package/dist/building/opening-style-presets.js +26 -5
  352. package/dist/building/room-use.d.ts +26 -0
  353. package/dist/building/room-use.d.ts.map +1 -0
  354. package/dist/building/room-use.js +102 -0
  355. package/dist/building/wall-openings.d.ts +115 -7
  356. package/dist/building/wall-openings.d.ts.map +1 -1
  357. package/dist/building/wall-openings.js +121 -29
  358. package/dist/building/window-types.d.ts +1 -0
  359. package/dist/building/window-types.d.ts.map +1 -1
  360. package/dist/building/window-types.js +3 -0
  361. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts +84 -0
  362. package/dist/coherence/__fixtures__/enclosure-scenes.d.ts.map +1 -0
  363. package/dist/coherence/__fixtures__/enclosure-scenes.js +44 -0
  364. package/dist/commands/structure/attached-walls.d.ts +16 -0
  365. package/dist/commands/structure/attached-walls.d.ts.map +1 -0
  366. package/dist/commands/structure/attached-walls.js +53 -0
  367. package/dist/commands/structure/index.d.ts +3 -0
  368. package/dist/commands/structure/index.d.ts.map +1 -1
  369. package/dist/commands/structure/index.js +3 -0
  370. package/dist/commands/structure/move-separators.d.ts +62 -0
  371. package/dist/commands/structure/move-separators.d.ts.map +1 -0
  372. package/dist/commands/structure/move-separators.js +346 -0
  373. package/dist/commands/structure/set-floor-foundation.d.ts +5 -0
  374. package/dist/commands/structure/set-floor-foundation.d.ts.map +1 -1
  375. package/dist/commands/structure/set-wall-geometry.d.ts.map +1 -1
  376. package/dist/commands/structure/set-wall-geometry.js +44 -11
  377. package/dist/commands/structure/set-zone-intent.d.ts +26 -0
  378. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  379. package/dist/commands/structure/set-zone-intent.js +107 -2
  380. package/dist/commands/structure/shared.d.ts +888 -88
  381. package/dist/commands/structure/shared.d.ts.map +1 -1
  382. package/dist/commands/structure/wall-overlap.d.ts +45 -0
  383. package/dist/commands/structure/wall-overlap.d.ts.map +1 -0
  384. package/dist/commands/structure/wall-overlap.js +289 -0
  385. package/dist/commands/structure/zone-wall-merge.d.ts +3326 -2370
  386. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  387. package/dist/contracts/reference-discovery.d.ts +2 -2
  388. package/dist/contracts/reference-discovery.d.ts.map +1 -1
  389. package/dist/contracts/reference-discovery.js +5 -3
  390. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  391. package/dist/contracts/reference-inventory.js +75 -24
  392. package/dist/events/bus.d.ts +15 -2
  393. package/dist/events/bus.d.ts.map +1 -1
  394. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts +40 -0
  395. package/dist/hooks/spatial-grid/built-in-floor-placed.d.ts.map +1 -0
  396. package/dist/hooks/spatial-grid/built-in-floor-placed.js +220 -0
  397. package/dist/hooks/spatial-grid/floor-placed-elevation.d.ts.map +1 -1
  398. package/dist/hooks/spatial-grid/floor-placed-elevation.js +13 -7
  399. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +56 -1
  400. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  401. package/dist/hooks/spatial-grid/spatial-grid-manager.js +177 -27
  402. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +1631 -831
  403. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  404. package/dist/hooks/spatial-grid/spatial-grid-sync.js +24 -1
  405. package/dist/hooks/spatial-grid/support-host-patch.js +10 -10
  406. package/dist/i18n/format.d.ts +41 -0
  407. package/dist/i18n/format.d.ts.map +1 -0
  408. package/dist/i18n/format.js +124 -0
  409. package/dist/i18n/index.d.ts +5 -0
  410. package/dist/i18n/index.d.ts.map +1 -0
  411. package/dist/i18n/index.js +3 -0
  412. package/dist/i18n/registry.d.ts +78 -0
  413. package/dist/i18n/registry.d.ts.map +1 -0
  414. package/dist/i18n/registry.js +252 -0
  415. package/dist/i18n/use-translate.d.ts +16 -0
  416. package/dist/i18n/use-translate.d.ts.map +1 -0
  417. package/dist/i18n/use-translate.js +23 -0
  418. package/dist/index.d.ts +32 -16
  419. package/dist/index.d.ts.map +1 -1
  420. package/dist/index.js +31 -15
  421. package/dist/lib/__fixtures__/mezzanine.d.ts +6840 -4169
  422. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  423. package/dist/lib/absorb-wall-separators.d.ts +2128 -1328
  424. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  425. package/dist/lib/beam.d.ts +137 -0
  426. package/dist/lib/beam.d.ts.map +1 -0
  427. package/dist/lib/beam.js +297 -0
  428. package/dist/lib/below-grade-footprints.d.ts +13 -5
  429. package/dist/lib/below-grade-footprints.d.ts.map +1 -1
  430. package/dist/lib/below-grade-footprints.js +53 -10
  431. package/dist/lib/build-up.d.ts +89 -0
  432. package/dist/lib/build-up.d.ts.map +1 -0
  433. package/dist/lib/build-up.js +216 -0
  434. package/dist/lib/corner-pair.d.ts +205 -4
  435. package/dist/lib/corner-pair.d.ts.map +1 -1
  436. package/dist/lib/deck-boards.d.ts +80 -0
  437. package/dist/lib/deck-boards.d.ts.map +1 -0
  438. package/dist/lib/deck-boards.js +184 -0
  439. package/dist/lib/deck-framing.d.ts +150 -0
  440. package/dist/lib/deck-framing.d.ts.map +1 -0
  441. package/dist/lib/deck-framing.js +515 -0
  442. package/dist/lib/deepest-drawn.d.ts +3 -6
  443. package/dist/lib/deepest-drawn.d.ts.map +1 -1
  444. package/dist/lib/deepest-drawn.js +4 -8
  445. package/dist/lib/door-opening.d.ts +19 -0
  446. package/dist/lib/door-opening.d.ts.map +1 -0
  447. package/dist/lib/door-opening.js +27 -0
  448. package/dist/lib/door-operation.d.ts +2 -0
  449. package/dist/lib/door-operation.d.ts.map +1 -1
  450. package/dist/lib/door-operation.js +4 -0
  451. package/dist/lib/exterior-wall-loops.d.ts.map +1 -1
  452. package/dist/lib/exterior-wall-loops.js +2 -1
  453. package/dist/lib/finish-script.d.ts +5 -5
  454. package/dist/lib/finish-script.d.ts.map +1 -1
  455. package/dist/lib/finish-script.js +12 -5
  456. package/dist/lib/floor-footprint-name.d.ts +17 -0
  457. package/dist/lib/floor-footprint-name.d.ts.map +1 -1
  458. package/dist/lib/floor-footprint-name.js +17 -4
  459. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  460. package/dist/lib/floor-intent-changes.js +60 -35
  461. package/dist/lib/floor-opening-footprints.d.ts +1 -1
  462. package/dist/lib/floor-opening-footprints.d.ts.map +1 -1
  463. package/dist/lib/floor-opening-footprints.js +10 -4
  464. package/dist/lib/floor-plate-paint.d.ts +2 -0
  465. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  466. package/dist/lib/floor-plate-paint.js +12 -0
  467. package/dist/lib/floor-plates.d.ts +250 -0
  468. package/dist/lib/floor-plates.d.ts.map +1 -1
  469. package/dist/lib/floor-plates.js +43 -4
  470. package/dist/lib/floor-script.d.ts +35 -6
  471. package/dist/lib/floor-script.d.ts.map +1 -1
  472. package/dist/lib/floor-script.js +96 -16
  473. package/dist/lib/foundation-construction.d.ts +4 -13
  474. package/dist/lib/foundation-construction.d.ts.map +1 -1
  475. package/dist/lib/foundation-construction.js +4 -14
  476. package/dist/lib/foundation-standard.d.ts +2 -3
  477. package/dist/lib/foundation-standard.d.ts.map +1 -1
  478. package/dist/lib/foundation-standard.js +2 -3
  479. package/dist/lib/foundation-wall.d.ts +1 -2
  480. package/dist/lib/foundation-wall.d.ts.map +1 -1
  481. package/dist/lib/foundation-wall.js +1 -2
  482. package/dist/lib/framing-post.d.ts +91 -0
  483. package/dist/lib/framing-post.d.ts.map +1 -0
  484. package/dist/lib/framing-post.js +174 -0
  485. package/dist/lib/geometry-script-node.d.ts +11 -0
  486. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  487. package/dist/lib/geometry-script-node.js +35 -0
  488. package/dist/lib/grade-standing.d.ts +16 -2
  489. package/dist/lib/grade-standing.d.ts.map +1 -1
  490. package/dist/lib/grade-standing.js +129 -9
  491. package/dist/lib/ground-seat.d.ts +2 -22
  492. package/dist/lib/ground-seat.d.ts.map +1 -1
  493. package/dist/lib/ground-seat.js +2 -17
  494. package/dist/lib/ground-window.d.ts +2 -1
  495. package/dist/lib/ground-window.d.ts.map +1 -1
  496. package/dist/lib/ground-window.js +5 -2
  497. package/dist/lib/level-footprints.d.ts +2 -0
  498. package/dist/lib/level-footprints.d.ts.map +1 -1
  499. package/dist/lib/level-footprints.js +7 -0
  500. package/dist/lib/opening-casing.d.ts +67 -0
  501. package/dist/lib/opening-casing.d.ts.map +1 -0
  502. package/dist/lib/opening-casing.js +131 -0
  503. package/dist/lib/opening-exterior-face.d.ts +6 -0
  504. package/dist/lib/opening-exterior-face.d.ts.map +1 -0
  505. package/dist/lib/opening-exterior-face.js +15 -0
  506. package/dist/lib/opening-floor-datum.d.ts +11 -5
  507. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  508. package/dist/lib/opening-floor-datum.js +38 -6
  509. package/dist/lib/opening-frame-depth.d.ts +18 -0
  510. package/dist/lib/opening-frame-depth.d.ts.map +1 -0
  511. package/dist/lib/opening-frame-depth.js +22 -0
  512. package/dist/lib/outdoor-room.d.ts +32 -0
  513. package/dist/lib/outdoor-room.d.ts.map +1 -0
  514. package/dist/lib/outdoor-room.js +66 -0
  515. package/dist/lib/plate-surface.d.ts +8 -0
  516. package/dist/lib/plate-surface.d.ts.map +1 -1
  517. package/dist/lib/plate-surface.js +53 -3
  518. package/dist/lib/porch-framing-sync.d.ts +46 -0
  519. package/dist/lib/porch-framing-sync.d.ts.map +1 -0
  520. package/dist/lib/porch-framing-sync.js +206 -0
  521. package/dist/lib/porch-framing.d.ts +44 -0
  522. package/dist/lib/porch-framing.d.ts.map +1 -0
  523. package/dist/lib/porch-framing.js +159 -0
  524. package/dist/lib/railing-rooms.d.ts +13 -0
  525. package/dist/lib/railing-rooms.d.ts.map +1 -0
  526. package/dist/lib/railing-rooms.js +37 -0
  527. package/dist/lib/roof-eave.d.ts +135 -0
  528. package/dist/lib/roof-eave.d.ts.map +1 -0
  529. package/dist/lib/roof-eave.js +186 -0
  530. package/dist/lib/room-floor-plate.d.ts +3 -1
  531. package/dist/lib/room-floor-plate.d.ts.map +1 -1
  532. package/dist/lib/room-floor-plate.js +7 -0
  533. package/dist/lib/space-detection.d.ts +13 -0
  534. package/dist/lib/space-detection.d.ts.map +1 -1
  535. package/dist/lib/space-detection.js +112 -24
  536. package/dist/lib/structure-kernel.d.ts +22 -9
  537. package/dist/lib/structure-kernel.d.ts.map +1 -1
  538. package/dist/lib/structure-kernel.js +146 -28
  539. package/dist/lib/structure-reconcile.d.ts +1 -1
  540. package/dist/lib/structure-reconcile.d.ts.map +1 -1
  541. package/dist/lib/structure-reconcile.js +7 -4
  542. package/dist/lib/surface-intent.d.ts +10 -0
  543. package/dist/lib/surface-intent.d.ts.map +1 -0
  544. package/dist/lib/surface-intent.js +18 -0
  545. package/dist/lib/terrain-source.d.ts.map +1 -1
  546. package/dist/lib/terrain-source.js +2 -1
  547. package/dist/lib/wall-face-script.d.ts.map +1 -1
  548. package/dist/lib/wall-face-script.js +5 -2
  549. package/dist/material-kinds.d.ts +1 -1
  550. package/dist/material-kinds.d.ts.map +1 -1
  551. package/dist/material-kinds.js +1 -0
  552. package/dist/material-library.d.ts +15 -0
  553. package/dist/material-library.d.ts.map +1 -1
  554. package/dist/material-library.js +458 -59
  555. package/dist/node-slots/door.d.ts +3 -4
  556. package/dist/node-slots/door.d.ts.map +1 -1
  557. package/dist/node-slots/door.js +4 -3
  558. package/dist/node-slots/wall.d.ts.map +1 -1
  559. package/dist/node-slots/wall.js +21 -3
  560. package/dist/node-slots/window.d.ts +2 -2
  561. package/dist/node-slots/window.d.ts.map +1 -1
  562. package/dist/node-slots/window.js +6 -1
  563. package/dist/procedural-items/design.d.ts +8 -0
  564. package/dist/procedural-items/design.d.ts.map +1 -1
  565. package/dist/procedural-items/design.js +169 -21
  566. package/dist/procedural-items/motion-controller.d.ts +2 -0
  567. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  568. package/dist/procedural-items/motion-controller.js +2 -1
  569. package/dist/registry/index.d.ts +2 -2
  570. package/dist/registry/index.d.ts.map +1 -1
  571. package/dist/registry/index.js +1 -1
  572. package/dist/registry/mechanism.d.ts +4 -1
  573. package/dist/registry/mechanism.d.ts.map +1 -1
  574. package/dist/registry/mechanism.js +10 -0
  575. package/dist/registry/types.d.ts +65 -23
  576. package/dist/registry/types.d.ts.map +1 -1
  577. package/dist/runtime/__fixtures__/live-scene.d.ts +14 -0
  578. package/dist/runtime/__fixtures__/live-scene.d.ts.map +1 -0
  579. package/dist/runtime/__fixtures__/live-scene.js +64 -0
  580. package/dist/runtime/apply.d.ts +42 -0
  581. package/dist/runtime/apply.d.ts.map +1 -0
  582. package/dist/runtime/apply.js +274 -0
  583. package/dist/runtime/dependencies.d.ts +97 -0
  584. package/dist/runtime/dependencies.d.ts.map +1 -0
  585. package/dist/runtime/dependencies.js +42 -0
  586. package/dist/runtime/ids.d.ts +11 -0
  587. package/dist/runtime/ids.d.ts.map +1 -0
  588. package/dist/runtime/ids.js +80 -0
  589. package/dist/runtime/index.d.ts +14 -0
  590. package/dist/runtime/index.d.ts.map +1 -0
  591. package/dist/runtime/index.js +11 -0
  592. package/dist/runtime/node-queries.d.ts +16 -0
  593. package/dist/runtime/node-queries.d.ts.map +1 -0
  594. package/dist/runtime/node-queries.js +30 -0
  595. package/dist/runtime/patch.d.ts +26 -0
  596. package/dist/runtime/patch.d.ts.map +1 -0
  597. package/dist/runtime/patch.js +165 -0
  598. package/dist/runtime/reader.d.ts +104 -0
  599. package/dist/runtime/reader.d.ts.map +1 -0
  600. package/dist/runtime/reader.js +455 -0
  601. package/dist/runtime/scene-runtime.d.ts +112 -0
  602. package/dist/runtime/scene-runtime.d.ts.map +1 -0
  603. package/dist/runtime/scene-runtime.js +302 -0
  604. package/dist/schema/__fixtures__/node-fixtures.d.ts.map +1 -1
  605. package/dist/schema/__fixtures__/node-fixtures.js +1 -0
  606. package/dist/schema/assembly.d.ts +3 -0
  607. package/dist/schema/assembly.d.ts.map +1 -1
  608. package/dist/schema/assembly.js +13 -0
  609. package/dist/schema/asset-url.d.ts +37 -2
  610. package/dist/schema/asset-url.d.ts.map +1 -1
  611. package/dist/schema/asset-url.js +80 -11
  612. package/dist/schema/base.d.ts +8 -0
  613. package/dist/schema/base.d.ts.map +1 -1
  614. package/dist/schema/base.js +19 -1
  615. package/dist/schema/build-up.d.ts +247 -0
  616. package/dist/schema/build-up.d.ts.map +1 -0
  617. package/dist/schema/build-up.js +83 -0
  618. package/dist/schema/geometry-source.d.ts +80 -0
  619. package/dist/schema/geometry-source.d.ts.map +1 -1
  620. package/dist/schema/geometry-source.js +38 -0
  621. package/dist/schema/index.d.ts +12 -7
  622. package/dist/schema/index.d.ts.map +1 -1
  623. package/dist/schema/index.js +12 -6
  624. package/dist/schema/material.d.ts +5 -0
  625. package/dist/schema/material.d.ts.map +1 -1
  626. package/dist/schema/material.js +6 -0
  627. package/dist/schema/nodes/beam.d.ts +264 -0
  628. package/dist/schema/nodes/beam.d.ts.map +1 -0
  629. package/dist/schema/nodes/beam.js +139 -0
  630. package/dist/schema/nodes/box-vent.d.ts +5 -0
  631. package/dist/schema/nodes/box-vent.d.ts.map +1 -1
  632. package/dist/schema/nodes/cabinet.d.ts +10 -0
  633. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  634. package/dist/schema/nodes/ceiling.d.ts +48 -0
  635. package/dist/schema/nodes/ceiling.d.ts.map +1 -1
  636. package/dist/schema/nodes/ceiling.js +5 -0
  637. package/dist/schema/nodes/chimney.d.ts +10 -0
  638. package/dist/schema/nodes/chimney.d.ts.map +1 -1
  639. package/dist/schema/nodes/column.d.ts +42 -0
  640. package/dist/schema/nodes/column.d.ts.map +1 -1
  641. package/dist/schema/nodes/column.js +11 -1
  642. package/dist/schema/nodes/cupola.d.ts +5 -0
  643. package/dist/schema/nodes/cupola.d.ts.map +1 -1
  644. package/dist/schema/nodes/door.d.ts +54 -3
  645. package/dist/schema/nodes/door.d.ts.map +1 -1
  646. package/dist/schema/nodes/door.js +41 -7
  647. package/dist/schema/nodes/dormer.d.ts +20 -0
  648. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  649. package/dist/schema/nodes/downspout.d.ts +5 -0
  650. package/dist/schema/nodes/downspout.d.ts.map +1 -1
  651. package/dist/schema/nodes/elevator.d.ts +5 -0
  652. package/dist/schema/nodes/elevator.d.ts.map +1 -1
  653. package/dist/schema/nodes/eyebrow-vent.d.ts +5 -0
  654. package/dist/schema/nodes/eyebrow-vent.d.ts.map +1 -1
  655. package/dist/schema/nodes/fence.d.ts +5 -0
  656. package/dist/schema/nodes/fence.d.ts.map +1 -1
  657. package/dist/schema/nodes/guide.d.ts +14 -0
  658. package/dist/schema/nodes/guide.d.ts.map +1 -1
  659. package/dist/schema/nodes/guide.js +2 -0
  660. package/dist/schema/nodes/gutter.d.ts +5 -0
  661. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  662. package/dist/schema/nodes/item.d.ts +71 -0
  663. package/dist/schema/nodes/item.d.ts.map +1 -1
  664. package/dist/schema/nodes/item.js +5 -1
  665. package/dist/schema/nodes/level.d.ts +1 -1
  666. package/dist/schema/nodes/level.d.ts.map +1 -1
  667. package/dist/schema/nodes/opening-types.d.ts +13 -0
  668. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  669. package/dist/schema/nodes/opening-types.js +8 -1
  670. package/dist/schema/nodes/railing-wall.d.ts +112 -0
  671. package/dist/schema/nodes/railing-wall.d.ts.map +1 -0
  672. package/dist/schema/nodes/railing-wall.js +160 -0
  673. package/dist/schema/nodes/ridge-vent.d.ts +5 -0
  674. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  675. package/dist/schema/nodes/roof-segment.d.ts +224 -1
  676. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  677. package/dist/schema/nodes/roof-segment.js +57 -10
  678. package/dist/schema/nodes/roof-types.d.ts +11 -0
  679. package/dist/schema/nodes/roof-types.d.ts.map +1 -1
  680. package/dist/schema/nodes/roof-types.js +6 -0
  681. package/dist/schema/nodes/roof.d.ts +60 -0
  682. package/dist/schema/nodes/roof.d.ts.map +1 -1
  683. package/dist/schema/nodes/roof.js +4 -0
  684. package/dist/schema/nodes/shelf.d.ts +5 -0
  685. package/dist/schema/nodes/shelf.d.ts.map +1 -1
  686. package/dist/schema/nodes/site.d.ts +80 -0
  687. package/dist/schema/nodes/site.d.ts.map +1 -1
  688. package/dist/schema/nodes/site.js +7 -0
  689. package/dist/schema/nodes/skylight.d.ts +10 -0
  690. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  691. package/dist/schema/nodes/slab.d.ts +137 -0
  692. package/dist/schema/nodes/slab.d.ts.map +1 -1
  693. package/dist/schema/nodes/slab.js +3 -0
  694. package/dist/schema/nodes/solar-panel.d.ts +10 -0
  695. package/dist/schema/nodes/solar-panel.d.ts.map +1 -1
  696. package/dist/schema/nodes/stair-segment.d.ts +5 -0
  697. package/dist/schema/nodes/stair-segment.d.ts.map +1 -1
  698. package/dist/schema/nodes/stair-structure.d.ts +69 -0
  699. package/dist/schema/nodes/stair-structure.d.ts.map +1 -0
  700. package/dist/schema/nodes/stair-structure.js +39 -0
  701. package/dist/schema/nodes/stair.d.ts +46 -0
  702. package/dist/schema/nodes/stair.d.ts.map +1 -1
  703. package/dist/schema/nodes/stair.js +3 -0
  704. package/dist/schema/nodes/turbine-vent.d.ts +5 -0
  705. package/dist/schema/nodes/turbine-vent.d.ts.map +1 -1
  706. package/dist/schema/nodes/wall.d.ts +135 -2
  707. package/dist/schema/nodes/wall.d.ts.map +1 -1
  708. package/dist/schema/nodes/wall.js +42 -6
  709. package/dist/schema/nodes/window.d.ts +66 -1
  710. package/dist/schema/nodes/window.d.ts.map +1 -1
  711. package/dist/schema/nodes/window.js +50 -5
  712. package/dist/schema/nodes/zone.d.ts +68 -0
  713. package/dist/schema/nodes/zone.d.ts.map +1 -1
  714. package/dist/schema/nodes/zone.js +32 -0
  715. package/dist/schema/scene-material.d.ts +5 -0
  716. package/dist/schema/scene-material.d.ts.map +1 -1
  717. package/dist/schema/types.d.ts +1079 -4
  718. package/dist/schema/types.d.ts.map +1 -1
  719. package/dist/schema/types.js +2 -0
  720. package/dist/schema/wall-type.d.ts +95 -0
  721. package/dist/schema/wall-type.d.ts.map +1 -0
  722. package/dist/schema/wall-type.js +32 -0
  723. package/dist/services/roof-bearing.d.ts.map +1 -1
  724. package/dist/services/roof-bearing.js +6 -3
  725. package/dist/services/roof-level.d.ts.map +1 -1
  726. package/dist/services/roof-level.js +4 -3
  727. package/dist/services/roof-move.d.ts.map +1 -1
  728. package/dist/services/roof-move.js +13 -7
  729. package/dist/services/storey.d.ts.map +1 -1
  730. package/dist/services/storey.js +13 -8
  731. package/dist/spatial/usage-field/beds.d.ts +51 -0
  732. package/dist/spatial/usage-field/beds.d.ts.map +1 -0
  733. package/dist/spatial/usage-field/beds.js +346 -0
  734. package/dist/spatial/usage-field/blocked.d.ts +28 -0
  735. package/dist/spatial/usage-field/blocked.d.ts.map +1 -0
  736. package/dist/spatial/usage-field/blocked.js +185 -0
  737. package/dist/spatial/usage-field/boxes.d.ts +17 -0
  738. package/dist/spatial/usage-field/boxes.d.ts.map +1 -0
  739. package/dist/spatial/usage-field/boxes.js +82 -0
  740. package/dist/spatial/usage-field/catalogue-shapes.d.ts +3 -0
  741. package/dist/spatial/usage-field/catalogue-shapes.d.ts.map +1 -0
  742. package/dist/spatial/usage-field/catalogue-shapes.js +257 -0
  743. package/dist/spatial/usage-field/catalogue.d.ts +6 -0
  744. package/dist/spatial/usage-field/catalogue.d.ts.map +1 -0
  745. package/dist/spatial/usage-field/catalogue.js +11 -0
  746. package/dist/spatial/usage-field/clash.d.ts +40 -0
  747. package/dist/spatial/usage-field/clash.d.ts.map +1 -0
  748. package/dist/spatial/usage-field/clash.js +187 -0
  749. package/dist/spatial/usage-field/door-stairs.d.ts +18 -0
  750. package/dist/spatial/usage-field/door-stairs.d.ts.map +1 -0
  751. package/dist/spatial/usage-field/door-stairs.js +129 -0
  752. package/dist/spatial/usage-field/entry-way.d.ts +14 -0
  753. package/dist/spatial/usage-field/entry-way.d.ts.map +1 -0
  754. package/dist/spatial/usage-field/entry-way.js +219 -0
  755. package/dist/spatial/usage-field/fences.d.ts +18 -0
  756. package/dist/spatial/usage-field/fences.d.ts.map +1 -0
  757. package/dist/spatial/usage-field/fences.js +253 -0
  758. package/dist/spatial/usage-field/field.d.ts +44 -0
  759. package/dist/spatial/usage-field/field.d.ts.map +1 -0
  760. package/dist/spatial/usage-field/field.js +145 -0
  761. package/dist/spatial/usage-field/findings.d.ts +76 -0
  762. package/dist/spatial/usage-field/findings.d.ts.map +1 -0
  763. package/dist/spatial/usage-field/findings.js +252 -0
  764. package/dist/spatial/usage-field/fixtures.d.ts +18 -0
  765. package/dist/spatial/usage-field/fixtures.d.ts.map +1 -0
  766. package/dist/spatial/usage-field/fixtures.js +160 -0
  767. package/dist/spatial/usage-field/flag.d.ts +10 -0
  768. package/dist/spatial/usage-field/flag.d.ts.map +1 -0
  769. package/dist/spatial/usage-field/flag.js +12 -0
  770. package/dist/spatial/usage-field/floors.d.ts +13 -0
  771. package/dist/spatial/usage-field/floors.d.ts.map +1 -0
  772. package/dist/spatial/usage-field/floors.js +36 -0
  773. package/dist/spatial/usage-field/index.d.ts +7 -0
  774. package/dist/spatial/usage-field/index.d.ts.map +1 -0
  775. package/dist/spatial/usage-field/index.js +5 -0
  776. package/dist/spatial/usage-field/items.d.ts +38 -0
  777. package/dist/spatial/usage-field/items.d.ts.map +1 -0
  778. package/dist/spatial/usage-field/items.js +261 -0
  779. package/dist/spatial/usage-field/labels.d.ts +8 -0
  780. package/dist/spatial/usage-field/labels.d.ts.map +1 -0
  781. package/dist/spatial/usage-field/labels.js +14 -0
  782. package/dist/spatial/usage-field/level-field.d.ts +47 -0
  783. package/dist/spatial/usage-field/level-field.d.ts.map +1 -0
  784. package/dist/spatial/usage-field/level-field.js +96 -0
  785. package/dist/spatial/usage-field/measure.d.ts +324 -0
  786. package/dist/spatial/usage-field/measure.d.ts.map +1 -0
  787. package/dist/spatial/usage-field/measure.js +458 -0
  788. package/dist/spatial/usage-field/obstacles.d.ts +63 -0
  789. package/dist/spatial/usage-field/obstacles.d.ts.map +1 -0
  790. package/dist/spatial/usage-field/obstacles.js +215 -0
  791. package/dist/spatial/usage-field/openings.d.ts +12 -0
  792. package/dist/spatial/usage-field/openings.d.ts.map +1 -0
  793. package/dist/spatial/usage-field/openings.js +162 -0
  794. package/dist/spatial/usage-field/path.d.ts +48 -0
  795. package/dist/spatial/usage-field/path.d.ts.map +1 -0
  796. package/dist/spatial/usage-field/path.js +354 -0
  797. package/dist/spatial/usage-field/pieces.d.ts +27 -0
  798. package/dist/spatial/usage-field/pieces.d.ts.map +1 -0
  799. package/dist/spatial/usage-field/pieces.js +89 -0
  800. package/dist/spatial/usage-field/shapes.d.ts +18 -0
  801. package/dist/spatial/usage-field/shapes.d.ts.map +1 -0
  802. package/dist/spatial/usage-field/shapes.js +92 -0
  803. package/dist/spatial/usage-field/stairs.d.ts +23 -0
  804. package/dist/spatial/usage-field/stairs.d.ts.map +1 -0
  805. package/dist/spatial/usage-field/stairs.js +163 -0
  806. package/dist/spatial/usage-field/support.d.ts +24 -0
  807. package/dist/spatial/usage-field/support.d.ts.map +1 -0
  808. package/dist/spatial/usage-field/support.js +46 -0
  809. package/dist/spatial/usage-field/swings.d.ts +846 -0
  810. package/dist/spatial/usage-field/swings.d.ts.map +1 -0
  811. package/dist/spatial/usage-field/swings.js +427 -0
  812. package/dist/spatial/usage-field/types.d.ts +65 -0
  813. package/dist/spatial/usage-field/types.d.ts.map +1 -0
  814. package/dist/spatial/usage-field/types.js +1 -0
  815. package/dist/spatial/usage-field/walls.d.ts +1057 -0
  816. package/dist/spatial/usage-field/walls.d.ts.map +1 -0
  817. package/dist/spatial/usage-field/walls.js +166 -0
  818. package/dist/spatial/usage-field/way-in.d.ts +26 -0
  819. package/dist/spatial/usage-field/way-in.d.ts.map +1 -0
  820. package/dist/spatial/usage-field/way-in.js +113 -0
  821. package/dist/store/actions/node-actions.d.ts +2124 -1322
  822. package/dist/store/actions/node-actions.d.ts.map +1 -1
  823. package/dist/store/actions/node-actions.js +42 -16
  824. package/dist/store/derived-node-guard.d.ts +10 -2
  825. package/dist/store/derived-node-guard.d.ts.map +1 -1
  826. package/dist/store/derived-node-guard.js +31 -11
  827. package/dist/store/document-settling.d.ts +9 -0
  828. package/dist/store/document-settling.d.ts.map +1 -0
  829. package/dist/store/document-settling.js +22 -0
  830. package/dist/store/history-control.d.ts +19 -10
  831. package/dist/store/history-control.d.ts.map +1 -1
  832. package/dist/store/history-control.js +176 -127
  833. package/dist/store/history-drafts.d.ts.map +1 -1
  834. package/dist/store/history-drafts.js +21 -17
  835. package/dist/store/live-previews.d.ts +9 -0
  836. package/dist/store/live-previews.d.ts.map +1 -0
  837. package/dist/store/live-previews.js +19 -0
  838. package/dist/store/scene-annotations.d.ts +6751 -5151
  839. package/dist/store/scene-annotations.d.ts.map +1 -1
  840. package/dist/store/scene-environment.d.ts +33 -0
  841. package/dist/store/scene-environment.d.ts.map +1 -0
  842. package/dist/store/scene-environment.js +54 -0
  843. package/dist/store/scene-hydration.d.ts.map +1 -1
  844. package/dist/store/scene-hydration.js +41 -30
  845. package/dist/store/use-interactive.d.ts +9 -3
  846. package/dist/store/use-interactive.d.ts.map +1 -1
  847. package/dist/store/use-interactive.js +43 -11
  848. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  849. package/dist/store/use-live-node-overrides.js +3 -0
  850. package/dist/store/use-scene.d.ts +25 -0
  851. package/dist/store/use-scene.d.ts.map +1 -1
  852. package/dist/store/use-scene.js +408 -336
  853. package/dist/systems/document-reconcile.d.ts +40 -0
  854. package/dist/systems/document-reconcile.d.ts.map +1 -0
  855. package/dist/systems/document-reconcile.js +159 -0
  856. package/dist/systems/elevator/elevator-opening-system.d.ts.map +1 -1
  857. package/dist/systems/elevator/elevator-opening-system.js +9 -24
  858. package/dist/systems/fence/guard-layout.d.ts +69 -0
  859. package/dist/systems/fence/guard-layout.d.ts.map +1 -0
  860. package/dist/systems/fence/guard-layout.js +194 -0
  861. package/dist/systems/owned-floor-openings.d.ts +13 -1
  862. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  863. package/dist/systems/owned-floor-openings.js +58 -2
  864. package/dist/systems/reconcile-owned-floor-openings.d.ts +3 -1
  865. package/dist/systems/reconcile-owned-floor-openings.d.ts.map +1 -1
  866. package/dist/systems/reconcile-owned-floor-openings.js +4 -4
  867. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  868. package/dist/systems/roof/roof-elevation-system.js +8 -26
  869. package/dist/systems/roof/roof-elevation.d.ts +16 -1
  870. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  871. package/dist/systems/roof/roof-elevation.js +85 -4
  872. package/dist/systems/roof/roof-footprint.d.ts +42 -1
  873. package/dist/systems/roof/roof-footprint.d.ts.map +1 -1
  874. package/dist/systems/roof/roof-footprint.js +160 -4
  875. package/dist/systems/slab/__fixtures__/floor-step.d.ts +3163 -1934
  876. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  877. package/dist/systems/slab/__fixtures__/raised-room.d.ts +2495 -1249
  878. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  879. package/dist/systems/stair/stair-clearance.d.ts +7 -0
  880. package/dist/systems/stair/stair-clearance.d.ts.map +1 -1
  881. package/dist/systems/stair/stair-clearance.js +31 -11
  882. package/dist/systems/stair/stair-construction.d.ts +8 -3
  883. package/dist/systems/stair/stair-construction.d.ts.map +1 -1
  884. package/dist/systems/stair/stair-construction.js +55 -4
  885. package/dist/systems/stair/stair-opening-preview.d.ts +889 -89
  886. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  887. package/dist/systems/stair/stair-opening-system.d.ts.map +1 -1
  888. package/dist/systems/stair/stair-opening-system.js +18 -34
  889. package/dist/systems/stair/stair-presets.d.ts +36 -0
  890. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  891. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  892. package/dist/systems/stair/stair-rise-query.js +3 -2
  893. package/dist/systems/stair/stair-rise.d.ts.map +1 -1
  894. package/dist/systems/stair/stair-rise.js +6 -0
  895. package/dist/systems/stair/stair-sizing.d.ts +42 -11
  896. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  897. package/dist/systems/stair/stair-sizing.js +10 -1
  898. package/dist/systems/stair/stair-structure.d.ts +277 -0
  899. package/dist/systems/stair/stair-structure.d.ts.map +1 -0
  900. package/dist/systems/stair/stair-structure.js +496 -0
  901. package/dist/systems/wall/wall-assembly.d.ts +84 -6
  902. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  903. package/dist/systems/wall/wall-assembly.js +204 -5
  904. package/dist/systems/wall/wall-finish.d.ts +38 -2
  905. package/dist/systems/wall/wall-finish.d.ts.map +1 -1
  906. package/dist/systems/wall/wall-finish.js +70 -2
  907. package/dist/systems/wall/wall-footprint.js +2 -2
  908. package/dist/systems/wall/wall-merge.d.ts.map +1 -1
  909. package/dist/systems/wall/wall-merge.js +28 -7
  910. package/dist/systems/wall/wall-mitering.d.ts +1 -0
  911. package/dist/systems/wall/wall-mitering.d.ts.map +1 -1
  912. package/dist/systems/wall/wall-mitering.js +152 -52
  913. package/dist/systems/wall/wall-move.d.ts +23 -6
  914. package/dist/systems/wall/wall-move.d.ts.map +1 -1
  915. package/dist/systems/wall/wall-move.js +65 -0
  916. package/dist/systems/wall/wall-top.d.ts +2 -2
  917. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  918. package/dist/systems/wall/wall-top.js +6 -1
  919. package/dist/systems/wall/wall-topology.d.ts +32 -1
  920. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  921. package/dist/systems/wall/wall-topology.js +118 -10
  922. package/dist/systems/wall/wall-trim-profiles.d.ts +12 -0
  923. package/dist/systems/wall/wall-trim-profiles.d.ts.map +1 -0
  924. package/dist/systems/wall/wall-trim-profiles.js +191 -0
  925. package/dist/utils/ensure-scene-openings.d.ts +6523 -4923
  926. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  927. package/dist/utils/floor-piece-adoption.d.ts +5 -0
  928. package/dist/utils/floor-piece-adoption.d.ts.map +1 -1
  929. package/dist/utils/floor-plate-migration.d.ts +1930 -1130
  930. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  931. package/dist/utils/owned-floor-opening-migration.d.ts +888 -88
  932. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  933. package/dist/utils/reconcile-structure-on-load.d.ts +1930 -1130
  934. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  935. package/dist/utils/structure-id.d.ts.map +1 -1
  936. package/dist/utils/structure-id.js +4 -0
  937. package/package.json +22 -5
  938. package/dist/lib/generic-foundation.d.ts +0 -40
  939. package/dist/lib/generic-foundation.d.ts.map +0 -1
  940. package/dist/lib/generic-foundation.js +0 -200
@@ -6,4 +6,14 @@ export type ProjectFileToolExecutor = (request: {
6
6
  signal?: AbortSignal;
7
7
  }) => Promise<unknown>;
8
8
  export declare function executeProjectFileTool(name: string, raw: unknown, execute: ProjectFileToolExecutor, signal?: AbortSignal): Promise<unknown>;
9
+ /**
10
+ * A project file's bytes, for a caller who may edit the project: `author_scene`'s payload by
11
+ * reference. Refuses a missing file or one over maxBytes.
12
+ */
13
+ export type ProjectFileReader = (request: {
14
+ projectId?: string;
15
+ fileId: string;
16
+ maxBytes: number;
17
+ signal?: AbortSignal;
18
+ }) => Promise<Uint8Array>;
9
19
  //# sourceMappingURL=project-files.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-files.d.ts","sourceRoot":"","sources":["../../src/agent-operations/project-files.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGpG,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,mBAAmB,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtB,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,WAAW,oBA0BrB"}
1
+ {"version":3,"file":"project-files.d.ts","sourceRoot":"","sources":["../../src/agent-operations/project-files.ts"],"names":[],"mappings":"AACA,OAAO,EAA+B,KAAK,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAGpG,MAAM,MAAM,uBAAuB,GAAG,CAAC,OAAO,EAAE;IAC9C,IAAI,EAAE,mBAAmB,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;AAEtB,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,uBAAuB,EAChC,MAAM,CAAC,EAAE,WAAW,oBA0BrB;AAED;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB,KAAK,OAAO,CAAC,UAAU,CAAC,CAAA"}
@@ -0,0 +1,41 @@
1
+ import { type CirculationGeometryReason } from './circulation-geometry.js';
2
+ import { type CirculationGraph, type CirculationIssue } from './circulation-graph.js';
3
+ import type { SceneNodes } from './types.js';
4
+ export { floorSpaceReader, type Space, wallSidesReader } from './circulation-spaces.js';
5
+ /** Why a level is or is not reached from an entrance; null when it is. */
6
+ export type CirculationLevelReason = 'no_connection' | 'no_landing' | 'no_entrance' | 'not_measured';
7
+ /** Whether a level can be reached from an entrance: true, false, or null where it cannot be measured. */
8
+ export type CirculationLevel = {
9
+ levelId: string;
10
+ name: string;
11
+ buildingId: string | null;
12
+ reachable: boolean | null;
13
+ reason: CirculationLevelReason | null;
14
+ spaces: number;
15
+ reachedSpaces: number;
16
+ };
17
+ export type CirculationReach = {
18
+ /** The graph the reading measures: raw, or without the geometry that cannot be measured. */
19
+ graph: CirculationGraph;
20
+ geometry: CirculationGeometryReason[];
21
+ /** A multiple-building, tilted or floorless scene has no frame to measure a route in. */
22
+ frameLimited: boolean;
23
+ entrance: boolean;
24
+ reached: Set<string>;
25
+ /** Graph nodes whose route is not measurable: neither reached nor proven cut off. */
26
+ unmeasured: Set<string>;
27
+ /** Per level that holds a space to reach. */
28
+ levels: CirculationLevel[];
29
+ /** Level ids where a flight or lift serves the level but arrives at no floor. */
30
+ landingTrouble: Set<string>;
31
+ /** Spaces behind a door whose approach from outside cannot be measured. */
32
+ behindUnmeasuredEntrance: Set<string>;
33
+ };
34
+ /**
35
+ * The one reading of reach that verify_scene and the circulation findings share: what is reached from
36
+ * any entrance, what is unmeasured, and, per level, whether an entrance reaches it at all.
37
+ */
38
+ export declare function circulationReach(nodes: SceneNodes, rawGraph: CirculationGraph, geometry?: CirculationGeometryReason[]): CirculationReach;
39
+ export declare function circulationGraphIssues(nodes: SceneNodes, rawGraph: CirculationGraph, reach?: CirculationReach): CirculationIssue[];
40
+ export declare function circulationDiagnostics(nodes: SceneNodes): CirculationIssue[];
41
+ //# sourceMappingURL=reachability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reachability.d.ts","sourceRoot":"","sources":["../../src/agent-operations/reachability.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,yBAAyB,EAI/B,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAMtB,MAAM,qBAAqB,CAAA;AAE5B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,EAAE,gBAAgB,EAAE,KAAK,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AA4DpF,0EAA0E;AAC1E,MAAM,MAAM,sBAAsB,GAAG,eAAe,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,CAAA;AAEpG,yGAAyG;AACzG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAA;IACzB,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAA;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4FAA4F;IAC5F,KAAK,EAAE,gBAAgB,CAAA;IACvB,QAAQ,EAAE,yBAAyB,EAAE,CAAA;IACrC,yFAAyF;IACzF,YAAY,EAAE,OAAO,CAAA;IACrB,QAAQ,EAAE,OAAO,CAAA;IACjB,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACpB,qFAAqF;IACrF,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACvB,6CAA6C;IAC7C,MAAM,EAAE,gBAAgB,EAAE,CAAA;IAC1B,iFAAiF;IACjF,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC3B,2EAA2E;IAC3E,wBAAwB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACtC,CAAA;AAYD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,GAAE,yBAAyB,EAAgD,GAClF,gBAAgB,CAoElB;AAKD,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,GAAE,gBAAoD,GAC1D,gBAAgB,EAAE,CAsEpB;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAE5E"}
@@ -0,0 +1,199 @@
1
+ import { resolveBuildingForLevel, resolveLevelId } from '../lib/node-ancestry.js';
2
+ import { getLevelAbove } from '../services/storey.js';
3
+ import { circulationGeometryReasons, measuredCirculationGraph, unmeasuredRouteIds, } from './circulation-geometry.js';
4
+ import { buildCirculationGraph, circulationLinks, exteriorEntranceEdges, nodeName, reachedFrom, } from './circulation-graph.js';
5
+ import { queryNodes } from './scene-queries.js';
6
+ export { floorSpaceReader, wallSidesReader } from './circulation-spaces.js';
7
+ const listed = (names) => names.length > 8
8
+ ? `${names.slice(0, 8).join(', ')} and ${names.length - 8} more`
9
+ : names.join(', ');
10
+ function apartmentIssues(nodes, graph, entrance, rawGraph, cutOff) {
11
+ const links = circulationLinks(graph);
12
+ const groundIds = new Set(graph.floors.filter((floor) => floor.ground).map((floor) => floor.id));
13
+ const starts = entrance
14
+ ? ['outside']
15
+ : [...graph.nodes.values()]
16
+ .filter((node) => node.levelId && groundIds.has(node.levelId) && !node.apartment)
17
+ .map((node) => node.id);
18
+ const everywhere = reachedFrom(links, starts);
19
+ const shared = reachedFrom(links, starts, (id) => !graph.nodes.get(id)?.apartment);
20
+ const rawLinks = circulationLinks(rawGraph);
21
+ const unmeasured = unmeasuredRouteIds(reachedFrom(rawLinks, starts), everywhere);
22
+ const unmeasuredShared = unmeasuredRouteIds(reachedFrom(rawLinks, starts, (id) => !rawGraph.nodes.get(id)?.apartment), shared);
23
+ const unreachable = [], through = [];
24
+ for (const unit of queryNodes(nodes, { type: 'unit' })) {
25
+ if ((unit.kind ?? 'apartment') !== 'apartment')
26
+ continue;
27
+ const keys = [...graph.nodes.values()]
28
+ .filter((node) => node.apartment === unit.id)
29
+ .map((node) => node.id);
30
+ if (!keys.length)
31
+ continue;
32
+ if (!keys.some((id) => everywhere.has(id))) {
33
+ const onCutOffLevels = keys.every((id) => cutOff.has(graph.nodes.get(id)?.levelId ?? ''));
34
+ if (!(onCutOffLevels || keys.some((id) => unmeasured.has(id))))
35
+ unreachable.push(unit.id);
36
+ }
37
+ else if (!keys.some((id) => shared.has(id) || unmeasuredShared.has(id)))
38
+ through.push(unit.id);
39
+ }
40
+ const issues = [];
41
+ if (unreachable.length)
42
+ issues.push({
43
+ type: 'apartment_unreachable',
44
+ message: `${unreachable.length} apartment${unreachable.length === 1 ? '' : 's'} cannot be reached from ${entrance ? 'the entrance' : "the ground floor's corridors"}: ${listed(unreachable.map((id) => nodeName(nodes, id)))}.`,
45
+ nodeIds: unreachable,
46
+ });
47
+ if (through.length)
48
+ issues.push({
49
+ type: 'reached_through_apartment',
50
+ message: `${through.length} apartment${through.length === 1 ? ' is' : 's are'} reached only by crossing another apartment: ${listed(through.map((id) => nodeName(nodes, id)))}.`,
51
+ nodeIds: through,
52
+ });
53
+ return issues;
54
+ }
55
+ const FRAME_REASONS = ['multiple_buildings', 'tilted_buildings', 'floor_missing'];
56
+ function stairLevelIds(nodes, id) {
57
+ const stair = nodes[id];
58
+ if (stair?.type !== 'stair')
59
+ return [];
60
+ const foot = stair.fromLevelId ?? resolveLevelId(stair, nodes);
61
+ const head = stair.toLevelId ?? (foot ? getLevelAbove(foot, nodes)?.id : undefined);
62
+ return [foot, head].filter((levelId) => typeof levelId === 'string');
63
+ }
64
+ /**
65
+ * The one reading of reach that verify_scene and the circulation findings share: what is reached from
66
+ * any entrance, what is unmeasured, and, per level, whether an entrance reaches it at all.
67
+ */
68
+ export function circulationReach(nodes, rawGraph, geometry = circulationGeometryReasons(nodes, rawGraph)) {
69
+ const frameLimited = geometry.some((reason) => FRAME_REASONS.includes(reason.code));
70
+ const graph = frameLimited ? rawGraph : measuredCirculationGraph(nodes, rawGraph, geometry);
71
+ const entrance = exteriorEntranceEdges(graph).length > 0;
72
+ const reached = reachedFrom(circulationLinks(graph), entrance ? ['outside'] : []);
73
+ const rawLinks = circulationLinks(rawGraph);
74
+ const noRoute = !entrance && geometry.length > 0;
75
+ const behindUnmeasuredEntrance = reachedFrom(rawLinks, rawGraph.unmeasuredEntrances
76
+ .map((unmeasured) => unmeasured.spaceId)
77
+ .filter((id) => rawGraph.nodes.has(id)), (id) => id !== 'outside');
78
+ const unmeasured = new Set([
79
+ ...unmeasuredRouteIds(reachedFrom(rawLinks, ['outside']), reached),
80
+ ...[...behindUnmeasuredEntrance].filter((id) => !reached.has(id)),
81
+ ...(noRoute ? [...rawGraph.nodes.keys()].filter((id) => !reached.has(id)) : []),
82
+ ]);
83
+ const landingTrouble = new Set();
84
+ for (const issue of rawGraph.issues) {
85
+ if (issue.type !== 'stair_has_no_landing' && issue.type !== 'lift_door_blocked')
86
+ continue;
87
+ for (const id of issue.levelIds ?? [])
88
+ landingTrouble.add(id);
89
+ for (const nodeId of issue.nodeIds)
90
+ for (const id of stairLevelIds(nodes, nodeId))
91
+ landingTrouble.add(id);
92
+ }
93
+ const levels = rawGraph.floors.flatMap((floor) => {
94
+ const spaces = [...rawGraph.nodes.values()].filter((node) => node.levelId === floor.id &&
95
+ (node.kind === 'room' || node.kind === 'zone' || node.kind === 'floor') &&
96
+ !rawGraph.nonSpaces.has(node.id));
97
+ if (!spaces.length)
98
+ return [];
99
+ const reachedSpaces = spaces.filter((node) => reached.has(node.id)).length;
100
+ const lost = (node) => unmeasured.has(node.id) || !graph.nodes.has(node.id);
101
+ const [reachable, reason] = frameLimited
102
+ ? [null, 'not_measured']
103
+ : !entrance
104
+ ? [null, 'no_entrance']
105
+ : reachedSpaces
106
+ ? [true, null]
107
+ : spaces.some(lost)
108
+ ? [null, 'not_measured']
109
+ : [false, landingTrouble.has(floor.id) ? 'no_landing' : 'no_connection'];
110
+ return [
111
+ {
112
+ levelId: floor.id,
113
+ name: floor.name,
114
+ buildingId: resolveBuildingForLevel(floor.id, nodes) ?? null,
115
+ reachable,
116
+ reason,
117
+ spaces: spaces.length,
118
+ reachedSpaces,
119
+ },
120
+ ];
121
+ });
122
+ return {
123
+ graph,
124
+ geometry,
125
+ frameLimited,
126
+ entrance,
127
+ reached,
128
+ unmeasured,
129
+ levels,
130
+ landingTrouble,
131
+ behindUnmeasuredEntrance,
132
+ };
133
+ }
134
+ const levelFact = (name, building) => `${name} of ${building} has no walkable stair or lift to it from an entrance`;
135
+ export function circulationGraphIssues(nodes, rawGraph, reach = circulationReach(nodes, rawGraph)) {
136
+ const issues = [...rawGraph.issues];
137
+ const { geometry } = reach;
138
+ issues.push(...geometry.map((reason) => ({
139
+ type: 'circulation_not_measured',
140
+ message: reason.message,
141
+ nodeIds: reason.nodeIds,
142
+ reasonCode: reason.code,
143
+ })));
144
+ if (reach.frameLimited)
145
+ return issues;
146
+ const { graph, entrance, reached, unmeasured } = reach;
147
+ if (!entrance && geometry.length)
148
+ return issues;
149
+ const ground = graph.floors.find((floor) => floor.ground);
150
+ const spaces = [...graph.nodes.values()].filter((node) => (node.kind === 'room' || node.kind === 'zone' || node.kind === 'floor') &&
151
+ !graph.nonSpaces.has(node.id));
152
+ if (!entrance && ground && spaces.length)
153
+ issues.push({
154
+ type: 'no_exterior_door',
155
+ message: `No door, open edge or entrance steps connect outside to an interior space on ${ground.name}: the building cannot be entered.`,
156
+ nodeIds: [ground.id],
157
+ levelIds: [ground.id],
158
+ });
159
+ // A level no entrance reaches is one fact about the level; its rooms are not raised one by one.
160
+ const cutOff = new Set(reach.levels.filter((level) => level.reachable === false).map((level) => level.levelId));
161
+ for (const level of reach.levels) {
162
+ if (level.reachable !== false)
163
+ continue;
164
+ const building = (level.buildingId && nodes[level.buildingId]?.name) || 'the building';
165
+ issues.push({
166
+ type: 'missing_stair',
167
+ message: `${levelFact(level.name, building)}.`,
168
+ nodeIds: [level.levelId],
169
+ levelIds: [level.levelId],
170
+ ...(level.reason ? { reasonCode: level.reason } : {}),
171
+ });
172
+ }
173
+ const rooms = spaces.filter((node) => !reached.has(node.id) &&
174
+ (!node.apartment || unmeasured.has(node.id)) &&
175
+ !(cutOff.has(node.levelId ?? '') && !unmeasured.has(node.id)));
176
+ for (const room of rooms) {
177
+ const limited = unmeasured.has(room.id);
178
+ const entryUnmeasured = limited && reach.behindUnmeasuredEntrance.has(room.id);
179
+ issues.push({
180
+ type: limited ? 'circulation_not_measured' : 'room_unreachable',
181
+ message: entryUnmeasured
182
+ ? `${room.name} access is not measured because the door that enters it opens high above the modeled ground.`
183
+ : limited
184
+ ? `${room.name} access is not measured because its route crosses unmeasured walking geometry.`
185
+ : `${room.name} cannot be reached from outside through modeled doors, openings, open edges, stairs or lifts.`,
186
+ ...(limited
187
+ ? { reasonCode: entryUnmeasured ? 'entrance_not_measured' : 'route_not_measured' }
188
+ : {}),
189
+ nodeIds: [room.sourceId ?? room.levelId ?? room.id],
190
+ levelIds: room.levelId ? [room.levelId] : [],
191
+ spaceId: room.id,
192
+ });
193
+ }
194
+ issues.push(...apartmentIssues(nodes, graph, entrance, rawGraph, cutOff));
195
+ return issues;
196
+ }
197
+ export function circulationDiagnostics(nodes) {
198
+ return circulationGraphIssues(nodes, buildCirculationGraph(nodes));
199
+ }
@@ -0,0 +1,60 @@
1
+ import type { SceneMaterial } from '../schema/index.js';
2
+ import { type RoomReading } from './room-readings.js';
3
+ import type { SceneNodes } from './types.js';
4
+ import { type WallFaceReading } from './wall-face-defaults.js';
5
+ /**
6
+ * What the rooms of a scene owe, checked at the end of a turn: a wet room with no tile, rooms with no
7
+ * skirting, a piece hung on the face of the wall that looks into another room than the one it names.
8
+ * Like the coherence checks they guide and never forbid: each says what the scene shows and leaves
9
+ * the maker to fix it or keep it. A finding fires only where the nodes can be read to the end (an
10
+ * inline material, a script-built face or a scene ref with no scene materials is `unknown`, and
11
+ * unknown fires nothing).
12
+ */
13
+ export declare const ROOM_CHECK_CODES: readonly ['room_wet_untiled', 'rooms_no_skirting', 'rooms_skirting_partial', 'wall_faces_default', 'rooms_floors_default', 'room_no_floor'];
14
+ export type RoomCheckCode = (typeof ROOM_CHECK_CODES)[number];
15
+ export type RoomCheckIssue = {
16
+ type: RoomCheckCode;
17
+ message: string;
18
+ severity: 'warning';
19
+ nodeIds: string[];
20
+ };
21
+ /**
22
+ * A wet room (bathroom, shower room, WC, laundry) whose walls are not tiled as a wet room is: to
23
+ * `WET_TILED_TO_M` on the walls its fixtures stand against, and to the ceiling around its shower. A
24
+ * tiled floor does not make up for walls that splash.
25
+ */
26
+ export declare function wetRoomIssues(rooms: readonly RoomReading[]): RoomCheckIssue[];
27
+ /**
28
+ * Skirting, from the faces of a room's walls: the rooms a finished floor meets in view (bedrooms,
29
+ * living and dining rooms, offices, hallways) that have none on any face. When some rooms have it
30
+ * the finding names the ones left bare; when none has it, it is about the scene, and only for a
31
+ * house of at least `HOUSE_MIN_ROOMS` such rooms. Rooms with no known wall face are not read.
32
+ */
33
+ export declare function skirtingIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
34
+ /**
35
+ * Skirting on part of a room's faces: a room the skirting is owed in (see `skirtingIssue`) that has it
36
+ * on some of the wall faces looking in and not on the others. A room with none is `skirtingIssue`'s.
37
+ */
38
+ export declare function partialSkirtingIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
39
+ /** Rooms with no floor under them: no plate of their own, no drawn slab they were taken from, and slabs over less than half their footprint. */
40
+ export declare function noFloorIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
41
+ /**
42
+ * The floors of the indoor rooms that show the default, as one finding that names the rooms and
43
+ * says how many other rooms show a finish. Fewer than `HOUSE_MIN_ROOMS` rooms all at the default
44
+ * are a test or a demonstration and say nothing. A ceiling at its default is normal and is not
45
+ * read; the wall faces are read apart (`wallFaceDefaultIssue`): by wall, not through a room.
46
+ */
47
+ export declare function floorDefaultIssue(rooms: readonly RoomReading[]): RoomCheckIssue | null;
48
+ /**
49
+ * The wall faces nobody gave a finish, read from the walls themselves (`readWallFaces`): one finding
50
+ * that names each wall with its default faces, how long they are, where they run in plan and which
51
+ * room they face (or stand inside), and how many of the faces read show the default. The walls of a
52
+ * scene of fewer than `HOUSE_MIN_ROOMS` rooms whose faces are all at the default are a test or a
53
+ * demonstration and say nothing.
54
+ */
55
+ export declare function wallFaceDefaultIssue(read: WallFaceReading, roomsRead: number): RoomCheckIssue | null;
56
+ /** Every room check on a scene. */
57
+ export declare function roomCheckIssues(nodes: SceneNodes, options?: {
58
+ materials?: Readonly<Record<string, SceneMaterial>>;
59
+ }): RoomCheckIssue[];
60
+ //# sourceMappingURL=room-checks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-checks.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-checks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAC9C,OAAO,EAAE,KAAK,WAAW,EAAa,MAAM,iBAAiB,CAAA;AAE7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEhG;;;;;;;GAOG;AAEH,eAAO,MAAM,gBAAgB,YAC3B,kBAAkB,EAClB,mBAAmB,EACnB,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,CACP,CAAA;AACV,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7D,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,SAAS,CAAA;IACnB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAeD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,EAAE,CA6B7E;AAQD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CAsBlF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CAkBzF;AAED,gJAAgJ;AAChJ,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CASjF;AAID;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,cAAc,GAAG,IAAI,CAetF;AA4BD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,GAChB,cAAc,GAAG,IAAI,CAiBvB;AAED,mCAAmC;AACnC,wBAAgB,eAAe,CAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;CAAO,GACpE,cAAc,EAAE,CAmBlB"}
@@ -0,0 +1,226 @@
1
+ import { isSkirtedRoomUse, isWetRoomUse } from '../building/room-use.js';
2
+ import { readRooms } from './room-readings.js';
3
+ import { WET_TILED_TO_M } from './room-wet.js';
4
+ import { registerSceneCheck } from './verify-scene.js';
5
+ import { readWallFaces } from './wall-face-defaults.js';
6
+ /**
7
+ * What the rooms of a scene owe, checked at the end of a turn: a wet room with no tile, rooms with no
8
+ * skirting, a piece hung on the face of the wall that looks into another room than the one it names.
9
+ * Like the coherence checks they guide and never forbid: each says what the scene shows and leaves
10
+ * the maker to fix it or keep it. A finding fires only where the nodes can be read to the end (an
11
+ * inline material, a script-built face or a scene ref with no scene materials is `unknown`, and
12
+ * unknown fires nothing).
13
+ */
14
+ export const ROOM_CHECK_CODES = [
15
+ 'room_wet_untiled',
16
+ 'rooms_no_skirting',
17
+ 'rooms_skirting_partial',
18
+ 'wall_faces_default',
19
+ 'rooms_floors_default',
20
+ 'room_no_floor',
21
+ ];
22
+ const WORDS_SHOWN = 6;
23
+ /** Names as a sentence lists them: the first few, then how many more. */
24
+ const listed = (names) => names.length <= WORDS_SHOWN
25
+ ? names.join(', ')
26
+ : `${names.slice(0, WORDS_SHOWN).join(', ')} and ${names.length - WORDS_SHOWN} more`;
27
+ const finishes = (room) => `its floor is ${room.floor.finish} and its walls ${room.walls.finishes.join(', ') || 'unfinished'}`;
28
+ const metres = (value) => `${value.toFixed(2)} m`;
29
+ /**
30
+ * A wet room (bathroom, shower room, WC, laundry) whose walls are not tiled as a wet room is: to
31
+ * `WET_TILED_TO_M` on the walls its fixtures stand against, and to the ceiling around its shower. A
32
+ * tiled floor does not make up for walls that splash.
33
+ */
34
+ export function wetRoomIssues(rooms) {
35
+ return rooms.flatMap((room) => {
36
+ const wet = room.wet;
37
+ if (wet?.verdict !== 'no' || !isWetRoomUse(room.use))
38
+ return [];
39
+ const where = wet.byFixtures ? 'the walls its fixtures stand against' : 'its walls';
40
+ const bareShower = wet.showers.find((shower) => shower.full === 'no');
41
+ const [lead, fix] = wet.tiled === 'no'
42
+ ? [
43
+ !wet.anyTile
44
+ ? `shows no tile on ${where}`
45
+ : wet.tiledTo && wet.tiledTo > 0.05
46
+ ? `has tile up to ${metres(wet.tiledTo)} on ${where}`
47
+ : `has tile on part of ${where}, along less than most of their length`,
48
+ `tile ${where} to ${metres(WET_TILED_TO_M)}`,
49
+ ]
50
+ : [
51
+ `is tiled to ${metres(WET_TILED_TO_M)} but not to the ceiling around its shower (${bareShower?.name})`,
52
+ `tile the walls around ${bareShower?.name} to the ceiling`,
53
+ ];
54
+ return [
55
+ {
56
+ type: 'room_wet_untiled',
57
+ message: `${room.name} (${room.use}, ${room.levelName}) ${lead}: ${finishes(room)}. A wet room is usually tiled to ${metres(WET_TILED_TO_M)} on the walls its fixtures stand against and to the ceiling around its shower, whatever its floor; ${fix}, or keep the finish if it is intended.`,
58
+ severity: 'warning',
59
+ nodeIds: [room.id],
60
+ },
61
+ ];
62
+ });
63
+ }
64
+ /**
65
+ * Fewer rooms than this are a room or two, not a house: bare wall bases there say nothing of a
66
+ * finishing recipe, and a scene of one room is mostly a test or a demonstration.
67
+ */
68
+ const HOUSE_MIN_ROOMS = 3;
69
+ /**
70
+ * Skirting, from the faces of a room's walls: the rooms a finished floor meets in view (bedrooms,
71
+ * living and dining rooms, offices, hallways) that have none on any face. When some rooms have it
72
+ * the finding names the ones left bare; when none has it, it is about the scene, and only for a
73
+ * house of at least `HOUSE_MIN_ROOMS` such rooms. Rooms with no known wall face are not read.
74
+ */
75
+ export function skirtingIssue(rooms) {
76
+ const bare = rooms.filter((room) => isSkirtedRoomUse(room.use) && room.skirting.faces > 0 && !room.skirting.withSkirting);
77
+ if (!bare.length)
78
+ return null;
79
+ const skirted = rooms.filter((room) => room.skirting.withSkirting > 0);
80
+ const nodeIds = bare.map((room) => room.id);
81
+ if (!skirted.length)
82
+ return bare.length < HOUSE_MIN_ROOMS
83
+ ? null
84
+ : {
85
+ type: 'rooms_no_skirting',
86
+ message: `No room of the scene has skirting: ${listed(bare.map((room) => room.name))} (${bare.length}) show bare wall bases. Skirting is the skirting field of the wall: set it on the walls of these rooms, or keep the bare bases if they are intended.`,
87
+ severity: 'warning',
88
+ nodeIds,
89
+ };
90
+ return {
91
+ type: 'rooms_no_skirting',
92
+ message: `${listed(bare.map((room) => room.name))} have no skirting while ${listed(skirted.map((room) => room.name))} do. Skirting is the skirting field of the wall: set it on the walls of these rooms, or keep them bare if that is intended.`,
93
+ severity: 'warning',
94
+ nodeIds,
95
+ };
96
+ }
97
+ /**
98
+ * Skirting on part of a room's faces: a room the skirting is owed in (see `skirtingIssue`) that has it
99
+ * on some of the wall faces looking in and not on the others. A room with none is `skirtingIssue`'s.
100
+ */
101
+ export function partialSkirtingIssue(rooms) {
102
+ const partial = rooms.filter((room) => isSkirtedRoomUse(room.use) &&
103
+ room.skirting.withSkirting > 0 &&
104
+ room.skirting.withSkirting < room.skirting.faces);
105
+ if (!partial.length)
106
+ return null;
107
+ return {
108
+ type: 'rooms_skirting_partial',
109
+ message: `Skirting is on part of the wall faces of ${listed(partial.map((room) => `${room.name} (${room.skirting.withSkirting} of ${room.skirting.faces} faces)`))}: ${plural(partial.length, 'room')} of the ${plural(rooms.filter((room) => isSkirtedRoomUse(room.use)).length, 'room')} that owe it.`,
110
+ severity: 'warning',
111
+ nodeIds: partial.map((room) => room.id),
112
+ };
113
+ }
114
+ /** Rooms with no floor under them: no plate of their own, no drawn slab they were taken from, and slabs over less than half their footprint. */
115
+ export function noFloorIssue(rooms) {
116
+ const bare = rooms.filter((room) => room.indoor && !room.floor.held);
117
+ if (!bare.length)
118
+ return null;
119
+ return {
120
+ type: 'room_no_floor',
121
+ message: `No floor plate or slab is under ${listed(bare.map((room) => `${room.name} (${room.levelName})`))}: slabs cover less than half of ${bare.length === 1 ? 'its footprint' : 'each footprint'}.`,
122
+ severity: 'warning',
123
+ nodeIds: bare.map((room) => room.id),
124
+ };
125
+ }
126
+ const plural = (count, noun) => `${count} ${noun}${count === 1 ? '' : 's'}`;
127
+ /**
128
+ * The floors of the indoor rooms that show the default, as one finding that names the rooms and
129
+ * says how many other rooms show a finish. Fewer than `HOUSE_MIN_ROOMS` rooms all at the default
130
+ * are a test or a demonstration and say nothing. A ceiling at its default is normal and is not
131
+ * read; the wall faces are read apart (`wallFaceDefaultIssue`): by wall, not through a room.
132
+ */
133
+ export function floorDefaultIssue(rooms) {
134
+ const indoor = rooms.filter((room) => room.indoor);
135
+ const bare = indoor.filter((room) => room.floor.atDefault);
136
+ if (!bare.length || (bare.length === indoor.length && indoor.length < HOUSE_MIN_ROOMS))
137
+ return null;
138
+ return {
139
+ type: 'rooms_floors_default',
140
+ message: `Floors at the default, no finish written for them: ${listed(bare.map((room) => room.name))}${bare.length === indoor.length
141
+ ? ` (all ${plural(indoor.length, 'room')} read)`
142
+ : `; the other ${plural(indoor.length - bare.length, 'room')} read show a finish`}.`,
143
+ severity: 'warning',
144
+ nodeIds: bare.map((room) => room.id),
145
+ };
146
+ }
147
+ const two = (value) => value.toFixed(2);
148
+ const spot = (point) => `${point[0]}, ${point[1]}`;
149
+ /** Where a default face is, as the finding says it: the rooms it faces, or the room its wall stands in. */
150
+ const placeOf = (face) => face.facing.length
151
+ ? `facing ${listed(face.facing)}`
152
+ : face.standsIn.length
153
+ ? `inside ${listed(face.standsIn)}`
154
+ : 'with no room on that side';
155
+ /** One wall's default faces as a clause: both faces together when they are alike, else each face. */
156
+ function wallClause(faces) {
157
+ const [one] = faces;
158
+ const alike = faces.length === 2 &&
159
+ Math.abs(faces[0].metres - faces[1].metres) < 0.01 &&
160
+ placeOf(faces[0]) === placeOf(faces[1]);
161
+ const how = alike
162
+ ? `both faces ${two(faces[0].metres)} m ${placeOf(faces[0])}`
163
+ : faces.map((face) => `face ${face.face} ${two(face.metres)} m ${placeOf(face)}`).join(', ');
164
+ const first = faces.reduce((a, b) => (b.stretches[0][0] < a.stretches[0][0] ? b : a));
165
+ const last = faces.reduce((a, b) => (b.stretches.at(-1)[1] > a.stretches.at(-1)[1] ? b : a));
166
+ return `“${one.wallName}” (${one.levelName}): ${how}, from ${spot(first.from)} to ${spot(last.to)}`;
167
+ }
168
+ /**
169
+ * The wall faces nobody gave a finish, read from the walls themselves (`readWallFaces`): one finding
170
+ * that names each wall with its default faces, how long they are, where they run in plan and which
171
+ * room they face (or stand inside), and how many of the faces read show the default. The walls of a
172
+ * scene of fewer than `HOUSE_MIN_ROOMS` rooms whose faces are all at the default are a test or a
173
+ * demonstration and say nothing.
174
+ */
175
+ export function wallFaceDefaultIssue(read, roomsRead) {
176
+ if (!read.defaults.length)
177
+ return null;
178
+ const bare = new Set(read.defaults.map((face) => `${face.wallId}/${face.face}`)).size;
179
+ if (bare >= read.faces && roomsRead < HOUSE_MIN_ROOMS)
180
+ return null;
181
+ const byWall = new Map();
182
+ for (const face of read.defaults)
183
+ byWall.set(face.wallId, [...(byWall.get(face.wallId) ?? []), face]);
184
+ const metres = read.defaults.reduce((sum, face) => sum + face.metres, 0);
185
+ const total = (faces) => Math.round(faces.reduce((sum, face) => sum + face.metres, 0) * 100);
186
+ const longest = [...byWall.values()].sort((p, q) => total(q) - total(p));
187
+ return {
188
+ type: 'wall_faces_default',
189
+ message: `Wall faces at the default, no finish written for them: ${listed(longest.map(wallClause))}; ${bare} of ${plural(read.faces, 'wall face')} read (${metres.toFixed(1)} of ${read.metres.toFixed(1)} m) show the default.`,
190
+ severity: 'warning',
191
+ nodeIds: [...byWall.keys()],
192
+ };
193
+ }
194
+ /** Every room check on a scene. */
195
+ export function roomCheckIssues(nodes, options = {}) {
196
+ const rooms = readRooms(nodes, { materials: options.materials });
197
+ const wallFaces = wallFaceDefaultIssue(readWallFaces(nodes), rooms.filter((room) => room.indoor).length);
198
+ if (!rooms.length)
199
+ return wallFaces ? [wallFaces] : [];
200
+ const skirting = skirtingIssue(rooms);
201
+ const partial = partialSkirtingIssue(rooms);
202
+ const noFloor = noFloorIssue(rooms);
203
+ const floors = floorDefaultIssue(rooms);
204
+ return [
205
+ ...wetRoomIssues(rooms),
206
+ ...(skirting ? [skirting] : []),
207
+ ...(partial ? [partial] : []),
208
+ ...(noFloor ? [noFloor] : []),
209
+ ...(wallFaces ? [wallFaces] : []),
210
+ ...(floors ? [floors] : []),
211
+ ];
212
+ }
213
+ registerSceneCheck({
214
+ name: 'room checks',
215
+ order: 70,
216
+ run: (nodes, _input, context) => {
217
+ try {
218
+ return roomCheckIssues(nodes, { materials: context?.materials });
219
+ }
220
+ catch {
221
+ // A scene the readers cannot walk (a wall stored without its start) is the schema check's to
222
+ // report, not a reason for verify_scene to fail.
223
+ return [];
224
+ }
225
+ },
226
+ });
@@ -0,0 +1,30 @@
1
+ import type { WallFace, WallNode, ZoneNode } from '../schema/index.js';
2
+ import type { SceneNodes } from './types.js';
3
+ /**
4
+ * A stretch of one face of one wall that a room stands on: the unit every room-level wall write
5
+ * and read works in. `u0..u1` are metres from the wall's start along its reference line (along the
6
+ * chord for a curved wall), the coordinates a face's paint regions use; `whole` is a stretch that
7
+ * runs the face's full length, so a region over it can leave `u` unbounded and follow the wall when
8
+ * it is lengthened.
9
+ */
10
+ export type RoomWallFace = {
11
+ wallId: string;
12
+ face: WallFace;
13
+ t0: number;
14
+ t1: number;
15
+ u0: number;
16
+ u1: number;
17
+ /** The wall's reference length (its chord), metres. */
18
+ length: number;
19
+ whole: boolean;
20
+ curved: boolean;
21
+ };
22
+ /** The walls that bound a room and carry a finish: its boundary walls, curtain walls left out. */
23
+ export declare function roomBoundaryWalls(nodes: SceneNodes, zone: ZoneNode): WallNode[];
24
+ /**
25
+ * The faces that look into a room, a stretch each, in the order of the room's boundary walls: for a
26
+ * partition the face of this room and not the other's, for a wall that runs on past the room only the
27
+ * stretch the room stands on.
28
+ */
29
+ export declare function roomWallFaces(nodes: SceneNodes, zone: ZoneNode): RoomWallFace[];
30
+ //# sourceMappingURL=room-faces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-faces.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-faces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAG7D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEzC;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,EAAE,EAAE,MAAM,CAAA;IACV,uDAAuD;IACvD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;CAChB,CAAA;AAID,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,EAAE,CAI/E;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,GAAG,YAAY,EAAE,CAgB/E"}
@@ -0,0 +1,31 @@
1
+ import { isCurvedWall } from '../systems/wall/wall-curve.js';
2
+ import { getWallZoneSpans } from '../systems/wall/wall-finish.js';
3
+ const WHOLE = 1e-3;
4
+ /** The walls that bound a room and carry a finish: its boundary walls, curtain walls left out. */
5
+ export function roomBoundaryWalls(nodes, zone) {
6
+ return (zone.boundaryWallIds ?? [])
7
+ .map((id) => nodes[id])
8
+ .filter((wall) => wall?.type === 'wall' && wall.wallType !== 'curtain');
9
+ }
10
+ /**
11
+ * The faces that look into a room, a stretch each, in the order of the room's boundary walls: for a
12
+ * partition the face of this room and not the other's, for a wall that runs on past the room only the
13
+ * stretch the room stands on.
14
+ */
15
+ export function roomWallFaces(nodes, zone) {
16
+ return roomBoundaryWalls(nodes, zone).flatMap((wall) => {
17
+ const length = Math.hypot(wall.end[0] - wall.start[0], wall.end[1] - wall.start[1]);
18
+ const curved = isCurvedWall(wall);
19
+ return getWallZoneSpans(wall, [zone]).map((span) => ({
20
+ wallId: wall.id,
21
+ face: span.face,
22
+ t0: span.t0,
23
+ t1: span.t1,
24
+ u0: span.t0 * length,
25
+ u1: span.t1 * length,
26
+ length,
27
+ whole: span.t0 < WHOLE && span.t1 > 1 - WHOLE,
28
+ curved,
29
+ }));
30
+ });
31
+ }