@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,143 @@
1
+ import { area, intersection, union } from '../lib/polygon-boolean.js';
2
+ import { polygonInteriorPoint } from '../lib/polygon-label.js';
3
+ import { distanceToSegment } from '../lib/room-topology-index.js';
4
+ import { detectSpacesForLevel } from '../lib/space-detection.js';
5
+ import { nodesOnLevel } from './scene-queries.js';
6
+ /** No name, or the bare word an older scene or a blank name leaves: "Room", "Zone". */
7
+ const PLACEHOLDER_NAME = /^\s*(room|zone)?\s*$/i;
8
+ /** A space is covered, a room enclosed, a zone in a space, and a zone walled like a room, past half. */
9
+ const HALF = 0.5;
10
+ /** How far past a wall's face its outline may run and still be walled, m. */
11
+ const ALONG_WALL = 0.1;
12
+ /** The step a zone's outline is sampled at to see how much of it walls run along, m. */
13
+ const OUTLINE_STEP = 0.25;
14
+ /** A wall that bounds a room stands at least this high, m; a garden wall is lower. */
15
+ const ROOM_WALL_HEIGHT = 2;
16
+ const round = (value) => Math.round(value * 100) / 100;
17
+ function shapeOf(outer, holes = []) {
18
+ const polygon = { outer, holes };
19
+ const xs = outer.map(([x]) => x);
20
+ const zs = outer.map(([, z]) => z);
21
+ return {
22
+ polygon,
23
+ box: [Math.min(...xs), Math.min(...zs), Math.max(...xs), Math.max(...zs)],
24
+ area: area([polygon]),
25
+ };
26
+ }
27
+ const overlap = (a, b) => a.box[0] < b.box[2] && b.box[0] < a.box[2] && a.box[1] < b.box[3] && b.box[1] < a.box[3];
28
+ /** How much of `part` the shapes cover, 0 to 1; only the shapes whose boxes meet it are joined. */
29
+ function covered(part, cover) {
30
+ if (part.area <= 0)
31
+ return 0;
32
+ const near = cover.filter((shape) => overlap(part, shape));
33
+ if (near.length === 0)
34
+ return 0;
35
+ const joined = near.length === 1 ? near[0].polygon : union(near.map((shape) => shape.polygon));
36
+ return area(intersection(part.polygon, joined)) / part.area;
37
+ }
38
+ /** How much of a zone's outline runs along a wall, 0 to 1: a zone mostly walled is meant as a room. */
39
+ function walled(zone, walls) {
40
+ const ring = zone.polygon;
41
+ let along = 0;
42
+ let samples = 0;
43
+ ring.forEach((start, i) => {
44
+ const end = ring[(i + 1) % ring.length];
45
+ const steps = Math.max(1, Math.ceil(Math.hypot(end[0] - start[0], end[1] - start[1]) / OUTLINE_STEP));
46
+ for (let k = 0; k < steps; k++) {
47
+ const t = (k + 0.5) / steps;
48
+ const point = [
49
+ start[0] + (end[0] - start[0]) * t,
50
+ start[1] + (end[1] - start[1]) * t,
51
+ ];
52
+ samples++;
53
+ if (walls.some((wall) => distanceToSegment(point, wall.start, wall.end) <=
54
+ (wall.thickness ?? 0.2) / 2 + ALONG_WALL))
55
+ along++;
56
+ }
57
+ });
58
+ return samples > 0 ? along / samples : 0;
59
+ }
60
+ const label = (zone) => PLACEHOLDER_NAME.test(zone.name) ? zone.id : `"${zone.name}" (${zone.id})`;
61
+ /**
62
+ * A room is a zone with `spaceRole: 'room'`, or a generic one walls of a room's height bound along
63
+ * most of its outline, which may be a room drawn before its last wall (no reconcile could adopt
64
+ * it) or a courtyard, so what is found on it is info; a zone garden walls bound, or no walls (an
65
+ * analysis area), is no room. Every space the walls enclose wants one zone over it (any zone: a drawn one is
66
+ * adopted as the room on load): none, or several rooms lying in it (the reconciler's "Room N"
67
+ * beside a zone drawn over it, a plan's rooms split by lines no wall draws), is a finding. Every
68
+ * room wants walls or separators closing around it, and a name. A terrace closes with separators,
69
+ * so it is enclosed; a room a person declared open (`enclosureStatus: 'open'` on a room the walls
70
+ * never derived) needs no walls; an automatic room the reconciler opened when its walls stopped
71
+ * closing it does.
72
+ */
73
+ export function roomFindings(nodes, levelId, levelName) {
74
+ const onLevel = nodesOnLevel(nodes, levelId);
75
+ const walls = onLevel.filter((node) => node.type === 'wall');
76
+ const boundaries = onLevel.filter((node) => node.type === 'wall' || node.type === 'separator');
77
+ const zones = onLevel.filter((node) => node.type === 'zone' && node.polygon.length >= 3);
78
+ const { spaces } = detectSpacesForLevel(levelId, boundaries);
79
+ const spaceShapes = spaces.map((space) => shapeOf(space.polygon, space.holes));
80
+ const zoneShapes = zones.map((zone) => shapeOf(zone.polygon, zone.holes));
81
+ // A wall with no height of its own stands as high as its storey.
82
+ const roomWalls = walls.filter((wall) => (wall.height ?? ROOM_WALL_HEIGHT) >= ROOM_WALL_HEIGHT);
83
+ const rooms = zones.map((zone) => zone.spaceRole === 'room' || walled(zone, roomWalls) >= HALF);
84
+ const issues = [];
85
+ spaces.forEach((space, index) => {
86
+ const shape = spaceShapes[index];
87
+ // A mezzanine stands over its room, and a zone no room (an analysis area) lies in it: neither
88
+ // splits the space.
89
+ const inside = zones.filter((zone, z) => rooms[z] && zone.floor?.support !== 'open' && covered(zoneShapes[z], [shape]) >= HALF);
90
+ const noRoom = covered(shape, zoneShapes) < HALF;
91
+ if (!noRoom && inside.length < 2)
92
+ return;
93
+ const spaceArea = round(shape.area);
94
+ const [x, z] = polygonInteriorPoint(space, true).map(round);
95
+ const place = {
96
+ levelId,
97
+ area: spaceArea,
98
+ at: [x, z],
99
+ wallIds: space.wallIds,
100
+ };
101
+ const where = `On ${levelName}, walls ${space.wallIds.join(', ')} enclose a ${spaceArea.toFixed(1)} m² space at (${x.toFixed(2)}, ${z.toFixed(2)})`;
102
+ issues.push(noRoom
103
+ ? { type: 'space_no_room', message: `${where} with no room over it.`, ...place }
104
+ : {
105
+ type: 'space_many_rooms',
106
+ message: `${where} with ${inside.length} rooms over it and no wall between them: ${inside.map(label).join(', ')}. Keep one room per space: name the space's room (create_room over the whole space names it) and delete the others, or divide the space with a wall or separator.`,
107
+ ...place,
108
+ zoneIds: inside.map((zone) => zone.id),
109
+ });
110
+ });
111
+ zones.forEach((zone, index) => {
112
+ if (!rooms[index])
113
+ return;
114
+ const room = zone.spaceRole === 'room';
115
+ const unnamed = PLACEHOLDER_NAME.test(zone.name);
116
+ const declaredOpen = zone.enclosureStatus === 'open' && !zone.autoFromWalls;
117
+ const opened = zone.enclosureStatus === 'open' && zone.autoFromWalls;
118
+ if (!declaredOpen && (opened || covered(zoneShapes[index], spaceShapes) < HALF))
119
+ issues.push(room
120
+ ? {
121
+ type: 'room_not_enclosed',
122
+ message: `Room ${label(zone)} on ${levelName}: its walls do not close around it.`,
123
+ levelId,
124
+ zoneId: zone.id,
125
+ }
126
+ : {
127
+ type: 'room_not_enclosed',
128
+ message: `Zone ${label(zone)} on ${levelName}: walls run along most of it and do not close around it, a room missing a wall or a courtyard.`,
129
+ severity: 'info',
130
+ levelId,
131
+ zoneId: zone.id,
132
+ });
133
+ if (unnamed)
134
+ issues.push({
135
+ type: 'room_unnamed',
136
+ message: `Room ${zone.id} on ${levelName} has no name${zone.name.trim() ? ` but "${zone.name.trim()}"` : ''}.`,
137
+ severity: 'info',
138
+ levelId,
139
+ zoneId: zone.id,
140
+ });
141
+ });
142
+ return { spaces: spaces.length, issues };
143
+ }
@@ -0,0 +1,23 @@
1
+ import { type FloorScriptInputs } from '../lib/floor-script.js';
2
+ import { type CompiledGeometryScript } from '../schema/index.js';
3
+ import type { AgentOperation } from './types.js';
4
+ export type SetRoomFloorScriptInput = {
5
+ zoneId: string;
6
+ /** The module compiled for `inputs` (`floorScriptInputs` of the room, read before compiling). */
7
+ compiled: CompiledGeometryScript;
8
+ inputs: FloorScriptInputs;
9
+ } | {
10
+ zoneId: string;
11
+ remove: true;
12
+ };
13
+ /**
14
+ * `setRoomFloorScript`: a room's floor finish built by a three.js module, or the module taken off.
15
+ * The host reads the room's floor (`floorScriptInputs`), compiles the module for it (geometry-script
16
+ * `inputs`: the module reads `params.polygon`, `params.holes`, `params.elevation`, in level
17
+ * coordinates) and stores the artifacts; this writes the result on the zone, with the key of the
18
+ * floor it was built for. When the structure re-derives the room's floor the script is stale and
19
+ * `refreshFinishScripts` runs it again. The script owns the floor's colours: paint on that floor is
20
+ * refused while it is there.
21
+ */
22
+ export declare const setRoomFloorScript: AgentOperation<SetRoomFloorScriptInput>;
23
+ //# sourceMappingURL=room-floor-script.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"room-floor-script.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-floor-script.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,iBAAiB,EAAwC,MAAM,qBAAqB,CAAA;AAElG,OAAO,EAAE,KAAK,sBAAsB,EAAkC,MAAM,WAAW,CAAA;AACvF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAE7C,MAAM,MAAM,uBAAuB,GAC/B;IACE,MAAM,EAAE,MAAM,CAAA;IACd,iGAAiG;IACjG,QAAQ,EAAE,sBAAsB,CAAA;IAChC,MAAM,EAAE,iBAAiB,CAAA;CAC1B,GACD;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,IAAI,CAAA;CAAE,CAAA;AAIpC;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,EAAE,cAAc,CAAC,uBAAuB,CAsDtE,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { refuse } from '../agent-tools/refusal.js';
2
+ import { floorScriptInputs, floorScriptRecord } from '../lib/floor-script.js';
3
+ import { scriptedSize } from '../lib/geometry-script-node.js';
4
+ import { ZoneFloorScript } from '../schema/index.js';
5
+ const round = (value) => Math.round(value * 1000) / 1000;
6
+ /**
7
+ * `setRoomFloorScript`: a room's floor finish built by a three.js module, or the module taken off.
8
+ * The host reads the room's floor (`floorScriptInputs`), compiles the module for it (geometry-script
9
+ * `inputs`: the module reads `params.polygon`, `params.holes`, `params.elevation`, in level
10
+ * coordinates) and stores the artifacts; this writes the result on the zone, with the key of the
11
+ * floor it was built for. When the structure re-derives the room's floor the script is stale and
12
+ * `refreshFinishScripts` runs it again. The script owns the floor's colours: paint on that floor is
13
+ * refused while it is there.
14
+ */
15
+ export const setRoomFloorScript = (nodes, input) => {
16
+ const zone = nodes[input.zoneId];
17
+ if (zone?.type !== 'zone')
18
+ refuse('target_not_found', `${input.zoneId} is not a room in the scene: nothing was changed.`, {
19
+ target: input.zoneId,
20
+ });
21
+ const name = zone.name?.trim() || zone.id;
22
+ if ('remove' in input) {
23
+ if (!zone.floor?.script)
24
+ return { result: { ok: true, zoneId: zone.id, removed: false } };
25
+ const { script: _, ...floor } = zone.floor;
26
+ return {
27
+ result: { ok: true, zoneId: zone.id, removed: true },
28
+ changes: {
29
+ update: [{ id: zone.id, data: { floor: Object.keys(floor).length ? floor : undefined } }],
30
+ },
31
+ };
32
+ }
33
+ const { compiled } = input;
34
+ if (compiled.language !== 'three')
35
+ refuse('three_only', `A room's floor script is a three.js module: it is given the room's floor, which a Blender build is not. Nothing was changed on ${name}.`, { target: zone.id });
36
+ if (!floorScriptInputs(nodes, zone.id))
37
+ refuse('no_floor', `${name} has no floor to build on (its walls do not close it, or its floor is off): nothing was changed.`, { target: zone.id });
38
+ const { min, max } = compiled.manifest.bounds;
39
+ if (![...min, ...max].every(Number.isFinite))
40
+ refuse('unmeasurable_object', `${name}'s floor script built geometry that cannot be measured: a mesh in it has a position, rotation or scale that is not a number. Nothing was changed.`, { target: zone.id });
41
+ const script = ZoneFloorScript.parse(floorScriptRecord(compiled, input.inputs, zone.floor?.script));
42
+ const floor = { ...zone.floor, script };
43
+ return {
44
+ result: {
45
+ ok: true,
46
+ zoneId: zone.id,
47
+ size: scriptedSize(compiled.manifest).map(round),
48
+ slots: compiled.manifest.slots.map((slot) => slot.id),
49
+ triangles: compiled.manifest.triangles,
50
+ note: `The script owns ${name}'s floor colours: painting that floor is refused until the script is removed. It runs again whenever the room's floor changes.`,
51
+ },
52
+ changes: { update: [{ id: zone.id, data: { floor } }] },
53
+ };
54
+ };
@@ -25,7 +25,7 @@ export declare const ROOM_OPERATIONS: {
25
25
  width: number;
26
26
  depth: number;
27
27
  };
