@pascal-app/core 1.0.4 → 1.0.5

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