@pascal-app/core 1.0.4 → 1.0.6

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 (866) hide show
  1. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts +102 -90
  2. package/dist/agent-operations/__fixtures__/add-object-cases.d.ts.map +1 -1
  3. package/dist/agent-operations/__fixtures__/add-object-cases.js +301 -1
  4. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts +3 -0
  5. package/dist/agent-operations/__fixtures__/add-stair-cases.d.ts.map +1 -0
  6. package/dist/agent-operations/__fixtures__/add-stair-cases.js +176 -0
  7. package/dist/agent-operations/__fixtures__/build-room-cases.d.ts.map +1 -1
  8. package/dist/agent-operations/__fixtures__/build-room-cases.js +410 -40
  9. package/dist/agent-operations/__fixtures__/cases.d.ts +18 -3
  10. package/dist/agent-operations/__fixtures__/cases.d.ts.map +1 -1
  11. package/dist/agent-operations/__fixtures__/cases.js +183 -4
  12. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts +3 -0
  13. package/dist/agent-operations/__fixtures__/corner-window-cases.d.ts.map +1 -0
  14. package/dist/agent-operations/__fixtures__/corner-window-cases.js +155 -0
  15. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts +14 -0
  16. package/dist/agent-operations/__fixtures__/design-brief-cases.d.ts.map +1 -0
  17. package/dist/agent-operations/__fixtures__/design-brief-cases.js +709 -0
  18. package/dist/agent-operations/__fixtures__/finish-cases.d.ts +7 -0
  19. package/dist/agent-operations/__fixtures__/finish-cases.d.ts.map +1 -0
  20. package/dist/agent-operations/__fixtures__/finish-cases.js +758 -0
  21. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts +3 -0
  22. package/dist/agent-operations/__fixtures__/lot-info-cases.d.ts.map +1 -0
  23. package/dist/agent-operations/__fixtures__/lot-info-cases.js +370 -0
  24. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts +3 -0
  25. package/dist/agent-operations/__fixtures__/merge-windows-cases.d.ts.map +1 -0
  26. package/dist/agent-operations/__fixtures__/merge-windows-cases.js +321 -0
  27. package/dist/agent-operations/__fixtures__/native-materials.d.ts +2237 -0
  28. package/dist/agent-operations/__fixtures__/native-materials.d.ts.map +1 -0
  29. package/dist/agent-operations/__fixtures__/native-materials.js +82 -0
  30. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts +4 -0
  31. package/dist/agent-operations/__fixtures__/node-read-cases.d.ts.map +1 -0
  32. package/dist/agent-operations/__fixtures__/node-read-cases.js +639 -0
  33. package/dist/agent-operations/__fixtures__/notation-cases.d.ts +24 -0
  34. package/dist/agent-operations/__fixtures__/notation-cases.d.ts.map +1 -0
  35. package/dist/agent-operations/__fixtures__/notation-cases.js +356 -0
  36. package/dist/agent-operations/__fixtures__/place-items-cases.d.ts.map +1 -1
  37. package/dist/agent-operations/__fixtures__/place-items-cases.js +80 -2
  38. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts +19726 -0
  39. package/dist/agent-operations/__fixtures__/roof-bearing-cases.d.ts.map +1 -0
  40. package/dist/agent-operations/__fixtures__/roof-bearing-cases.js +106 -0
  41. package/dist/agent-operations/__fixtures__/roof-cases.d.ts +9 -0
  42. package/dist/agent-operations/__fixtures__/roof-cases.d.ts.map +1 -0
  43. package/dist/agent-operations/__fixtures__/roof-cases.js +382 -0
  44. package/dist/agent-operations/__fixtures__/room-cases.d.ts +2 -1
  45. package/dist/agent-operations/__fixtures__/room-cases.d.ts.map +1 -1
  46. package/dist/agent-operations/__fixtures__/room-cases.js +136 -1
  47. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts +4 -0
  48. package/dist/agent-operations/__fixtures__/scene-check-cases.d.ts.map +1 -0
  49. package/dist/agent-operations/__fixtures__/scene-check-cases.js +417 -0
  50. package/dist/agent-operations/__fixtures__/search-assets-cases.d.ts.map +1 -1
  51. package/dist/agent-operations/__fixtures__/search-assets-cases.js +15 -3
  52. package/dist/agent-operations/__fixtures__/site-cases.d.ts +290 -0
  53. package/dist/agent-operations/__fixtures__/site-cases.d.ts.map +1 -0
  54. package/dist/agent-operations/__fixtures__/site-cases.js +780 -0
  55. package/dist/agent-operations/__fixtures__/structure-cases.d.ts +1 -0
  56. package/dist/agent-operations/__fixtures__/structure-cases.d.ts.map +1 -1
  57. package/dist/agent-operations/__fixtures__/structure-cases.js +630 -3
  58. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts +311 -1
  59. package/dist/agent-operations/__fixtures__/verify-scene-cases.d.ts.map +1 -1
  60. package/dist/agent-operations/__fixtures__/verify-scene-cases.js +59 -11
  61. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts +3 -0
  62. package/dist/agent-operations/__fixtures__/view-assets-cases.d.ts.map +1 -0
  63. package/dist/agent-operations/__fixtures__/view-assets-cases.js +155 -0
  64. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts +50 -0
  65. package/dist/agent-operations/__fixtures__/view-scene-cases.d.ts.map +1 -0
  66. package/dist/agent-operations/__fixtures__/view-scene-cases.js +425 -0
  67. package/dist/agent-operations/achieved.d.ts +5 -0
  68. package/dist/agent-operations/achieved.d.ts.map +1 -1
  69. package/dist/agent-operations/achieved.js +21 -1
  70. package/dist/agent-operations/add-column.d.ts.map +1 -1
  71. package/dist/agent-operations/add-column.js +3 -1
  72. package/dist/agent-operations/add-fence.d.ts +18 -0
  73. package/dist/agent-operations/add-fence.d.ts.map +1 -0
  74. package/dist/agent-operations/add-fence.js +48 -0
  75. package/dist/agent-operations/add-level.d.ts +4 -1
  76. package/dist/agent-operations/add-level.d.ts.map +1 -1
  77. package/dist/agent-operations/add-level.js +48 -12
  78. package/dist/agent-operations/add-object.d.ts +38 -9
  79. package/dist/agent-operations/add-object.d.ts.map +1 -1
  80. package/dist/agent-operations/add-object.js +172 -11
  81. package/dist/agent-operations/add-wall.d.ts +1 -3
  82. package/dist/agent-operations/add-wall.d.ts.map +1 -1
  83. package/dist/agent-operations/add-wall.js +35 -9
  84. package/dist/agent-operations/apply-changes.d.ts +7 -1
  85. package/dist/agent-operations/apply-changes.d.ts.map +1 -1
  86. package/dist/agent-operations/apply-changes.js +54 -22
  87. package/dist/agent-operations/apply-outcome.d.ts +6 -0
  88. package/dist/agent-operations/apply-outcome.d.ts.map +1 -1
  89. package/dist/agent-operations/apply-outcome.js +23 -8
  90. package/dist/agent-operations/asset-views.d.ts +75 -0
  91. package/dist/agent-operations/asset-views.d.ts.map +1 -0
  92. package/dist/agent-operations/asset-views.js +234 -0
  93. package/dist/agent-operations/author-scene.d.ts +157 -0
  94. package/dist/agent-operations/author-scene.d.ts.map +1 -0
  95. package/dist/agent-operations/author-scene.js +1076 -0
  96. package/dist/agent-operations/authored-scene-merge.d.ts +4 -0
  97. package/dist/agent-operations/authored-scene-merge.d.ts.map +1 -0
  98. package/dist/agent-operations/authored-scene-merge.js +96 -0
  99. package/dist/agent-operations/batch.d.ts +22 -0
  100. package/dist/agent-operations/batch.d.ts.map +1 -0
  101. package/dist/agent-operations/batch.js +104 -0
  102. package/dist/agent-operations/ceiling-object-observations.d.ts +31 -0
  103. package/dist/agent-operations/ceiling-object-observations.d.ts.map +1 -0
  104. package/dist/agent-operations/ceiling-object-observations.js +111 -0
  105. package/dist/agent-operations/corner-window.d.ts +19 -0
  106. package/dist/agent-operations/corner-window.d.ts.map +1 -0
  107. package/dist/agent-operations/corner-window.js +84 -0
  108. package/dist/agent-operations/create-roof.d.ts +32 -0
  109. package/dist/agent-operations/create-roof.d.ts.map +1 -0
  110. package/dist/agent-operations/create-roof.js +304 -0
  111. package/dist/agent-operations/create-room.d.ts +2 -0
  112. package/dist/agent-operations/create-room.d.ts.map +1 -1
  113. package/dist/agent-operations/create-room.js +73 -5
  114. package/dist/agent-operations/create-stair.d.ts +6 -28
  115. package/dist/agent-operations/create-stair.d.ts.map +1 -1
  116. package/dist/agent-operations/create-stair.js +187 -104
  117. package/dist/agent-operations/design-brief.d.ts +38 -0
  118. package/dist/agent-operations/design-brief.d.ts.map +1 -0
  119. package/dist/agent-operations/design-brief.js +300 -0
  120. package/dist/agent-operations/designs.d.ts +24 -0
  121. package/dist/agent-operations/designs.d.ts.map +1 -0
  122. package/dist/agent-operations/designs.js +48 -0
  123. package/dist/agent-operations/door-clearance.d.ts +16 -1
  124. package/dist/agent-operations/door-clearance.d.ts.map +1 -1
  125. package/dist/agent-operations/door-clearance.js +61 -4
  126. package/dist/agent-operations/duplicate-level.d.ts.map +1 -1
  127. package/dist/agent-operations/duplicate-level.js +2 -1
  128. package/dist/agent-operations/find-by-type.d.ts +14 -7
  129. package/dist/agent-operations/find-by-type.d.ts.map +1 -1
  130. package/dist/agent-operations/find-by-type.js +266 -43
  131. package/dist/agent-operations/furnish-room.d.ts +22 -1
  132. package/dist/agent-operations/furnish-room.d.ts.map +1 -1
  133. package/dist/agent-operations/furnish-room.js +66 -19
  134. package/dist/agent-operations/furniture-kind.d.ts +22 -0
  135. package/dist/agent-operations/furniture-kind.d.ts.map +1 -0
  136. package/dist/agent-operations/furniture-kind.js +69 -0
  137. package/dist/agent-operations/get-node.d.ts +5 -2
  138. package/dist/agent-operations/get-node.d.ts.map +1 -1
  139. package/dist/agent-operations/get-node.js +82 -10
  140. package/dist/agent-operations/hosted-services.d.ts +2 -1
  141. package/dist/agent-operations/hosted-services.d.ts.map +1 -1
  142. package/dist/agent-operations/index.d.ts +281 -69
  143. package/dist/agent-operations/index.d.ts.map +1 -1
  144. package/dist/agent-operations/index.js +66 -5
  145. package/dist/agent-operations/item-space.d.ts +22 -0
  146. package/dist/agent-operations/item-space.d.ts.map +1 -0
  147. package/dist/agent-operations/item-space.js +69 -0
  148. package/dist/agent-operations/layout-clearance.d.ts +52 -3
  149. package/dist/agent-operations/layout-clearance.d.ts.map +1 -1
  150. package/dist/agent-operations/layout-clearance.js +340 -30
  151. package/dist/agent-operations/level-height-fill.d.ts +12 -0
  152. package/dist/agent-operations/level-height-fill.d.ts.map +1 -0
  153. package/dist/agent-operations/level-height-fill.js +59 -0
  154. package/dist/agent-operations/level-reads.d.ts +5 -1
  155. package/dist/agent-operations/level-reads.d.ts.map +1 -1
  156. package/dist/agent-operations/level-reads.js +10 -3
  157. package/dist/agent-operations/list-levels.d.ts.map +1 -1
  158. package/dist/agent-operations/list-levels.js +23 -0
  159. package/dist/agent-operations/material-preset.d.ts.map +1 -1
  160. package/dist/agent-operations/material-preset.js +3 -9
  161. package/dist/agent-operations/material-refs.d.ts +7 -1
  162. package/dist/agent-operations/material-refs.d.ts.map +1 -1
  163. package/dist/agent-operations/material-refs.js +10 -5
  164. package/dist/agent-operations/merge-windows.d.ts +6 -0
  165. package/dist/agent-operations/merge-windows.d.ts.map +1 -0
  166. package/dist/agent-operations/merge-windows.js +27 -0
  167. package/dist/agent-operations/move-roofs.d.ts +9 -0
  168. package/dist/agent-operations/move-roofs.d.ts.map +1 -0
  169. package/dist/agent-operations/move-roofs.js +29 -0
  170. package/dist/agent-operations/paint.d.ts +2 -1
  171. package/dist/agent-operations/paint.d.ts.map +1 -1
  172. package/dist/agent-operations/paint.js +163 -53
  173. package/dist/agent-operations/photo-elevation.d.ts +155 -0
  174. package/dist/agent-operations/photo-elevation.d.ts.map +1 -0
  175. package/dist/agent-operations/photo-elevation.js +761 -0
  176. package/dist/agent-operations/place-in-room.d.ts +29 -0
  177. package/dist/agent-operations/place-in-room.d.ts.map +1 -0
  178. package/dist/agent-operations/place-in-room.js +403 -0
  179. package/dist/agent-operations/place-items.d.ts.map +1 -1
  180. package/dist/agent-operations/place-items.js +15 -2
  181. package/dist/agent-operations/plan-geometry.d.ts.map +1 -1
  182. package/dist/agent-operations/plan-geometry.js +3 -0
  183. package/dist/agent-operations/point-context.d.ts +139 -0
  184. package/dist/agent-operations/point-context.d.ts.map +1 -0
  185. package/dist/agent-operations/point-context.js +1 -0
  186. package/dist/agent-operations/project-files.d.ts +9 -0
  187. package/dist/agent-operations/project-files.d.ts.map +1 -0
  188. package/dist/agent-operations/project-files.js +25 -0
  189. package/dist/agent-operations/record-made.d.ts +18 -0
  190. package/dist/agent-operations/record-made.d.ts.map +1 -0
  191. package/dist/agent-operations/record-made.js +28 -0
  192. package/dist/agent-operations/roof-footprint.d.ts +24 -0
  193. package/dist/agent-operations/roof-footprint.d.ts.map +1 -0
  194. package/dist/agent-operations/roof-footprint.js +242 -0
  195. package/dist/agent-operations/roof-writes.d.ts +20 -0
  196. package/dist/agent-operations/roof-writes.d.ts.map +1 -0
  197. package/dist/agent-operations/roof-writes.js +165 -0
  198. package/dist/agent-operations/room-findings.d.ts +54 -0
  199. package/dist/agent-operations/room-findings.d.ts.map +1 -0
  200. package/dist/agent-operations/room-findings.js +143 -0
  201. package/dist/agent-operations/room-floor-script.d.ts +23 -0
  202. package/dist/agent-operations/room-floor-script.d.ts.map +1 -0
  203. package/dist/agent-operations/room-floor-script.js +54 -0
  204. package/dist/agent-operations/room-structure.d.ts +2 -2
  205. package/dist/agent-operations/room-structure.d.ts.map +1 -1
  206. package/dist/agent-operations/scene-checkpoint.d.ts +94 -0
  207. package/dist/agent-operations/scene-checkpoint.d.ts.map +1 -0
  208. package/dist/agent-operations/scene-checkpoint.js +176 -0
  209. package/dist/agent-operations/scene-queries.d.ts +3750 -3319
  210. package/dist/agent-operations/scene-queries.d.ts.map +1 -1
  211. package/dist/agent-operations/scene-queries.js +13 -23
  212. package/dist/agent-operations/scene-review.d.ts +52 -0
  213. package/dist/agent-operations/scene-review.d.ts.map +1 -0
  214. package/dist/agent-operations/scene-review.js +106 -0
  215. package/dist/agent-operations/scene-view.d.ts +82 -15
  216. package/dist/agent-operations/scene-view.d.ts.map +1 -1
  217. package/dist/agent-operations/scene-view.js +408 -51
  218. package/dist/agent-operations/search-assets.d.ts +2 -2
  219. package/dist/agent-operations/search-assets.d.ts.map +1 -1
  220. package/dist/agent-operations/search-assets.js +4 -3
  221. package/dist/agent-operations/search-materials.d.ts +9 -3
  222. package/dist/agent-operations/search-materials.d.ts.map +1 -1
  223. package/dist/agent-operations/search-materials.js +83 -29
  224. package/dist/agent-operations/set-checkpoint.d.ts +9 -0
  225. package/dist/agent-operations/set-checkpoint.d.ts.map +1 -0
  226. package/dist/agent-operations/set-checkpoint.js +31 -0
  227. package/dist/agent-operations/set-ground-level.d.ts +12 -0
  228. package/dist/agent-operations/set-ground-level.d.ts.map +1 -0
  229. package/dist/agent-operations/set-ground-level.js +61 -0
  230. package/dist/agent-operations/site.d.ts +21 -0
  231. package/dist/agent-operations/site.d.ts.map +1 -0
  232. package/dist/agent-operations/site.js +123 -0
  233. package/dist/agent-operations/types.d.ts +66 -7
  234. package/dist/agent-operations/types.d.ts.map +1 -1
  235. package/dist/agent-operations/verify-scene.d.ts +39 -5
  236. package/dist/agent-operations/verify-scene.d.ts.map +1 -1
  237. package/dist/agent-operations/verify-scene.js +223 -44
  238. package/dist/agent-operations/wall-face-script.d.ts +28 -0
  239. package/dist/agent-operations/wall-face-script.d.ts.map +1 -0
  240. package/dist/agent-operations/wall-face-script.js +62 -0
  241. package/dist/agent-operations/wall-object-observations.d.ts +41 -0
  242. package/dist/agent-operations/wall-object-observations.d.ts.map +1 -0
  243. package/dist/agent-operations/wall-object-observations.js +249 -0
  244. package/dist/agent-operations/wall-opening.d.ts +23 -23
  245. package/dist/agent-operations/wall-opening.d.ts.map +1 -1
  246. package/dist/agent-operations/wall-skirting.d.ts +24 -0
  247. package/dist/agent-operations/wall-skirting.d.ts.map +1 -0
  248. package/dist/agent-operations/wall-skirting.js +85 -0
  249. package/dist/agent-tools/add-object.d.ts +11 -7
  250. package/dist/agent-tools/add-object.d.ts.map +1 -1
  251. package/dist/agent-tools/add-object.js +17 -11
  252. package/dist/agent-tools/assets.d.ts +8 -0
  253. package/dist/agent-tools/assets.d.ts.map +1 -1
  254. package/dist/agent-tools/assets.js +13 -1
  255. package/dist/agent-tools/author-scene.d.ts +651 -0
  256. package/dist/agent-tools/author-scene.d.ts.map +1 -0
  257. package/dist/agent-tools/author-scene.js +252 -0
  258. package/dist/agent-tools/batch.d.ts +25 -0
  259. package/dist/agent-tools/batch.d.ts.map +1 -0
  260. package/dist/agent-tools/batch.js +61 -0
  261. package/dist/agent-tools/checkpoints.d.ts +13 -0
  262. package/dist/agent-tools/checkpoints.d.ts.map +1 -0
  263. package/dist/agent-tools/checkpoints.js +16 -0
  264. package/dist/agent-tools/clear-scene.d.ts.map +1 -1
  265. package/dist/agent-tools/collections.d.ts +6 -6
  266. package/dist/agent-tools/collections.d.ts.map +1 -1
  267. package/dist/agent-tools/columns.d.ts +18 -18
  268. package/dist/agent-tools/columns.js +2 -2
  269. package/dist/agent-tools/corner-window.d.ts +46 -0
  270. package/dist/agent-tools/corner-window.d.ts.map +1 -0
  271. package/dist/agent-tools/corner-window.js +47 -0
  272. package/dist/agent-tools/create-room.d.ts +26 -25
  273. package/dist/agent-tools/create-room.d.ts.map +1 -1
  274. package/dist/agent-tools/create-room.js +11 -4
  275. package/dist/agent-tools/design-brief.d.ts +408 -0
  276. package/dist/agent-tools/design-brief.d.ts.map +1 -0
  277. package/dist/agent-tools/design-brief.js +149 -0
  278. package/dist/agent-tools/designs.d.ts +34 -0
  279. package/dist/agent-tools/designs.d.ts.map +1 -0
  280. package/dist/agent-tools/designs.js +50 -0
  281. package/dist/agent-tools/fences.d.ts +28 -0
  282. package/dist/agent-tools/fences.d.ts.map +1 -0
  283. package/dist/agent-tools/fences.js +31 -0
  284. package/dist/agent-tools/find-by-type.d.ts +8 -1
  285. package/dist/agent-tools/find-by-type.d.ts.map +1 -1
  286. package/dist/agent-tools/find-by-type.js +23 -2
  287. package/dist/agent-tools/furnish-room.d.ts +10 -8
  288. package/dist/agent-tools/furnish-room.d.ts.map +1 -1
  289. package/dist/agent-tools/furnish-room.js +3 -1
  290. package/dist/agent-tools/hosted-services.d.ts +177 -141
  291. package/dist/agent-tools/hosted-services.d.ts.map +1 -1
  292. package/dist/agent-tools/hosted-services.js +47 -14
  293. package/dist/agent-tools/index.d.ts +894 -215
  294. package/dist/agent-tools/index.d.ts.map +1 -1
  295. package/dist/agent-tools/index.js +47 -3
  296. package/dist/agent-tools/levels.d.ts +11 -3
  297. package/dist/agent-tools/levels.d.ts.map +1 -1
  298. package/dist/agent-tools/levels.js +16 -5
  299. package/dist/agent-tools/measurement.d.ts +38 -20
  300. package/dist/agent-tools/measurement.d.ts.map +1 -1
  301. package/dist/agent-tools/measurement.js +117 -67
  302. package/dist/agent-tools/merge-windows.d.ts +10 -0
  303. package/dist/agent-tools/merge-windows.d.ts.map +1 -0
  304. package/dist/agent-tools/merge-windows.js +12 -0
  305. package/dist/agent-tools/nodes.d.ts.map +1 -1
  306. package/dist/agent-tools/nodes.js +1 -1
  307. package/dist/agent-tools/notation-inventory.d.ts +16 -0
  308. package/dist/agent-tools/notation-inventory.d.ts.map +1 -0
  309. package/dist/agent-tools/notation-inventory.js +105 -0
  310. package/dist/agent-tools/paint.d.ts +5 -5
  311. package/dist/agent-tools/paint.d.ts.map +1 -1
  312. package/dist/agent-tools/paint.js +1 -1
  313. package/dist/agent-tools/photo-elevation.d.ts +32 -0
  314. package/dist/agent-tools/photo-elevation.d.ts.map +1 -0
  315. package/dist/agent-tools/photo-elevation.js +73 -0
  316. package/dist/agent-tools/place-in-room.d.ts +35 -0
  317. package/dist/agent-tools/place-in-room.d.ts.map +1 -0
  318. package/dist/agent-tools/place-in-room.js +61 -0
  319. package/dist/agent-tools/place-items.d.ts +1 -1
  320. package/dist/agent-tools/place-items.js +2 -2
  321. package/dist/agent-tools/project-files.d.ts +189 -0
  322. package/dist/agent-tools/project-files.d.ts.map +1 -0
  323. package/dist/agent-tools/project-files.js +99 -0
  324. package/dist/agent-tools/refusal.d.ts.map +1 -1
  325. package/dist/agent-tools/retired.d.ts +21 -0
  326. package/dist/agent-tools/retired.d.ts.map +1 -0
  327. package/dist/agent-tools/retired.js +29 -0
  328. package/dist/agent-tools/roofs.d.ts +100 -0
  329. package/dist/agent-tools/roofs.d.ts.map +1 -0
  330. package/dist/agent-tools/roofs.js +96 -0
  331. package/dist/agent-tools/room-structure.d.ts +46 -38
  332. package/dist/agent-tools/room-structure.d.ts.map +1 -1
  333. package/dist/agent-tools/room-structure.js +30 -27
  334. package/dist/agent-tools/search-materials.d.ts +22 -3
  335. package/dist/agent-tools/search-materials.d.ts.map +1 -1
  336. package/dist/agent-tools/search-materials.js +13 -14
  337. package/dist/agent-tools/site.d.ts +27 -0
  338. package/dist/agent-tools/site.d.ts.map +1 -0
  339. package/dist/agent-tools/site.js +40 -0
  340. package/dist/agent-tools/sources.d.ts +12 -0
  341. package/dist/agent-tools/sources.d.ts.map +1 -0
  342. package/dist/agent-tools/sources.js +11 -0
  343. package/dist/agent-tools/stairs.d.ts +48 -28
  344. package/dist/agent-tools/stairs.d.ts.map +1 -1
  345. package/dist/agent-tools/stairs.js +65 -22
  346. package/dist/agent-tools/verify-scene.d.ts.map +1 -1
  347. package/dist/agent-tools/verify-scene.js +1 -1
  348. package/dist/agent-tools/view-scene.d.ts +50 -12
  349. package/dist/agent-tools/view-scene.d.ts.map +1 -1
  350. package/dist/agent-tools/view-scene.js +74 -31
  351. package/dist/agent-tools/wall-openings.d.ts +77 -73
  352. package/dist/agent-tools/wall-openings.d.ts.map +1 -1
  353. package/dist/agent-tools/wall-openings.js +9 -5
  354. package/dist/agent-tools/walls.d.ts +4 -4
  355. package/dist/agent-tools/walls.d.ts.map +1 -1
  356. package/dist/agent-tools/walls.js +7 -2
  357. package/dist/building/__fixtures__/wall-opening-cases.d.ts +454 -250
  358. package/dist/building/__fixtures__/wall-opening-cases.d.ts.map +1 -1
  359. package/dist/building/__fixtures__/wall-opening-cases.js +62 -2
  360. package/dist/building/corner-window.d.ts +56 -0
  361. package/dist/building/corner-window.d.ts.map +1 -0
  362. package/dist/building/corner-window.js +179 -0
  363. package/dist/building/ground-level.d.ts +26 -0
  364. package/dist/building/ground-level.d.ts.map +1 -0
  365. package/dist/building/ground-level.js +58 -0
  366. package/dist/building/index.d.ts +5 -0
  367. package/dist/building/index.d.ts.map +1 -1
  368. package/dist/building/index.js +5 -0
  369. package/dist/building/level-duplication.d.ts +7472 -6613
  370. package/dist/building/level-duplication.d.ts.map +1 -1
  371. package/dist/building/level-duplication.js +18 -4
  372. package/dist/building/level-insertion.d.ts +55 -0
  373. package/dist/building/level-insertion.d.ts.map +1 -0
  374. package/dist/building/level-insertion.js +35 -0
  375. package/dist/building/merge-windows.d.ts +58 -0
  376. package/dist/building/merge-windows.d.ts.map +1 -0
  377. package/dist/building/merge-windows.js +189 -0
  378. package/dist/building/opening-style-presets.d.ts +2 -2
  379. package/dist/building/opening-style-presets.d.ts.map +1 -1
  380. package/dist/building/photo-elevation.d.ts +125 -0
  381. package/dist/building/photo-elevation.d.ts.map +1 -0
  382. package/dist/building/photo-elevation.js +404 -0
  383. package/dist/building/wall-gaps.d.ts +13 -0
  384. package/dist/building/wall-gaps.d.ts.map +1 -0
  385. package/dist/building/wall-gaps.js +158 -0
  386. package/dist/building/wall-openings.d.ts +154 -119
  387. package/dist/building/wall-openings.d.ts.map +1 -1
  388. package/dist/building/wall-openings.js +37 -9
  389. package/dist/capture/schema.d.ts +22 -22
  390. package/dist/capture/source.d.ts.map +1 -1
  391. package/dist/capture/source.js +1 -1
  392. package/dist/commands/structure/create-zone.d.ts +12 -1
  393. package/dist/commands/structure/create-zone.d.ts.map +1 -1
  394. package/dist/commands/structure/create-zone.js +49 -0
  395. package/dist/commands/structure/divide-zone.d.ts +3 -3
  396. package/dist/commands/structure/index.d.ts +1 -1
  397. package/dist/commands/structure/index.d.ts.map +1 -1
  398. package/dist/commands/structure/index.js +1 -1
  399. package/dist/commands/structure/set-floor-foundation.d.ts +6 -6
  400. package/dist/commands/structure/set-zone-intent.d.ts +4 -0
  401. package/dist/commands/structure/set-zone-intent.d.ts.map +1 -1
  402. package/dist/commands/structure/set-zone-intent.js +19 -0
  403. package/dist/commands/structure/shared.d.ts +3642 -3213
  404. package/dist/commands/structure/shared.d.ts.map +1 -1
  405. package/dist/commands/structure/zone-wall-merge.d.ts +4149 -3334
  406. package/dist/commands/structure/zone-wall-merge.d.ts.map +1 -1
  407. package/dist/contracts/reference-inventory.d.ts.map +1 -1
  408. package/dist/contracts/reference-inventory.js +106 -26
  409. package/dist/events/bus.d.ts +22 -3
  410. package/dist/events/bus.d.ts.map +1 -1
  411. package/dist/events/capture-sessions.d.ts +5 -0
  412. package/dist/events/capture-sessions.d.ts.map +1 -0
  413. package/dist/events/capture-sessions.js +31 -0
  414. package/dist/hooks/scene-registry/scene-registry.d.ts.map +1 -1
  415. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts +1 -2
  416. package/dist/hooks/spatial-grid/spatial-grid-manager.d.ts.map +1 -1
  417. package/dist/hooks/spatial-grid/spatial-grid-manager.js +4 -6
  418. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts +3608 -3179
  419. package/dist/hooks/spatial-grid/spatial-grid-sync.d.ts.map +1 -1
  420. package/dist/hooks/spatial-grid/spatial-grid.d.ts.map +1 -1
  421. package/dist/hooks/spatial-grid/support-host-patch.d.ts.map +1 -1
  422. package/dist/hooks/spatial-grid/support-host-patch.js +11 -2
  423. package/dist/hooks/spatial-grid/use-spatial-query.d.ts +3 -3
  424. package/dist/hooks/spatial-grid/wall-spatial-grid.d.ts.map +1 -1
  425. package/dist/index.d.ts +37 -9
  426. package/dist/index.d.ts.map +1 -1
  427. package/dist/index.js +36 -9
  428. package/dist/lib/__fixtures__/mezzanine.d.ts +11800 -10132
  429. package/dist/lib/__fixtures__/mezzanine.d.ts.map +1 -1
  430. package/dist/lib/absorb-wall-separators.d.ts +3642 -3213
  431. package/dist/lib/absorb-wall-separators.d.ts.map +1 -1
  432. package/dist/lib/angle-accumulator.d.ts.map +1 -1
  433. package/dist/lib/artifact-store.d.ts.map +1 -1
  434. package/dist/lib/below-grade-footprints.d.ts +65 -0
  435. package/dist/lib/below-grade-footprints.d.ts.map +1 -0
  436. package/dist/lib/below-grade-footprints.js +181 -0
  437. package/dist/lib/building-footprint.d.ts +33 -0
  438. package/dist/lib/building-footprint.d.ts.map +1 -0
  439. package/dist/lib/building-footprint.js +89 -0
  440. package/dist/lib/corner-pair.d.ts +1129 -0
  441. package/dist/lib/corner-pair.d.ts.map +1 -0
  442. package/dist/lib/corner-pair.js +130 -0
  443. package/dist/lib/corner-snap.d.ts +54 -0
  444. package/dist/lib/corner-snap.d.ts.map +1 -0
  445. package/dist/lib/corner-snap.js +125 -0
  446. package/dist/lib/critically-damped.d.ts +11 -0
  447. package/dist/lib/critically-damped.d.ts.map +1 -0
  448. package/dist/lib/critically-damped.js +14 -0
  449. package/dist/lib/deepest-drawn.d.ts +18 -0
  450. package/dist/lib/deepest-drawn.d.ts.map +1 -0
  451. package/dist/lib/deepest-drawn.js +65 -0
  452. package/dist/lib/door-operation.d.ts +1 -1
  453. package/dist/lib/exterior-wall-loops.d.ts +17 -0
  454. package/dist/lib/exterior-wall-loops.d.ts.map +1 -0
  455. package/dist/lib/exterior-wall-loops.js +334 -0
  456. package/dist/lib/finish-script.d.ts +61 -0
  457. package/dist/lib/finish-script.d.ts.map +1 -0
  458. package/dist/lib/finish-script.js +86 -0
  459. package/dist/lib/floor-intent-changes.d.ts.map +1 -1
  460. package/dist/lib/floor-intent-changes.js +4 -4
  461. package/dist/lib/floor-plate-paint.d.ts +3 -1
  462. package/dist/lib/floor-plate-paint.d.ts.map +1 -1
  463. package/dist/lib/floor-plate-paint.js +24 -4
  464. package/dist/lib/floor-plates.d.ts +50 -50
  465. package/dist/lib/floor-script.d.ts +24 -0
  466. package/dist/lib/floor-script.d.ts.map +1 -0
  467. package/dist/lib/floor-script.js +51 -0
  468. package/dist/lib/foundation-construction.d.ts +73 -0
  469. package/dist/lib/foundation-construction.d.ts.map +1 -0
  470. package/dist/lib/foundation-construction.js +242 -0
  471. package/dist/lib/foundation-standard.d.ts +30 -0
  472. package/dist/lib/foundation-standard.d.ts.map +1 -0
  473. package/dist/lib/foundation-standard.js +30 -0
  474. package/dist/lib/foundation-wall.d.ts +36 -0
  475. package/dist/lib/foundation-wall.d.ts.map +1 -0
  476. package/dist/lib/foundation-wall.js +66 -0
  477. package/dist/lib/generic-foundation.d.ts +40 -0
  478. package/dist/lib/generic-foundation.d.ts.map +1 -0
  479. package/dist/lib/generic-foundation.js +200 -0
  480. package/dist/lib/geometry-script-node.d.ts +32 -3
  481. package/dist/lib/geometry-script-node.d.ts.map +1 -1
  482. package/dist/lib/geometry-script-node.js +26 -0
  483. package/dist/lib/grade-standing.d.ts +38 -0
  484. package/dist/lib/grade-standing.d.ts.map +1 -0
  485. package/dist/lib/grade-standing.js +137 -0
  486. package/dist/lib/ground-level.d.ts +20 -0
  487. package/dist/lib/ground-level.d.ts.map +1 -0
  488. package/dist/lib/ground-level.js +49 -0
  489. package/dist/lib/ground-over-part.d.ts +13 -0
  490. package/dist/lib/ground-over-part.d.ts.map +1 -0
  491. package/dist/lib/ground-over-part.js +94 -0
  492. package/dist/lib/ground-seat.d.ts +47 -0
  493. package/dist/lib/ground-seat.d.ts.map +1 -0
  494. package/dist/lib/ground-seat.js +61 -0
  495. package/dist/lib/ground-window.d.ts +39 -0
  496. package/dist/lib/ground-window.d.ts.map +1 -0
  497. package/dist/lib/ground-window.js +147 -0
  498. package/dist/lib/opening-floor-datum.d.ts.map +1 -1
  499. package/dist/lib/opening-floor-datum.js +2 -3
  500. package/dist/lib/own-floor-intent.d.ts.map +1 -1
  501. package/dist/lib/own-floor-intent.js +4 -4
  502. package/dist/lib/plate-surface.d.ts.map +1 -1
  503. package/dist/lib/plate-surface.js +3 -1
  504. package/dist/lib/point-ask.d.ts +9 -0
  505. package/dist/lib/point-ask.d.ts.map +1 -0
  506. package/dist/lib/point-ask.js +36 -0
  507. package/dist/lib/room-drawn-floor.d.ts +1 -1
  508. package/dist/lib/room-drawn-floor.d.ts.map +1 -1
  509. package/dist/lib/room-floor-feasibility.d.ts.map +1 -1
  510. package/dist/lib/room-floor-feasibility.js +3 -3
  511. package/dist/lib/room-graph.d.ts.map +1 -1
  512. package/dist/lib/room-graph.js +2 -0
  513. package/dist/lib/room-name.d.ts +2 -0
  514. package/dist/lib/room-name.d.ts.map +1 -1
  515. package/dist/lib/room-name.js +2 -0
  516. package/dist/lib/room-topology-index.d.ts.map +1 -1
  517. package/dist/lib/room-topology-index.js +1 -1
  518. package/dist/lib/room-zone-adoption.d.ts.map +1 -1
  519. package/dist/lib/script-inputs-key.d.ts +3 -0
  520. package/dist/lib/script-inputs-key.d.ts.map +1 -0
  521. package/dist/lib/script-inputs-key.js +13 -0
  522. package/dist/lib/setback-envelope.d.ts +95 -5
  523. package/dist/lib/setback-envelope.d.ts.map +1 -1
  524. package/dist/lib/setback-envelope.js +351 -35
  525. package/dist/lib/site-flatwork.d.ts +11 -0
  526. package/dist/lib/site-flatwork.d.ts.map +1 -0
  527. package/dist/lib/site-flatwork.js +11 -0
  528. package/dist/lib/site-ground-height.d.ts +13 -0
  529. package/dist/lib/site-ground-height.d.ts.map +1 -0
  530. package/dist/lib/site-ground-height.js +16 -0
  531. package/dist/lib/site-placement.d.ts +362 -0
  532. package/dist/lib/site-placement.d.ts.map +1 -0
  533. package/dist/lib/site-placement.js +942 -0
  534. package/dist/lib/snap-ease.d.ts +20 -0
  535. package/dist/lib/snap-ease.d.ts.map +1 -0
  536. package/dist/lib/snap-ease.js +50 -0
  537. package/dist/lib/structure-kernel.d.ts +1 -1
  538. package/dist/lib/structure-kernel.d.ts.map +1 -1
  539. package/dist/lib/structure-kernel.js +2 -0
  540. package/dist/lib/surface-support-references.d.ts +4 -0
  541. package/dist/lib/surface-support-references.d.ts.map +1 -0
  542. package/dist/lib/surface-support-references.js +19 -0
  543. package/dist/lib/terrain-support-query.d.ts +10 -0
  544. package/dist/lib/terrain-support-query.d.ts.map +1 -1
  545. package/dist/lib/terrain-support-query.js +1 -1
  546. package/dist/lib/wall-face-script.d.ts +66 -0
  547. package/dist/lib/wall-face-script.d.ts.map +1 -0
  548. package/dist/lib/wall-face-script.js +235 -0
  549. package/dist/lib/zone-colors.d.ts +1 -1
  550. package/dist/lib/zone-colors.d.ts.map +1 -1
  551. package/dist/lib/zone-quantities.d.ts.map +1 -1
  552. package/dist/lib/zone-quantities.js +4 -5
  553. package/dist/material-kinds.d.ts +9 -0
  554. package/dist/material-kinds.d.ts.map +1 -0
  555. package/dist/material-kinds.js +30 -0
  556. package/dist/material-library.d.ts +4 -4
  557. package/dist/material-library.d.ts.map +1 -1
  558. package/dist/material-library.js +72 -26
  559. package/dist/node-slots/index.d.ts +1 -0
  560. package/dist/node-slots/index.d.ts.map +1 -1
  561. package/dist/node-slots/index.js +7 -1
  562. package/dist/node-slots/roof.d.ts +5 -0
  563. package/dist/node-slots/roof.d.ts.map +1 -0
  564. package/dist/node-slots/roof.js +12 -0
  565. package/dist/node-slots/stair.d.ts +2 -0
  566. package/dist/node-slots/stair.d.ts.map +1 -1
  567. package/dist/node-slots/stair.js +6 -2
  568. package/dist/procedural-items/design-placement.d.ts.map +1 -1
  569. package/dist/procedural-items/design.d.ts +19 -19
  570. package/dist/procedural-items/fixtures.d.ts +297 -297
  571. package/dist/procedural-items/fixtures.d.ts.map +1 -1
  572. package/dist/procedural-items/integration.d.ts +106 -106
  573. package/dist/procedural-items/joints.d.ts +4 -4
  574. package/dist/procedural-items/library-colors.d.ts +22 -22
  575. package/dist/procedural-items/library-colors.d.ts.map +1 -1
  576. package/dist/procedural-items/motion-controller.d.ts.map +1 -1
  577. package/dist/procedural-items/node.d.ts +291 -291
  578. package/dist/procedural-items/query.d.ts +1 -1
  579. package/dist/procedural-items/query.d.ts.map +1 -1
  580. package/dist/procedural-items/recipe.d.ts +11 -11
  581. package/dist/procedural-items/recipe.d.ts.map +1 -1
  582. package/dist/procedural-items/section.d.ts.map +1 -1
  583. package/dist/registry/index.d.ts +1 -1
  584. package/dist/registry/index.d.ts.map +1 -1
  585. package/dist/registry/scene-api.d.ts +1 -0
  586. package/dist/registry/scene-api.d.ts.map +1 -1
  587. package/dist/registry/scene-api.js +3 -0
  588. package/dist/registry/subtree.d.ts.map +1 -1
  589. package/dist/registry/subtree.js +2 -0
  590. package/dist/registry/types.d.ts +120 -1
  591. package/dist/registry/types.d.ts.map +1 -1
  592. package/dist/schema/assembly.d.ts +41 -41
  593. package/dist/schema/asset-url.d.ts +1 -1
  594. package/dist/schema/asset-url.d.ts.map +1 -1
  595. package/dist/schema/base.d.ts +9 -9
  596. package/dist/schema/base.d.ts.map +1 -1
  597. package/dist/schema/camera.d.ts +1 -1
  598. package/dist/schema/collection-templates.d.ts +20 -20
  599. package/dist/schema/collection-templates.d.ts.map +1 -1
  600. package/dist/schema/geometry-metadata.d.ts +7 -7
  601. package/dist/schema/geometry-metadata.d.ts.map +1 -1
  602. package/dist/schema/geometry-source.d.ts +26 -16
  603. package/dist/schema/geometry-source.d.ts.map +1 -1
  604. package/dist/schema/geometry-source.js +14 -0
  605. package/dist/schema/index.d.ts +10 -7
  606. package/dist/schema/index.d.ts.map +1 -1
  607. package/dist/schema/index.js +10 -7
  608. package/dist/schema/material.d.ts +33 -33
  609. package/dist/schema/nodes/barrel-roof.d.ts +3 -0
  610. package/dist/schema/nodes/barrel-roof.d.ts.map +1 -0
  611. package/dist/schema/nodes/barrel-roof.js +11 -0
  612. package/dist/schema/nodes/block.d.ts +8 -8
  613. package/dist/schema/nodes/box-vent.d.ts +13 -13
  614. package/dist/schema/nodes/building.d.ts +9 -8
  615. package/dist/schema/nodes/building.d.ts.map +1 -1
  616. package/dist/schema/nodes/building.js +2 -0
  617. package/dist/schema/nodes/cabinet.d.ts +130 -129
  618. package/dist/schema/nodes/cabinet.d.ts.map +1 -1
  619. package/dist/schema/nodes/cabinet.js +1 -1
  620. package/dist/schema/nodes/ceiling.d.ts +15 -15
  621. package/dist/schema/nodes/chimney.d.ts +23 -23
  622. package/dist/schema/nodes/column.d.ts +207 -199
  623. package/dist/schema/nodes/column.d.ts.map +1 -1
  624. package/dist/schema/nodes/column.js +2 -0
  625. package/dist/schema/nodes/construction-dimension.d.ts +34 -34
  626. package/dist/schema/nodes/cupola.d.ts +15 -15
  627. package/dist/schema/nodes/curtain-wall.d.ts +21 -20
  628. package/dist/schema/nodes/curtain-wall.d.ts.map +1 -1
  629. package/dist/schema/nodes/curtain-wall.js +23 -0
  630. package/dist/schema/nodes/door.d.ts +50 -43
  631. package/dist/schema/nodes/door.d.ts.map +1 -1
  632. package/dist/schema/nodes/door.js +19 -0
  633. package/dist/schema/nodes/dormer.d.ts +37 -36
  634. package/dist/schema/nodes/dormer.d.ts.map +1 -1
  635. package/dist/schema/nodes/downspout.d.ts +17 -17
  636. package/dist/schema/nodes/duct-fitting.d.ts +24 -24
  637. package/dist/schema/nodes/duct-segment.d.ts +14 -14
  638. package/dist/schema/nodes/duct-terminal.d.ts +12 -12
  639. package/dist/schema/nodes/elevator.d.ts +15 -15
  640. package/dist/schema/nodes/eyebrow-vent.d.ts +13 -13
  641. package/dist/schema/nodes/fence-feature.d.ts +37 -37
  642. package/dist/schema/nodes/fence-types.d.ts +32 -0
  643. package/dist/schema/nodes/fence-types.d.ts.map +1 -0
  644. package/dist/schema/nodes/fence-types.js +22 -0
  645. package/dist/schema/nodes/fence.d.ts +43 -72
  646. package/dist/schema/nodes/fence.d.ts.map +1 -1
  647. package/dist/schema/nodes/fence.js +4 -20
  648. package/dist/schema/nodes/floor-opening.d.ts +8 -8
  649. package/dist/schema/nodes/guide.d.ts +8 -8
  650. package/dist/schema/nodes/gutter.d.ts +14 -14
  651. package/dist/schema/nodes/gutter.d.ts.map +1 -1
  652. package/dist/schema/nodes/gutter.js +6 -5
  653. package/dist/schema/nodes/hvac-equipment.d.ts +13 -13
  654. package/dist/schema/nodes/imported-mesh.d.ts +8 -8
  655. package/dist/schema/nodes/item.d.ts +30 -25
  656. package/dist/schema/nodes/item.d.ts.map +1 -1
  657. package/dist/schema/nodes/lean-to-extension.d.ts +36 -36
  658. package/dist/schema/nodes/level.d.ts +9 -9
  659. package/dist/schema/nodes/lineset.d.ts +8 -8
  660. package/dist/schema/nodes/liquid-line.d.ts +8 -8
  661. package/dist/schema/nodes/measurement.d.ts +8 -8
  662. package/dist/schema/nodes/opening-types.d.ts +13 -13
  663. package/dist/schema/nodes/opening-types.d.ts.map +1 -1
  664. package/dist/schema/nodes/pipe-fitting.d.ts +15 -15
  665. package/dist/schema/nodes/pipe-segment.d.ts +11 -11
  666. package/dist/schema/nodes/pipe-trap.d.ts +9 -9
  667. package/dist/schema/nodes/ridge-vent.d.ts +14 -14
  668. package/dist/schema/nodes/ridge-vent.d.ts.map +1 -1
  669. package/dist/schema/nodes/ridge-vent.js +3 -1
  670. package/dist/schema/nodes/roof-glazing-config.d.ts +90 -0
  671. package/dist/schema/nodes/roof-glazing-config.d.ts.map +1 -0
  672. package/dist/schema/nodes/roof-glazing-config.js +34 -0
  673. package/dist/schema/nodes/roof-glazing.d.ts +57 -0
  674. package/dist/schema/nodes/roof-glazing.d.ts.map +1 -0
  675. package/dist/schema/nodes/roof-glazing.js +514 -0
  676. package/dist/schema/nodes/roof-segment-resize.d.ts +4 -0
  677. package/dist/schema/nodes/roof-segment-resize.d.ts.map +1 -0
  678. package/dist/schema/nodes/roof-segment-resize.js +21 -0
  679. package/dist/schema/nodes/roof-segment-shape.d.ts +5 -0
  680. package/dist/schema/nodes/roof-segment-shape.d.ts.map +1 -1
  681. package/dist/schema/nodes/roof-segment-shape.js +44 -0
  682. package/dist/schema/nodes/roof-segment-walls.d.ts +1 -1
  683. package/dist/schema/nodes/roof-segment-walls.d.ts.map +1 -1
  684. package/dist/schema/nodes/roof-segment-walls.js +24 -0
  685. package/dist/schema/nodes/roof-segment.d.ts +153 -46
  686. package/dist/schema/nodes/roof-segment.d.ts.map +1 -1
  687. package/dist/schema/nodes/roof-segment.js +91 -20
  688. package/dist/schema/nodes/roof-types.d.ts +14 -0
  689. package/dist/schema/nodes/roof-types.d.ts.map +1 -0
  690. package/dist/schema/nodes/roof-types.js +14 -0
  691. package/dist/schema/nodes/roof.d.ts +49 -49
  692. package/dist/schema/nodes/scan.d.ts +8 -8
  693. package/dist/schema/nodes/separator.d.ts +8 -8
  694. package/dist/schema/nodes/shelf.d.ts +16 -16
  695. package/dist/schema/nodes/site-facts.d.ts +64 -0
  696. package/dist/schema/nodes/site-facts.d.ts.map +1 -0
  697. package/dist/schema/nodes/site-facts.js +73 -0
  698. package/dist/schema/nodes/site.d.ts +105 -63
  699. package/dist/schema/nodes/site.d.ts.map +1 -1
  700. package/dist/schema/nodes/site.js +7 -70
  701. package/dist/schema/nodes/skylight.d.ts +41 -41
  702. package/dist/schema/nodes/skylight.d.ts.map +1 -1
  703. package/dist/schema/nodes/slab.d.ts +21 -21
  704. package/dist/schema/nodes/solar-panel.d.ts +21 -21
  705. package/dist/schema/nodes/spawn.d.ts +8 -8
  706. package/dist/schema/nodes/stair-construction.d.ts +3 -3
  707. package/dist/schema/nodes/stair-defaults.d.ts +16 -0
  708. package/dist/schema/nodes/stair-defaults.d.ts.map +1 -0
  709. package/dist/schema/nodes/stair-defaults.js +15 -0
  710. package/dist/schema/nodes/stair-segment.d.ts +22 -22
  711. package/dist/schema/nodes/stair-types.d.ts +29 -0
  712. package/dist/schema/nodes/stair-types.d.ts.map +1 -0
  713. package/dist/schema/nodes/stair-types.js +23 -0
  714. package/dist/schema/nodes/stair.d.ts +51 -75
  715. package/dist/schema/nodes/stair.d.ts.map +1 -1
  716. package/dist/schema/nodes/stair.js +6 -20
  717. package/dist/schema/nodes/structural-grid.d.ts +8 -8
  718. package/dist/schema/nodes/surface-hole-metadata.d.ts +2 -2
  719. package/dist/schema/nodes/turbine-vent.d.ts +13 -13
  720. package/dist/schema/nodes/unit.d.ts +10 -10
  721. package/dist/schema/nodes/unit.d.ts.map +1 -1
  722. package/dist/schema/nodes/wall.d.ts +479 -146
  723. package/dist/schema/nodes/wall.d.ts.map +1 -1
  724. package/dist/schema/nodes/wall.js +19 -0
  725. package/dist/schema/nodes/window.d.ts +55 -39
  726. package/dist/schema/nodes/window.d.ts.map +1 -1
  727. package/dist/schema/nodes/window.js +10 -0
  728. package/dist/schema/nodes/zone.d.ts +231 -12
  729. package/dist/schema/nodes/zone.d.ts.map +1 -1
  730. package/dist/schema/nodes/zone.js +10 -0
  731. package/dist/schema/provenance.d.ts +21 -21
  732. package/dist/schema/scene-material.d.ts +5 -5
  733. package/dist/schema/site-presentation.d.ts +100 -0
  734. package/dist/schema/site-presentation.d.ts.map +1 -0
  735. package/dist/schema/site-presentation.js +83 -0
  736. package/dist/schema/types.d.ts +1954 -1414
  737. package/dist/schema/types.d.ts.map +1 -1
  738. package/dist/services/__fixtures__/wall-plane-top-boundary-repro.d.ts.map +1 -1
  739. package/dist/services/index.d.ts +5 -1
  740. package/dist/services/index.d.ts.map +1 -1
  741. package/dist/services/index.js +5 -1
  742. package/dist/services/level-height.d.ts.map +1 -1
  743. package/dist/services/level-height.js +7 -3
  744. package/dist/services/port-connectivity.d.ts +4 -0
  745. package/dist/services/port-connectivity.d.ts.map +1 -1
  746. package/dist/services/port-connectivity.js +35 -0
  747. package/dist/services/project-file-sink.d.ts +9 -0
  748. package/dist/services/project-file-sink.d.ts.map +1 -0
  749. package/dist/services/project-file-sink.js +13 -0
  750. package/dist/services/roof-bearing.d.ts +62 -0
  751. package/dist/services/roof-bearing.d.ts.map +1 -0
  752. package/dist/services/roof-bearing.js +234 -0
  753. package/dist/services/roof-level.d.ts +121 -0
  754. package/dist/services/roof-level.d.ts.map +1 -0
  755. package/dist/services/roof-level.js +280 -0
  756. package/dist/services/roof-move.d.ts +83 -0
  757. package/dist/services/roof-move.d.ts.map +1 -0
  758. package/dist/services/roof-move.js +316 -0
  759. package/dist/services/stair-surface-snap.d.ts +14 -0
  760. package/dist/services/stair-surface-snap.d.ts.map +1 -0
  761. package/dist/services/stair-surface-snap.js +116 -0
  762. package/dist/services/storey-datum.d.ts +12 -0
  763. package/dist/services/storey-datum.d.ts.map +1 -0
  764. package/dist/services/storey-datum.js +18 -0
  765. package/dist/services/storey.d.ts +51 -5
  766. package/dist/services/storey.d.ts.map +1 -1
  767. package/dist/services/storey.js +125 -8
  768. package/dist/solar-panel-presets.d.ts +2 -2
  769. package/dist/store/actions/node-actions.d.ts +3613 -3182
  770. package/dist/store/actions/node-actions.d.ts.map +1 -1
  771. package/dist/store/actions/node-actions.js +46 -1
  772. package/dist/store/derived-node-guard.d.ts.map +1 -1
  773. package/dist/store/history-control.d.ts +39 -0
  774. package/dist/store/history-control.d.ts.map +1 -1
  775. package/dist/store/history-control.js +84 -4
  776. package/dist/store/scene-annotations.d.ts +7267 -6409
  777. package/dist/store/scene-annotations.d.ts.map +1 -1
  778. package/dist/store/scene-preview.d.ts +16 -0
  779. package/dist/store/scene-preview.d.ts.map +1 -0
  780. package/dist/store/scene-preview.js +144 -0
  781. package/dist/store/use-live-node-overrides.d.ts.map +1 -1
  782. package/dist/store/use-live-terrain.d.ts.map +1 -1
  783. package/dist/store/use-live-transforms.d.ts.map +1 -1
  784. package/dist/store/use-scene.d.ts.map +1 -1
  785. package/dist/store/use-scene.js +37 -4
  786. package/dist/systems/elevator/elevator-dispatch.js +1 -1
  787. package/dist/systems/fence/fence-features.d.ts.map +1 -1
  788. package/dist/systems/owned-floor-openings.d.ts.map +1 -1
  789. package/dist/systems/owned-floor-openings.js +24 -3
  790. package/dist/systems/roof/roof-elevation-system.d.ts.map +1 -1
  791. package/dist/systems/roof/roof-elevation-system.js +9 -3
  792. package/dist/systems/roof/roof-elevation.d.ts +5 -0
  793. package/dist/systems/roof/roof-elevation.d.ts.map +1 -1
  794. package/dist/systems/roof/roof-elevation.js +91 -62
  795. package/dist/systems/slab/__fixtures__/floor-step.d.ts +4623 -3516
  796. package/dist/systems/slab/__fixtures__/floor-step.d.ts.map +1 -1
  797. package/dist/systems/slab/__fixtures__/raised-room.d.ts +5149 -4076
  798. package/dist/systems/slab/__fixtures__/raised-room.d.ts.map +1 -1
  799. package/dist/systems/slab/slab-support.d.ts +6 -3
  800. package/dist/systems/slab/slab-support.d.ts.map +1 -1
  801. package/dist/systems/slab/slab-support.js +78 -10
  802. package/dist/systems/stair/stair-detail-budget.d.ts +2 -2
  803. package/dist/systems/stair/stair-detail-budget.d.ts.map +1 -1
  804. package/dist/systems/stair/stair-footprint.d.ts +6 -0
  805. package/dist/systems/stair/stair-footprint.d.ts.map +1 -1
  806. package/dist/systems/stair/stair-footprint.js +27 -14
  807. package/dist/systems/stair/stair-layout.d.ts +2 -2
  808. package/dist/systems/stair/stair-opening-preview.d.ts +3643 -3214
  809. package/dist/systems/stair/stair-opening-preview.d.ts.map +1 -1
  810. package/dist/systems/stair/stair-presets.d.ts +73 -65
  811. package/dist/systems/stair/stair-presets.d.ts.map +1 -1
  812. package/dist/systems/stair/stair-presets.js +16 -9
  813. package/dist/systems/stair/stair-rail-path.d.ts +1 -1
  814. package/dist/systems/stair/stair-rise-query.d.ts +16 -0
  815. package/dist/systems/stair/stair-rise-query.d.ts.map +1 -1
  816. package/dist/systems/stair/stair-rise-query.js +57 -7
  817. package/dist/systems/stair/stair-sizing.d.ts +101 -99
  818. package/dist/systems/stair/stair-sizing.d.ts.map +1 -1
  819. package/dist/systems/wall/wall-assembly.d.ts +11 -0
  820. package/dist/systems/wall/wall-assembly.d.ts.map +1 -1
  821. package/dist/systems/wall/wall-assembly.js +21 -0
  822. package/dist/systems/wall/wall-curve.d.ts +5 -0
  823. package/dist/systems/wall/wall-curve.d.ts.map +1 -1
  824. package/dist/systems/wall/wall-curve.js +13 -0
  825. package/dist/systems/wall/wall-frame.d.ts.map +1 -1
  826. package/dist/systems/wall/wall-frame.js +8 -0
  827. package/dist/systems/wall/wall-room-sides.d.ts +8 -0
  828. package/dist/systems/wall/wall-room-sides.d.ts.map +1 -1
  829. package/dist/systems/wall/wall-room-sides.js +60 -7
  830. package/dist/systems/wall/wall-top.d.ts +7 -4
  831. package/dist/systems/wall/wall-top.d.ts.map +1 -1
  832. package/dist/systems/wall/wall-top.js +14 -6
  833. package/dist/systems/wall/wall-topology.d.ts +4 -0
  834. package/dist/systems/wall/wall-topology.d.ts.map +1 -1
  835. package/dist/systems/wall/wall-topology.js +4 -2
  836. package/dist/systems/wall/wall-trim.d.ts +7 -0
  837. package/dist/systems/wall/wall-trim.d.ts.map +1 -0
  838. package/dist/systems/wall/wall-trim.js +10 -0
  839. package/dist/utils/clone-scene-graph.d.ts.map +1 -1
  840. package/dist/utils/clone-scene-graph.js +8 -0
  841. package/dist/utils/ensure-scene-openings.d.ts +7420 -6562
  842. package/dist/utils/ensure-scene-openings.d.ts.map +1 -1
  843. package/dist/utils/floor-piece-adoption.d.ts +2 -2
  844. package/dist/utils/floor-plate-migration.d.ts +3746 -3317
  845. package/dist/utils/floor-plate-migration.d.ts.map +1 -1
  846. package/dist/utils/floor-plate-migration.js +2 -2
  847. package/dist/utils/heal-scene-graph.d.ts +12 -0
  848. package/dist/utils/heal-scene-graph.d.ts.map +1 -1
  849. package/dist/utils/heal-scene-graph.js +40 -23
  850. package/dist/utils/legacy-wall-datums.d.ts.map +1 -1
  851. package/dist/utils/legacy-wall-datums.js +2 -2
  852. package/dist/utils/owned-floor-opening-migration.d.ts +3642 -3213
  853. package/dist/utils/owned-floor-opening-migration.d.ts.map +1 -1
  854. package/dist/utils/reconcile-structure-on-load.d.ts +3730 -7777
  855. package/dist/utils/reconcile-structure-on-load.d.ts.map +1 -1
  856. package/dist/utils/scene-migrations.d.ts +1 -1
  857. package/dist/utils/scene-migrations.d.ts.map +1 -1
  858. package/dist/utils/scene-migrations.js +1 -1
  859. package/dist/utils/semantic-equal.d.ts +3 -0
  860. package/dist/utils/semantic-equal.d.ts.map +1 -0
  861. package/dist/utils/semantic-equal.js +26 -0
  862. package/dist/utils/structure-id.d.ts.map +1 -1
  863. package/dist/utils/types.d.ts.map +1 -1
  864. package/dist/utils/wall-face-migration.d.ts +1 -1
  865. package/dist/utils/wall-face-migration.d.ts.map +1 -1
  866. package/package.json +36 -10