28
- drawnOn?: "floor" | "ceiling";
28
+ drawnOn?: 'floor' | 'ceiling';
29
29
  cutsPrimary?: boolean;
30
30
  cutsAdjacent?: boolean;
31
31
  }>;
@@ -80,7 +80,7 @@ export declare const ROOM_OPERATIONS: {
80
80
  }>;
81
81
  readonly delete_zone: AgentOperation<{
82
82
  zoneId: string;
83
- contents: "delete" | "keep";
83
+ contents: 'delete' | 'keep';
84
84
  }>;
85
85
  };
86
86
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"room-structure.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-structure.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,cAAc,EAAmD,MAAM,SAAS,CAAA;AA6G9F,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAUD,KAAK,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AA+JzD,uEAAuE;AACvE,eAAO,MAAM,eAAe;;kBA7JhB,MAAM;iBACP,MAAM;mBACJ,MAAM,EAAE;kBACT,MAAM,EAAE,EAAE;eACb;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE;kBACnD,OAAO,GAAG,SAAS;sBACf,OAAO;uBACN,OAAO;;;YAagC,MAAM;;;eAMU,OAAO;;;gBAUrE,MAAM;iBACL,MAAM;eACR,OAAO;;;iCAU0B,MAAM,GAAG,IAAI;;;oBAQzC,MAAM;iBACT,MAAM,EAAE,EAAE;oBACP,MAAM;oBACN,MAAM;;;;mBAgB2D,MAAM,EAAE;;;gBAW7E,MAAM;sBACA,MAAM;mBACT,MAAM;gBACT,OAAO;;;kBAc2C,MAAM;kBAAY,MAAM,EAAE;;;gBAY/B,MAAM;eAAS,OAAO;;;gBAOnE,MAAM;cACR,MAAM,EAAE,EAAE;eACT,MAAM,EAAE,EAAE;iBACR,OAAO;0BACE,MAAM;wBACR,MAAM;;;iBAc6B,MAAM,EAAE;;;gBAMT,MAAM;kBAAY,QAAQ,GAAG,MAAM;;CAyB7E,CAAA"}
1
+ {"version":3,"file":"room-structure.d.ts","sourceRoot":"","sources":["../../src/agent-operations/room-structure.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,cAAc,EAAmD,MAAM,SAAS,CAAA;AA6G9F,KAAK,kBAAkB,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAA;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAUD,KAAK,UAAU,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AA+JzD,uEAAuE;AACvE,eAAO,MAAM,eAAe;aAC1B,iBAAiB;kBA9JP,MAAM;iBACP,MAAM;mBACJ,MAAM,EAAE;kBACT,MAAM,EAAE,EAAE;eACb;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE;kBACnD,OAAO,GAAG,SAAS;sBACf,OAAO;uBACN,OAAO;;aAwJtB,oBAAoB;YA3IkC,MAAM;;aA4I5D,oBAAoB;eAtIkD,OAAO;;aAuI7E,2BAA2B;gBA7HnB,MAAM;iBACL,MAAM;eACR,OAAO;;aA4Hd,sBAAsB;iCAlHkB,MAAM,GAAG,IAAI;;aAmHrD,gBAAgB;oBA3GJ,MAAM;iBACT,MAAM,EAAE,EAAE;oBACP,MAAM;oBACN,MAAM;;aAyGlB,SAAS;aACT,cAAc;mBA1F+D,MAAM,EAAE;;aA2FrF,WAAW;gBAhFH,MAAM;sBACA,MAAM;mBACT,MAAM;gBACT,OAAO;;aA8Ef,kBAAkB;kBAhEwC,MAAM;kBAAY,MAAM,EAAE;;aAiEpF,eAAe;gBArDsC,MAAM;eAAS,OAAO;;aAsD3E,WAAW;gBA/CH,MAAM;cACR,MAAM,EAAE,EAAE;eACT,MAAM,EAAE,EAAE;iBACR,OAAO;0BACE,MAAM;wBACR,MAAM;;aA2CtB,WAAW;iBA7BwC,MAAM,EAAE;;aA8B3D,WAAW;gBAxBuC,MAAM;kBAAY,QAAQ,GAAG,MAAM;;CAyB7E,CAAA"}
@@ -0,0 +1,94 @@
1
+ import { type DesignBrief } from '../agent-tools/design-brief.js';
2
+ import { type AnyNode } from '../schema/index.js';
3
+ import { type SceneMeasure } from './scene-measure.js';
4
+ import type { SceneChanges, SceneNodes } from './types.js';
5
+ /**
6
+ * What an agent session keeps about its own work: the moments it named, and what it made. The core
7
+ * computes and reads these and stores none: each host keeps its record where its sessions live, so
8
+ * a checkpoint is never scene data (it would dirty the scene, enter undo and change its hash).
9
+ */
10
+ /** One node as a checkpoint remembers it: enough to say what it was when it is gone. */
11
+ export type CheckpointNode = {
12
+ type: string;
13
+ levelId: string | null;
14
+ hash: string;
15
+ name?: string;
16
+ };
17
+ /** A node the agent created, kept when it is later deleted: the proof it was there. */
18
+ export type MadeEntry = {
19
+ id: string;
20
+ type: string;
21
+ levelId: string | null;
22
+ name?: string;
23
+ };
24
+ export type SessionCheckpoint = {
25
+ name: string;
26
+ /** The registered families' places, for `changesSince` (windows, lit rooms…). */
27
+ measure: SceneMeasure;
28
+ nodes: Record<string, CheckpointNode>;
29
+ /** Issue ids an older version recorded; records taken now write none. */
30
+ issues: string[];
31
+ /** How many entries of the session's `made` list there were: what follows was made after it. */
32
+ madeAt: number;
33
+ };
34
+ export type SessionRecord = {
35
+ checkpoints: Record<string, SessionCheckpoint>;
36
+ made: MadeEntry[];
37
+ /** The design brief in force: the last one written, which furnishing follows (design_brief). */
38
+ designBrief?: DesignBrief;
39
+ /** The catalog ids view_assets showed: a brief keeps a catalog piece as it is only after one. */
40
+ viewed?: string[];
41
+ };
42
+ /**
43
+ * What an operation or a write asks its host to keep; a `designBrief` of null takes the brief away,
44
+ * `viewed` adds the catalog ids view_assets showed and null forgets them.
45
+ */
46
+ export type SessionKeep = {
47
+ checkpoint?: SessionCheckpoint;
48
+ made?: readonly MadeEntry[];
49
+ designBrief?: DesignBrief | null;
50
+ viewed?: readonly string[] | null;
51
+ };
52
+ export declare const EMPTY_SESSION: SessionRecord;
53
+ /** A session names at most this many moments, `start` included. */
54
+ export declare const MAX_CHECKPOINTS = 8;
55
+ /** A checkpoint of a larger scene is refused: it is about 60 bytes a node, kept with the session. */
56
+ export declare const MAX_CHECKPOINT_NODES = 5000;
57
+ /** The made list stops growing here; the session record stays bounded. */
58
+ export declare const MAX_MADE = 20000;
59
+ /** The viewed list keeps the most recent ids up to here. */
60
+ export declare const MAX_VIEWED = 500;
61
+ /**
62
+ * The record after a keep: a checkpoint of the same name is replaced, made entries accumulate. A node
63
+ * is made once, however many writers report it, and the list only ever grows at its end (a
64
+ * checkpoint's `madeAt` indexes into it). What the scene had when the session began was never made
65
+ * by the agent: an undo that puts it back does not make it.
66
+ */
67
+ export declare function keepInSession(session: SessionRecord, keep: SessionKeep): SessionRecord;
68
+ /**
69
+ * A node's fingerprint, eight hex digits. Its children are left out (a wall that gained a door did
70
+ * not change; the door is new) and so are the notes older versions kept in `metadata.coherence`: a
71
+ * session record taken before them must not read them as an edit of the building.
72
+ */
73
+ export declare function hashNode(node: AnyNode): string;
74
+ /** The scene as a checkpoint remembers it: every node's fingerprint and the registered families' places. */
75
+ export declare function takeCheckpoint(nodes: SceneNodes, name: string, madeAt: number): SessionCheckpoint;
76
+ /** The nodes a write created, as the session remembers them. */
77
+ export declare function madeEntries(after: SceneNodes, written: readonly SceneChanges[]): MadeEntry[];
78
+ /**
79
+ * The nodes that are in `after` and were not in `before`: what a writer that diffs made, which is
80
+ * every tool that writes, whatever it calls to do so.
81
+ */
82
+ export declare function createdBetween(before: SceneNodes, after: SceneNodes): MadeEntry[];
83
+ /**
84
+ * What a host keeps at a session's first call, before anything is written: the scene as it stood,
85
+ * under the name `start`. The beginning of the agent's work is always a checkpoint. Nothing when
86
+ * the session has one, or the scene is too large to remember.
87
+ */
88
+ export declare function startOfSession(session: SessionRecord, nodes: SceneNodes): SessionKeep | undefined;
89
+ /**
90
+ * A session record read back from where a host stored it. Anything that is not one is no record:
91
+ * the session starts empty rather than the host failing on what is only a convenience.
92
+ */
93
+ export declare function parseSessionRecord(input: unknown): SessionRecord;
94
+ //# sourceMappingURL=scene-checkpoint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scene-checkpoint.d.ts","sourceRoot":"","sources":["../../src/agent-operations/scene-checkpoint.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,6BAA6B,CAAA;AACjF,OAAO,EAAE,KAAK,OAAO,EAAuB,MAAM,WAAW,CAAA;AAE7D,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAEvD;;;;GAIG;AAEH,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAElG,uFAAuF;AACvF,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE3F,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,iFAAiF;IACjF,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IACrC,yEAAyE;IACzE,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;IAC9C,IAAI,EAAE,SAAS,EAAE,CAAA;IACjB,gGAAgG;IAChG,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,iGAAiG;IACjG,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAClB,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,CAAC,EAAE,iBAAiB,CAAA;IAC9B,IAAI,CAAC,EAAE,SAAS,SAAS,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAA;CAClC,CAAA;AAED,eAAO,MAAM,aAAa,EAAE,aAA6C,CAAA;AAEzE,mEAAmE;AACnE,eAAO,MAAM,eAAe,IAAI,CAAA;AAChC,qGAAqG;AACrG,eAAO,MAAM,oBAAoB,OAAO,CAAA;AACxC,0EAA0E;AAC1E,eAAO,MAAM,QAAQ,QAAS,CAAA;AAC9B,4DAA4D;AAC5D,eAAO,MAAM,UAAU,MAAM,CAAA;AAE7B;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,GAAG,aAAa,CAyBtF;AAiBD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAiB9C;AAKD,4GAA4G;AAC5G,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAgBjG;AAeD,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,SAAS,EAAE,CAK5F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,SAAS,EAAE,CAIjF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,WAAW,GAAG,SAAS,CAIjG;AAuCD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAGhE"}
@@ -0,0 +1,176 @@
1
+ import { z } from 'zod';
2
+ import { DesignBriefRecord } from '../agent-tools/design-brief.js';
3
+ import { isDefaultGutterNode } from '../schema/index.js';
4
+ import { isDerivedNode } from '../store/derived-node-guard.js';
5
+ import { measureScene } from './scene-measure.js';
6
+ import { levelIdOf } from './scene-queries.js';
7
+ export const EMPTY_SESSION = { checkpoints: {}, made: [] };
8
+ /** A session names at most this many moments, `start` included. */
9
+ export const MAX_CHECKPOINTS = 8;
10
+ /** A checkpoint of a larger scene is refused: it is about 60 bytes a node, kept with the session. */
11
+ export const MAX_CHECKPOINT_NODES = 5000;
12
+ /** The made list stops growing here; the session record stays bounded. */
13
+ export const MAX_MADE = 20_000;
14
+ /** The viewed list keeps the most recent ids up to here. */
15
+ export const MAX_VIEWED = 500;
16
+ /**
17
+ * The record after a keep: a checkpoint of the same name is replaced, made entries accumulate. A node
18
+ * is made once, however many writers report it, and the list only ever grows at its end (a
19
+ * checkpoint's `madeAt` indexes into it). What the scene had when the session began was never made
20
+ * by the agent: an undo that puts it back does not make it.
21
+ */
22
+ export function keepInSession(session, keep) {
23
+ const known = new Set(session.made.map((entry) => entry.id));
24
+ const began = session.checkpoints.start?.nodes;
25
+ const fresh = (keep.made ?? []).filter((entry) => {
26
+ if (known.has(entry.id) || began?.[entry.id])
27
+ return false;
28
+ known.add(entry.id);
29
+ return true;
30
+ });
31
+ const designBrief = 'designBrief' in keep ? keep.designBrief : session.designBrief;
32
+ const incomingViewed = new Set(keep.viewed ?? []);
33
+ const viewed = keep.viewed === null
34
+ ? []
35
+ : [
36
+ ...(session.viewed ?? []).filter((id) => !incomingViewed.has(id)),
37
+ ...incomingViewed,
38
+ ].slice(-MAX_VIEWED);
39
+ return {
40
+ checkpoints: keep.checkpoint
41
+ ? { ...session.checkpoints, [keep.checkpoint.name]: keep.checkpoint }
42
+ : session.checkpoints,
43
+ made: fresh.length ? [...session.made, ...fresh].slice(0, MAX_MADE) : session.made,
44
+ ...(designBrief ? { designBrief } : {}),
45
+ ...(viewed.length ? { viewed } : {}),
46
+ };
47
+ }
48
+ const FNV_PRIME = 0x01000193;
49
+ /** Plain JSON in a fixed key order, numbers to a tenth of a millimetre, undefined dropped. */
50
+ function stable(value) {
51
+ if (typeof value === 'number')
52
+ return String(Math.round(value * 1e4) / 1e4);
53
+ if (value === null || typeof value !== 'object')
54
+ return JSON.stringify(value) ?? 'null';
55
+ if (Array.isArray(value))
56
+ return `[${value.map(stable).join(',')}]`;
57
+ const record = value;
58
+ return `{${Object.keys(record)
59
+ .sort()
60
+ .filter((key) => record[key] !== undefined)
61
+ .map((key) => `${JSON.stringify(key)}:${stable(record[key])}`)
62
+ .join(',')}}`;
63
+ }
64
+ /**
65
+ * A node's fingerprint, eight hex digits. Its children are left out (a wall that gained a door did
66
+ * not change; the door is new) and so are the notes older versions kept in `metadata.coherence`: a
67
+ * session record taken before them must not read them as an edit of the building.
68
+ */
69
+ export function hashNode(node) {
70
+ const { children: _children, metadata, ...rest } = node;
71
+ const { coherence: _notes, ...kept } = metadata ?? {};
72
+ let hash = 0x811c9dc5;
73
+ const text = stable({ ...rest, metadata: kept });
74
+ for (let index = 0; index < text.length; index++) {
75
+ hash ^= text.charCodeAt(index);
76
+ hash = Math.imul(hash, FNV_PRIME) >>> 0;
77
+ }
78
+ return hash.toString(16).padStart(8, '0');
79
+ }
80
+ const nameOf = (node) => typeof node.name === 'string' && node.name ? { name: node.name } : {};
81
+ /** The scene as a checkpoint remembers it: every node's fingerprint and the registered families' places. */
82
+ export function takeCheckpoint(nodes, name, madeAt) {
83
+ const remembered = {};
84
+ for (const node of Object.values(nodes))
85
+ remembered[node.id] = {
86
+ type: node.type,
87
+ levelId: levelIdOf(nodes, node.id),
88
+ hash: hashNode(node),
89
+ ...nameOf(node),
90
+ };
91
+ return {
92
+ name,
93
+ measure: measureScene(nodes),
94
+ nodes: remembered,
95
+ issues: [],
96
+ madeAt,
97
+ };
98
+ }
99
+ /**
100
+ * Construction the editor derives from what the agent drew: floor plates, auto ceilings, default
101
+ * gutters. Their ids change as the reconciler rebuilds them, so none is a thing the agent made.
102
+ */
103
+ const isDerivedConstruction = (node) => isDerivedNode(node) || isDefaultGutterNode(node);
104
+ const madeEntry = (nodes, node) => ({
105
+ id: node.id,
106
+ type: node.type,
107
+ levelId: levelIdOf(nodes, node.id),
108
+ ...nameOf(node),
109
+ });
110
+ /** The nodes a write created, as the session remembers them. */
111
+ export function madeEntries(after, written) {
112
+ return written
113
+ .flatMap((changes) => (changes.create ?? []).map(({ node }) => after[node.id] ?? node))
114
+ .filter((node) => !isDerivedConstruction(node))
115
+ .map((node) => madeEntry(after, node));
116
+ }
117
+ /**
118
+ * The nodes that are in `after` and were not in `before`: what a writer that diffs made, which is
119
+ * every tool that writes, whatever it calls to do so.
120
+ */
121
+ export function createdBetween(before, after) {
122
+ return Object.values(after)
123
+ .filter((node) => !(node.id in before) && !isDerivedConstruction(node))
124
+ .map((node) => madeEntry(after, node));
125
+ }
126
+ /**
127
+ * What a host keeps at a session's first call, before anything is written: the scene as it stood,
128
+ * under the name `start`. The beginning of the agent's work is always a checkpoint. Nothing when
129
+ * the session has one, or the scene is too large to remember.
130
+ */
131
+ export function startOfSession(session, nodes) {
132
+ if (session.checkpoints.start || Object.keys(nodes).length > MAX_CHECKPOINT_NODES)
133
+ return undefined;
134
+ return { checkpoint: takeCheckpoint(nodes, 'start', session.made.length) };
135
+ }
136
+ const Place = z.object({ x: z.number(), z: z.number(), name: z.string().optional() });
137
+ const Measure = z.object({
138
+ levels: z.record(z.string(), z.object({ name: z.string(), families: z.record(z.string(), z.array(Place)) })),
139
+ });
140
+ const Remembered = z.object({
141
+ type: z.string(),
142
+ levelId: z.string().nullable(),
143
+ hash: z.string().regex(/^[0-9a-f]{8}$/),
144
+ name: z.string().optional(),
145
+ });
146
+ const Checkpoint = z.object({
147
+ name: z.string().min(1),
148
+ measure: Measure,
149
+ nodes: z
150
+ .record(z.string(), Remembered)
151
+ .refine((nodes) => Object.keys(nodes).length <= MAX_CHECKPOINT_NODES),
152
+ issues: z.array(z.string()),
153
+ madeAt: z.number().int().min(0),
154
+ });
155
+ const Made = z.object({
156
+ id: z.string(),
157
+ type: z.string(),
158
+ levelId: z.string().nullable(),
159
+ name: z.string().optional(),
160
+ });
161
+ const Record_ = z.object({
162
+ checkpoints: z
163
+ .record(z.string(), Checkpoint)
164
+ .refine((checkpoints) => Object.keys(checkpoints).length <= MAX_CHECKPOINTS),
165
+ made: z.array(Made).max(MAX_MADE),
166
+ designBrief: DesignBriefRecord.optional(),
167
+ viewed: z.array(z.string()).max(MAX_VIEWED).optional(),
168
+ });
169
+ /**
170
+ * A session record read back from where a host stored it. Anything that is not one is no record:
171
+ * the session starts empty rather than the host failing on what is only a convenience.
172
+ */
173
+ export function parseSessionRecord(input) {
174
+ const parsed = Record_.safeParse(input);
175
+ return parsed.success ? parsed.data : EMPTY_SESSION;
176
+ }