@@ -0,0 +1,758 @@
1
+ import { BlockNode, BuildingNode, CabinetNode, CeilingNode, DoorNode, ItemNode, LevelNode, RoofNode, RoofSegmentNode, SiteNode, SlabNode, StairNode, StairSegmentNode, WallNode, WindowNode, } from '../../schema/index.js';
2
+ import { MATERIAL_CATALOG } from '../../material-library.js';
3
+ /**
4
+ * Slice F of the tool catalogue (`wiki/ai/tool-catalogue.md`): one finish tool. Architect's
5
+ * `set_material` and `list_materials` retire into `paint` and `search_materials`, so each case
6
+ * below is a call the retiring tool served (its contract, its guides, the calls stored threads and
7
+ * Pro bench runs made), run as the replacement call that now serves it. A case's name says what
8
+ * the retiring tool was asked, then how the replacement answers.
9
+ */
10
+ const SIDING = 'library:siding-lap-white';
11
+ const SOFT_WHITE = 'library:preset-softwhite';
12
+ /** The library `finishScene`'s vase is from: paint reads its surfaces by the catalog's entry. */
13
+ const VASE_LIBRARY = [
14
+ {
15
+ id: 'vase',
16
+ name: 'Vase',
17
+ category: 'decor',
18
+ tags: [],
19
+ thumbnail: '/items/vase/thumbnail.webp',
20
+ src: '/items/vase/model.glb',
21
+ dimensions: [0.3, 0.5, 0.3],
22
+ },
23
+ ];
24
+ const SHINGLES = 'library:roof-greyshingles';
25
+ const CLAY_TILES = 'library:roof-claytiles';
26
+ /**
27
+ * A 6 × 4 m house of two rooms (a partition at x = 3) under a roof of three segments: one plain,
28
+ * one with a covering of its own, one with a catch-all finish from an older paint. Its walls run
29
+ * counter-clockwise, so each outside wall's face a is in, b out. Beside it, a terrace, a garden wall
30
+ * no room touches, whose stored sides say its front faces out (as a generator writes them), a
31
+ * retaining wall whose sides nothing stored, and the parts set_material reached beyond walls and
32
+ * roofs.
33
+ */
34
+ function finishScene() {
35
+ const level = 'level_finish';
36
+ const wall = (id, start, end, extra = {}) => WallNode.parse({ id, parentId: level, start, end, ...extra });
37
+ const door = DoorNode.parse({
38
+ id: 'door_finish',
39
+ parentId: 'wall_s',
40
+ wallId: 'wall_s',
41
+ position: [1, 1.05, 0],
42
+ });
43
+ const window = WindowNode.parse({
44
+ id: 'window_finish',
45
+ parentId: 'wall_n',
46
+ wallId: 'wall_n',
47
+ position: [4.5, 1.5, 0],
48
+ });
49
+ const walls = [
50
+ wall('wall_s', [0, 0], [6, 0], { children: [door.id] }),
51
+ wall('wall_e', [6, 0], [6, 4]),
52
+ wall('wall_n', [6, 4], [0, 4], { children: [window.id] }),
53
+ wall('wall_w', [0, 4], [0, 0]),
54
+ wall('wall_mid', [3, 0], [3, 4]),
55
+ wall('wall_garden', [8, 0], [12, 0], { frontSide: 'exterior', backSide: 'interior' }),
56
+ // A retaining wall as add_wall leaves it: no room, sides unknown.
57
+ wall('wall_free', [8, 3], [12, 3]),
58
+ ];
59
+ const footprint = [
60
+ [0, 0],
61
+ [6, 0],
62
+ [6, 4],
63
+ [0, 4],
64
+ ];
65
+ // A terrace beside the house: a slab of its own, not the floor plate its rooms derive.
66
+ const slab = SlabNode.parse({
67
+ id: 'slab_finish',
68
+ parentId: level,
69
+ polygon: [
70
+ [0, 5],
71
+ [6, 5],
72
+ [6, 7],
73
+ [0, 7],
74
+ ],
75
+ });
76
+ const ceiling = CeilingNode.parse({ id: 'ceiling_finish', parentId: level, polygon: footprint });
77
+ const segments = [
78
+ RoofSegmentNode.parse({
79
+ id: 'rseg_plain',
80
+ parentId: 'roof_finish',
81
+ fasciaMaterialPreset: 'library:preset-nearblack',
82
+ }),
83
+ RoofSegmentNode.parse({ id: 'rseg_own', parentId: 'roof_finish', topMaterialPreset: CLAY_TILES }),
84
+ RoofSegmentNode.parse({ id: 'rseg_legacy', parentId: 'roof_finish', materialPreset: CLAY_TILES }),
85
+ ];
86
+ const roof = RoofNode.parse({
87
+ id: 'roof_finish',
88
+ parentId: level,
89
+ children: segments.map((segment) => segment.id),
90
+ });
91
+ const block = BlockNode.parse({ id: 'block_pier', parentId: level, position: [7, 0, 2] });
92
+ const flight = StairSegmentNode.parse({ id: 'sseg_finish', parentId: 'stair_finish' });
93
+ const stair = StairNode.parse({
94
+ id: 'stair_finish',
95
+ parentId: level,
96
+ position: [1, 0, 2],
97
+ children: [flight.id],
98
+ });
99
+ const cabinet = CabinetNode.parse({ id: 'cabinet_finish', parentId: level, position: [4, 0, 1] });
100
+ const item = ItemNode.parse({
101
+ id: 'item_vase',
102
+ parentId: level,
103
+ position: [5, 0, 3],
104
+ asset: {
105
+ id: 'vase',
106
+ name: 'Vase',
107
+ category: 'decor',
108
+ thumbnail: '/items/vase/thumbnail.webp',
109
+ src: '/items/vase/model.glb',
110
+ dimensions: [0.3, 0.5, 0.3],
111
+ },
112
+ slots: { glaze: 'library:preset-navy' },
113
+ });
114
+ const parts = [door, window, slab, ceiling, roof, ...segments, block, stair, flight, cabinet, item];
115
+ const nodes = [
116
+ SiteNode.parse({ id: 'site_finish', children: ['building_finish'] }),
117
+ BuildingNode.parse({ id: 'building_finish', parentId: 'site_finish', children: [level] }),
118
+ LevelNode.parse({
119
+ id: level,
120
+ parentId: 'building_finish',
121
+ level: 0,
122
+ children: [
123
+ ...walls.map((node) => node.id),
124
+ ...[slab, ceiling, roof, block, stair, cabinet, item].map((node) => node.id),
125
+ ],
126
+ }),
127
+ ...walls,
128
+ ...parts,
129
+ ];
130
+ return {
131
+ nodes: Object.fromEntries(nodes.map((node) => [node.id, node])),
132
+ rootNodeIds: ['site_finish'],
133
+ };
134
+ }
135
+ /**
136
+ * A 10 m wall with a room the whole length of its north face (face a) and a room along only the
137
+ * first 6 m of its south face (face b): past that, its south face is the garden's.
138
+ */
139
+ function junctionScene() {
140
+ const level = 'level_junction';
141
+ const wall = (id, start, end) => WallNode.parse({ id, parentId: level, start, end });
142
+ const walls = [
143
+ wall('wall_long', [0, 0], [10, 0]),
144
+ wall('wall_ne', [10, 0], [10, 4]),
145
+ wall('wall_nn', [10, 4], [0, 4]),
146
+ wall('wall_nw', [0, 4], [0, 0]),
147
+ wall('wall_sw', [0, 0], [0, -3]),
148
+ wall('wall_ss', [0, -3], [6, -3]),
149
+ wall('wall_se', [6, -3], [6, 0]),
150
+ ];
151
+ const nodes = [
152
+ SiteNode.parse({ id: 'site_junction', children: ['building_junction'] }),
153
+ BuildingNode.parse({ id: 'building_junction', parentId: 'site_junction', children: [level] }),
154
+ LevelNode.parse({
155
+ id: level,
156
+ parentId: 'building_junction',
157
+ level: 0,
158
+ children: walls.map((node) => node.id),
159
+ }),
160
+ ...walls,
161
+ ];
162
+ return {
163
+ nodes: Object.fromEntries(nodes.map((node) => [node.id, node])),
164
+ rootNodeIds: ['site_junction'],
165
+ };
166
+ }
167
+ const fields = (nodes, id) => nodes[id];
168
+ /** The problems with a node's fields that a case wants gone. */
169
+ const gone = (id, ...keys) => (_result, nodes) => keys.filter((key) => fields(nodes, id)[key] !== undefined).map((key) => `${id}.${key} is set`);
170
+ /** The wall's slot on a face, as the face shows it. */
171
+ const face = (nodes, id, side) => fields(nodes, id).slots?.[side];
172
+ /** What set_material served on walls and roofs, and the other parts its "surface" slot reached. */
173
+ export const SET_MATERIAL_CASES = [
174
+ {
175
+ name: "set_material slot 'exterior' on a run of walls (a stored Pro call): paint role exterior, the face turned out of the rooms",
176
+ tool: 'paint',
177
+ scene: finishScene,
178
+ input: { targets: ['wall_s', 'wall_e'], role: 'exterior', material: SIDING },
179
+ expect: {
180
+ result: {
181
+ ok: true,
182
+ painted: [
183
+ { id: 'wall_s', roles: ['b'] },
184
+ { id: 'wall_e', roles: ['b'] },
185
+ ],
186
+ },
187
+ after: { wall_s: { slots: { b: SIDING } }, wall_e: { slots: { b: SIDING } } },
188
+ check: (_result, nodes) => ['wall_s', 'wall_e']
189
+ .filter((id) => face(nodes, id, 'a') !== undefined)
190
+ .map((id) => `${id}'s inside face was painted`),
191
+ },
192
+ },
193
+ {
194
+ name: "set_material slot 'interior' with a flat colour (a stored Pro call): paint role interior",
195
+ tool: 'paint',
196
+ scene: finishScene,
197
+ input: { targets: ['wall_n', 'wall_w'], role: 'interior', material: SOFT_WHITE },
198
+ expect: {
199
+ result: {
200
+ painted: [
201
+ { id: 'wall_n', roles: ['a'] },
202
+ { id: 'wall_w', roles: ['a'] },
203
+ ],
204
+ },
205
+ after: { wall_n: { slots: { a: SOFT_WHITE } }, wall_w: { slots: { a: SOFT_WHITE } } },
206
+ },
207
+ },
208
+ {
209
+ name: "set_material 'interior' on a partition painted one face; paint paints both, a room on each",
210
+ tool: 'paint',
211
+ scene: finishScene,
212
+ input: { targets: ['wall_mid'], role: 'interior', material: SOFT_WHITE },
213
+ expect: {
214
+ result: { painted: [{ id: 'wall_mid', roles: ['a', 'b'] }] },
215
+ after: { wall_mid: { slots: { a: SOFT_WHITE, b: SOFT_WHITE } } },
216
+ },
217
+ },
218
+ {
219
+ name: "set_material 'exterior' on a partition painted a face inside the house; paint refuses: it has none",
220
+ tool: 'paint',
221
+ scene: finishScene,
222
+ input: { targets: ['wall_mid'], role: 'exterior', material: SIDING },
223
+ expect: { refusal: 'side_unknown', mentions: ['wall_mid', 'a or b'] },
224
+ },
225
+ {
226
+ name: "set_material 'exterior' on a wall no room touches: paint reads its stored sides, as set_material did",
227
+ tool: 'paint',
228
+ scene: finishScene,
229
+ input: { targets: ['wall_garden'], role: 'exterior', material: SIDING },
230
+ expect: {
231
+ result: { painted: [{ id: 'wall_garden', roles: ['a'] }] },
232
+ after: { wall_garden: { slots: { a: SIDING } } },
233
+ },
234
+ },
235
+ {
236
+ name: "set_material 'exterior' on a wall no room touches and no side stored painted face b (its guess); paint asks for the face",
237
+ tool: 'paint',
238
+ scene: finishScene,
239
+ input: { targets: ['wall_free'], role: 'exterior', material: SIDING },
240
+ expect: { refusal: 'side_unknown', mentions: ['wall_free', 'a or b'] },
241
+ },
242
+ {
243
+ name: "set_material 'interior' on a wall with rooms along all of one face and part of the other painted its stored side; paint asks for the face, as the part face is the garden's past its room",
244
+ tool: 'paint',
245
+ scene: junctionScene,
246
+ input: { targets: ['wall_long'], role: 'interior', material: SOFT_WHITE },
247
+ expect: { refusal: 'side_unknown', mentions: ['wall_long', 'face b', 'a or b'] },
248
+ },
249
+ {
250
+ name: "set_material 'exterior' on that wall painted its stored side; paint asks for the face",
251
+ tool: 'paint',
252
+ scene: junctionScene,
253
+ input: { targets: ['wall_long'], role: 'exterior', material: SIDING },
254
+ expect: { refusal: 'side_unknown', mentions: ['wall_long', 'face b', 'a or b'] },
255
+ },
256
+ {
257
+ name: 'set_material with no slot on a wall painted both faces: paint with no role does too',
258
+ tool: 'paint',
259
+ scene: finishScene,
260
+ input: { targets: ['wall_e'], material: SOFT_WHITE },
261
+ expect: {
262
+ result: { painted: [{ id: 'wall_e', roles: ['a', 'b'] }] },
263
+ after: { wall_e: { slots: { a: SOFT_WHITE, b: SOFT_WHITE } } },
264
+ },
265
+ },
266
+ {
267
+ name: "set_material took faces 'a' and 'b': so does paint",
268
+ tool: 'paint',
269
+ scene: finishScene,
270
+ input: { targets: ['wall_w'], role: 'b', material: SIDING },
271
+ expect: {
272
+ result: { painted: [{ id: 'wall_w', roles: ['b'] }] },
273
+ after: { wall_w: { slots: { b: SIDING } } },
274
+ },
275
+ },
276
+ {
277
+ name: "set_material took a bare library id ('siding-lap-white'): paint takes it, and writes library:<id>",
278
+ tool: 'paint',
279
+ scene: finishScene,
280
+ input: { targets: ['wall_s'], role: 'exterior', material: 'siding-lap-white' },
281
+ expect: { result: { finish: SIDING }, after: { wall_s: { slots: { b: SIDING } } } },
282
+ },
283
+ {
284
+ name: "set_material on a roof, slot 'top' (its default): paint's default role on a roof is top",
285
+ tool: 'paint',
286
+ scene: finishScene,
287
+ input: { targets: ['roof_finish'], material: SHINGLES },
288
+ expect: {
289
+ result: { painted: [{ id: 'roof_finish', roles: ['top'] }] },
290
+ after: { roof_finish: { topMaterialPreset: SHINGLES } },
291
+ },
292
+ },
293
+ {
294
+ name: "set_material on a roof whose segment has its own covering: the roof's shows, the segment's goes",
295
+ tool: 'paint',
296
+ scene: finishScene,
297
+ input: { targets: ['roof_finish'], role: 'top', material: SHINGLES },
298
+ expect: {
299
+ result: { painted: [{ id: 'roof_finish', roles: ['top'] }] },
300
+ after: { roof_finish: { topMaterialPreset: SHINGLES } },
301
+ check: gone('rseg_own', 'topMaterialPreset', 'topMaterial'),
302
+ },
303
+ },
304
+ {
305
+ name: "a segment's catch-all finish (an older paint) stays on its other surfaces when the roof's top is painted",
306
+ tool: 'paint',
307
+ scene: finishScene,
308
+ input: { targets: ['roof_finish'], role: 'top', material: SHINGLES },
309
+ expect: {
310
+ result: { painted: [{ id: 'roof_finish', roles: ['top'] }] },
311
+ after: { rseg_legacy: { edgeMaterialPreset: CLAY_TILES, wallMaterialPreset: CLAY_TILES } },
312
+ check: gone('rseg_legacy', 'materialPreset', 'topMaterialPreset'),
313
+ },
314
+ },
315
+ {
316
+ name: 'set_material on a roof segment painted its roof: so does paint, and says so',
317
+ tool: 'paint',
318
+ scene: finishScene,
319
+ input: { targets: ['rseg_plain'], material: SHINGLES },
320
+ expect: {
321
+ result: { painted: [{ id: 'roof_finish', roles: ['top'] }] },
322
+ after: { roof_finish: { topMaterialPreset: SHINGLES } },
323
+ mentions: ['rseg_plain is a roof segment'],
324
+ check: (result, nodes) => [
325
+ ...gone('rseg_plain', 'topMaterialPreset')(result, nodes),
326
+ ...gone('rseg_own', 'topMaterialPreset')(result, nodes),
327
+ ],
328
+ },
329
+ },
330
+ {
331
+ name: "set_material slot 'gable' (also 'edge', 'trim'): paint role edge, the gable ends and trim band",
332
+ tool: 'paint',
333
+ scene: finishScene,
334
+ input: { targets: ['roof_finish'], role: 'edge', material: 'library:preset-nearblack' },
335
+ expect: {
336
+ result: { painted: [{ id: 'roof_finish', roles: ['edge'] }] },
337
+ after: { roof_finish: { edgeMaterialPreset: 'library:preset-nearblack' } },
338
+ },
339
+ },
340
+ {
341
+ name: "set_material slot 'soffit' (also 'fascia', 'deck', 'wall'): paint role wall, the fascia and soffit",
342
+ tool: 'paint',
343
+ scene: finishScene,
344
+ input: { targets: ['rseg_own'], role: 'wall', material: 'library:siding-lap-cedar' },
345
+ expect: {
346
+ result: { painted: [{ id: 'roof_finish', roles: ['wall'] }] },
347
+ after: { roof_finish: { wallMaterialPreset: 'library:siding-lap-cedar' } },
348
+ },
349
+ },
350
+ {
351
+ name: "a fascia band with a finish of its own keeps it under role wall; role fascia paints the boards on every segment",
352
+ tool: 'paint',
353
+ scene: finishScene,
354
+ input: { targets: ['rseg_own'], role: 'fascia', material: SOFT_WHITE },
355
+ expect: {
356
+ result: { painted: [{ id: 'roof_finish', roles: ['fascia'] }] },
357
+ after: {
358
+ rseg_plain: { fasciaMaterialPreset: SOFT_WHITE },
359
+ rseg_own: { fasciaMaterialPreset: SOFT_WHITE },
360
+ rseg_legacy: { fasciaMaterialPreset: SOFT_WHITE },
361
+ },
362
+ check: gone('roof_finish', 'fasciaMaterialPreset'),
363
+ },
364
+ },
365
+ {
366
+ name: 'a native material on the fascia boards is kept as a scene material each segment shows',
367
+ tool: 'paint',
368
+ scene: finishScene,
369
+ input: {
370
+ targets: ['roof_finish'],
371
+ role: 'fascia',
372
+ material: { preset: 'custom', properties: { color: '#1f2a36', roughness: 0.6, metalness: 0 } },
373
+ materialName: 'Fascia, slate blue',
374
+ },
375
+ expect: {
376
+ result: {
377
+ painted: [{ id: 'roof_finish', roles: ['fascia'] }],
378
+ createdMaterial: { name: 'Fascia, slate blue' },
379
+ },
380
+ check: (result, nodes) => ['rseg_plain', 'rseg_own', 'rseg_legacy']
381
+ .filter((id) => fields(nodes, id).fasciaMaterialPreset !== `scene:${String(result.materialId)}`)
382
+ .map((id) => `${id}'s boards do not show the material`),
383
+ },
384
+ },
385
+ {
386
+ name: "roof_soffit's fascia on a segment with a catch-all finish (Architect's own writer, settleRoofPaint gone): role wall shows on it",
387
+ tool: 'paint',
388
+ scene: finishScene,
389
+ input: { targets: ['roof_finish'], role: 'wall', material: 'library:preset-nearblack' },
390
+ expect: {
391
+ result: { painted: [{ id: 'roof_finish', roles: ['wall'] }] },
392
+ after: {
393
+ roof_finish: { wallMaterialPreset: 'library:preset-nearblack' },
394
+ rseg_legacy: { topMaterialPreset: CLAY_TILES, edgeMaterialPreset: CLAY_TILES },
395
+ },
396
+ check: gone('rseg_legacy', 'materialPreset', 'wallMaterialPreset'),
397
+ },
398
+ },
399
+ {
400
+ name: "set_material's standing seam (ROOFING metal_black, a metal colour): paint a native metal material",
401
+ tool: 'paint',
402
+ scene: finishScene,
403
+ input: {
404
+ targets: ['roof_finish'],
405
+ material: {
406
+ preset: 'metal',
407
+ properties: { color: '#2b2e32', roughness: 0.55, metalness: 0.45 },
408
+ },
409
+ materialName: 'Standing seam, matte black',
410
+ },
411
+ expect: {
412
+ result: {
413
+ painted: [{ id: 'roof_finish', roles: ['top'] }],
414
+ createdMaterial: { name: 'Standing seam, matte black' },
415
+ },
416
+ check: (result, nodes) => fields(nodes, 'roof_finish').topMaterialPreset === `scene:${String(result.materialId)}`
417
+ ? []
418
+ : ['the roof does not show the standing seam'],
419
+ },
420
+ },
421
+ {
422
+ name: "set_material on a slab, a terrace (its 'surface' default): paint's default on a slab is its surface",
423
+ tool: 'paint',
424
+ scene: finishScene,
425
+ input: { targets: ['slab_finish'], material: 'library:wood-floorplank1' },
426
+ expect: {
427
+ result: { painted: [{ id: 'slab_finish', roles: ['surface'] }] },
428
+ after: { slab_finish: { slots: { surface: 'library:wood-floorplank1' } } },
429
+ },
430
+ },
431
+ {
432
+ name: 'set_material on a ceiling: paint its surface',
433
+ tool: 'paint',
434
+ scene: finishScene,
435
+ input: { targets: ['ceiling_finish'], material: SOFT_WHITE },
436
+ expect: {
437
+ result: { painted: [{ id: 'ceiling_finish', roles: ['surface'] }] },
438
+ after: { ceiling_finish: { slots: { surface: SOFT_WHITE } } },
439
+ },
440
+ },
441
+ {
442
+ name: "set_material's window and door frames ('frame', preset-nearblack): paint role frame",
443
+ tool: 'paint',
444
+ scene: finishScene,
445
+ input: {
446
+ targets: ['window_finish', 'door_finish'],
447
+ role: 'frame',
448
+ material: 'library:preset-nearblack',
449
+ },
450
+ expect: {
451
+ result: {
452
+ painted: [
453
+ { id: 'window_finish', roles: ['frame'] },
454
+ { id: 'door_finish', roles: ['frame'] },
455
+ ],
456
+ },
457
+ after: {
458
+ window_finish: { slots: { frame: 'library:preset-nearblack' } },
459
+ door_finish: { slots: { frame: 'library:preset-nearblack' } },
460
+ },
461
+ },
462
+ },
463
+ {
464
+ name: "set_material on a block ('body'): paint's default on a block is its body",
465
+ tool: 'paint',
466
+ scene: finishScene,
467
+ input: { targets: ['block_pier'], material: 'library:flooring-wallstone1' },
468
+ expect: {
469
+ result: { painted: [{ id: 'block_pier', roles: ['body'] }] },
470
+ after: { block_pier: { slots: { body: 'library:flooring-wallstone1' } } },
471
+ },
472
+ },
473
+ {
474
+ name: "set_material on a stair and its flight ('treads'): paint role treads on both",
475
+ tool: 'paint',
476
+ scene: finishScene,
477
+ input: { targets: ['stair_finish', 'sseg_finish'], role: 'treads', material: 'library:wood-woodplank48' },
478
+ expect: {
479
+ result: {
480
+ painted: [
481
+ { id: 'stair_finish', roles: ['treads'] },
482
+ { id: 'sseg_finish', roles: ['treads'] },
483
+ ],
484
+ },
485
+ after: {
486
+ stair_finish: { slots: { treads: 'library:wood-woodplank48' } },
487
+ sseg_finish: { slots: { treads: 'library:wood-woodplank48' } },
488
+ },
489
+ },
490
+ },
491
+ {
492
+ name: "set_material on a cabinet ('front'): paint role front",
493
+ tool: 'paint',
494
+ scene: finishScene,
495
+ input: { targets: ['cabinet_finish'], role: 'front', material: 'library:preset-navy' },
496
+ expect: {
497
+ result: { painted: [{ id: 'cabinet_finish', roles: ['front'] }] },
498
+ after: { cabinet_finish: { slots: { front: 'library:preset-navy' } } },
499
+ },
500
+ },
501
+ {
502
+ name: "set_material wrote any slot asked ('surface' on a stair, which has none); paint names the stair's",
503
+ tool: 'paint',
504
+ scene: finishScene,
505
+ input: { targets: ['stair_finish'], role: 'surface', material: SOFT_WHITE },
506
+ expect: { refusal: 'unknown_role', mentions: ['treads', 'body'] },
507
+ },
508
+ {
509
+ name: "set_material on a catalog item's slot ('body', its model's slot_body): paint role body writes it, as the editor's Paint does",
510
+ tool: 'paint',
511
+ scene: finishScene,
512
+ input: { targets: ['item_vase'], role: 'body', material: SOFT_WHITE },
513
+ expect: {
514
+ result: { painted: [{ id: 'item_vase', roles: ['body'] }] },
515
+ after: { item_vase: { slots: { glaze: 'library:preset-navy', body: SOFT_WHITE } } },
516
+ mentions: ["an item's surfaces are its model's"],
517
+ },
518
+ },
519
+ {
520
+ name: "set_material on an item's slot named 'exterior' (its model's slot_exterior): on an item it is the slot's name",
521
+ tool: 'paint',
522
+ scene: finishScene,
523
+ input: { targets: ['item_vase'], role: 'exterior', material: SOFT_WHITE },
524
+ expect: {
525
+ result: { painted: [{ id: 'item_vase', roles: ['exterior'] }] },
526
+ after: { item_vase: { slots: { glaze: 'library:preset-navy', exterior: SOFT_WHITE } } },
527
+ },
528
+ },
529
+ {
530
+ name: "set_material with no slot on an item wrote a 'surface' it may lack; paint asks for the role, naming those painted",
531
+ tool: 'paint',
532
+ scene: finishScene,
533
+ input: { targets: ['item_vase'], material: SOFT_WHITE },
534
+ expect: { refusal: 'unknown_role', mentions: ['item_vase', 'glaze'] },
535
+ },
536
+ {
537
+ name: "paint with no role on a catalog item lists the surfaces its model has, when the host read them",
538
+ tool: 'paint',
539
+ scene: finishScene,
540
+ input: { targets: ['item_vase'], material: SOFT_WHITE },
541
+ context: {
542
+ catalog: VASE_LIBRARY,
543
+ assetViews: { vase: { surfaces: ['body', 'glaze', 'rim'] } },
544
+ },
545
+ expect: {
546
+ refusal: 'unknown_role',
547
+ mentions: ['its surfaces: body, glaze, rim', 'painted so far: glaze'],
548
+ },
549
+ },
550
+ {
551
+ name: 'paint with no role on a catalog item whose model has no named surface asks for a role, as before',
552
+ tool: 'paint',
553
+ scene: finishScene,
554
+ input: { targets: ['item_vase'], material: SOFT_WHITE },
555
+ context: { catalog: VASE_LIBRARY, assetViews: { vase: { surfaces: [] } } },
556
+ expect: { refusal: 'unknown_role', mentions: ['(painted so far: glaze)'] },
557
+ },
558
+ {
559
+ name: "set_material took a bare community id ('mtl_…'): paint writes it as library:<id>",
560
+ tool: 'paint',
561
+ scene: finishScene,
562
+ input: { targets: ['block_pier'], material: 'mtl_terrazzo_green' },
563
+ expect: {
564
+ result: { finish: 'library:mtl_terrazzo_green' },
565
+ after: { block_pier: { slots: { body: 'library:mtl_terrazzo_green' } } },
566
+ },
567
+ },
568
+ {
569
+ name: 'set_material skipped an id not in the scene and painted the rest; paint refuses the call, painting nothing',
570
+ tool: 'paint',
571
+ scene: finishScene,
572
+ input: { targets: ['wall_s', 'wall_gone'], role: 'exterior', material: SIDING },
573
+ expect: { refusal: 'target_not_found', mentions: ['wall_gone'] },
574
+ },
575
+ {
576
+ name: "set_material answered an unknown id with a plain text; paint refuses it with the library's nearest",
577
+ tool: 'paint',
578
+ scene: finishScene,
579
+ input: { targets: ['wall_s'], role: 'exterior', material: 'library:siding-vinyl-beige' },
580
+ expect: { refusal: 'unknown_material', mentions: ['siding-vinyl-beige', 'search_materials'] },
581
+ },
582
+ ];
583
+ /** What list_materials served: the whole library, a surface, a kind, a word. */
584
+ export const LIST_MATERIALS_CASES = [
585
+ {
586
+ name: 'list_materials with no filter listed the library: a browse with no words lists all of it by name',
587
+ tool: 'search_materials',
588
+ scene: finishScene,
589
+ input: { queries: [{}] },
590
+ expect: {
591
+ result: {},
592
+ check: (result) => {
593
+ const [group] = result.groups;
594
+ const refs = new Set(group.results.map((material) => material.ref));
595
+ const labels = group.results.map((material) => material.label);
596
+ return [
597
+ ...MATERIAL_CATALOG.filter((material) => !refs.has(`library:${material.id}`)).map((material) => `${material.id} is not listed`),
598
+ ...(labels.join() === [...labels].sort((a, b) => a.localeCompare(b)).join()
599
+ ? []
600
+ : ['not by name']),
601
+ ...(group.more === undefined ? [] : [`${group.more} materials left out`]),
602
+ ];
603
+ },
604
+ },
605
+ },
606
+ {
607
+ name: "list_materials by surface ({surface: 'floor'}, a stored Pro call): a browse of the floor",
608
+ tool: 'search_materials',
609
+ scene: finishScene,
610
+ input: { queries: [{ surface: 'floor' }] },
611
+ expect: {
612
+ result: {},
613
+ check: (result) => {
614
+ const [group] = result.groups;
615
+ return [
616
+ ...(group.results.some((material) => material.ref === 'library:wood-floorplank1')
617
+ ? []
618
+ : ['no flooring listed']),
619
+ ...group.results
620
+ .filter(({ surfaces }) => surfaces.length && !surfaces.includes('floor'))
621
+ .map(({ ref }) => `${ref} does not suit a floor`),
622
+ ];
623
+ },
624
+ },
625
+ },
626
+ {
627
+ name: "list_materials by category ('roofing'): a browse of a kind",
628
+ tool: 'search_materials',
629
+ scene: finishScene,
630
+ input: { queries: [{ kind: 'roofing' }] },
631
+ expect: {
632
+ result: {},
633
+ check: (result) => {
634
+ const [group] = result.groups;
635
+ return [
636
+ ...(group.kind === 'roofing' ? [] : ['the group does not say its kind']),
637
+ ...(group.results.some(({ ref }) => ref === SHINGLES) ? [] : ['no shingles listed']),
638
+ ...group.results
639
+ .filter(({ kind }) => kind !== 'roofing')
640
+ .map(({ ref }) => `${ref} is not roofing`),
641
+ ];
642
+ },
643
+ },
644
+ },
645
+ {
646
+ name: "list_materials by category 'paint' (a stored Pro call; no such category, so nothing listed): a browse of the flat colours",
647
+ tool: 'search_materials',
648
+ scene: finishScene,
649
+ input: { queries: [{ kind: 'colors' }] },
650
+ expect: {
651
+ result: {},
652
+ check: (result) => {
653
+ const [group] = result.groups;
654
+ return [
655
+ ...(group.results.some(({ ref }) => ref === SOFT_WHITE) ? [] : ['no soft white listed']),
656
+ ...group.results
657
+ .filter(({ kind }) => kind !== 'colors')
658
+ .map(({ ref }) => `${ref} is not a flat colour`),
659
+ ];
660
+ },
661
+ },
662
+ },
663
+ {
664
+ name: "list_materials by a word ('stucco'): search the word",
665
+ tool: 'search_materials',
666
+ scene: finishScene,
667
+ input: { queries: [{ query: 'stucco' }] },
668
+ expect: {
669
+ result: {},
670
+ check: (result) => {
671
+ const [group] = result.groups;
672
+ return group.results[0]?.ref === 'library:concrete-stucco' ? [] : ['stucco is not first'];
673
+ },
674
+ },
675
+ },
676
+ {
677
+ name: "list_materials listed every match of a word ('wood', 23 then): a search lists 12 at a time, saying how many more and the offset that lists them",
678
+ tool: 'search_materials',
679
+ scene: finishScene,
680
+ input: { queries: [{ query: 'wood' }, { query: 'wood', offset: 12 }] },
681
+ expect: {
682
+ result: {},
683
+ check: (result) => {
684
+ const [first, second] = result.groups;
685
+ const more = first.more ?? 0;
686
+ const refs = [...first.results, ...second.results].map(({ ref }) => ref);
687
+ return [
688
+ ...(first.results.length === 12 && first.next === 12 && more > 0
689
+ ? []
690
+ : ['the first page does not say what is left']),
691
+ ...(second.results.length === Math.min(12, more) &&
692
+ (second.more ?? 0) === more - second.results.length
693
+ ? []
694
+ : ['the next page does not list the rest']),
695
+ ...(new Set(refs).size === refs.length ? [] : ['a material listed twice']),
696
+ ];
697
+ },
698
+ },
699
+ },
700
+ {
701
+ name: "list_materials matched nothing for a word too short or common ('tv', 'for the'): a search lists none, never the whole library",
702
+ tool: 'search_materials',
703
+ scene: finishScene,
704
+ input: { queries: [{ query: 'tv' }, { query: 'for the' }] },
705
+ expect: {
706
+ result: {
707
+ groups: [
708
+ { query: 'tv', results: [], missing: ['tv'] },
709
+ { query: 'for the', results: [], missing: ['for', 'the'] },
710
+ ],
711
+ },
712
+ },
713
+ },
714
+ {
715
+ name: "list_materials matched any piece of an id ('plank48', '48'): so does a search",
716
+ tool: 'search_materials',
717
+ scene: finishScene,
718
+ input: { queries: [{ query: 'plank48' }, { query: '48' }] },
719
+ expect: {
720
+ result: {},
721
+ check: (result) => {
722
+ const groups = result.groups;
723
+ return groups
724
+ .filter((group) => !group.results.some(({ ref }) => ref === 'library:wood-woodplank48'))
725
+ .map((_, index) => `query ${index}: no wood-woodplank48`);
726
+ },
727
+ },
728
+ },
729
+ {
730
+ name: "list_materials matched three letters inside an id ('cco' of concrete-stucco): a search does when no word answers them",
731
+ tool: 'search_materials',
732
+ scene: finishScene,
733
+ input: { queries: [{ query: 'cco' }] },
734
+ expect: {
735
+ result: {},
736
+ check: (result) => {
737
+ const [group] = result.groups;
738
+ return group.results.some(({ ref }) => ref === 'library:concrete-stucco') && !group.missing
739
+ ? []
740
+ : ['no stucco found'];
741
+ },
742
+ },
743
+ },
744
+ {
745
+ name: "list_materials matched a word inside an id ('lap'): a search matches an id's words",
746
+ tool: 'search_materials',
747
+ scene: finishScene,
748
+ input: { queries: [{ query: 'lap', surface: 'wall' }] },
749
+ expect: {
750
+ result: {},
751
+ check: (result) => {
752
+ const [group] = result.groups;
753
+ return group.results.some(({ ref }) => ref === SIDING) ? [] : ['no lap siding found'];
754
+ },
755
+ },
756
+ },
757
+ ];
758
+ export const FINISH_CASES = [...SET_MATERIAL_CASES, ...LIST_MATERIALS_CASES];