@holoscript/core 7.0.0 → 8.0.0

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 (345) hide show
  1. package/README.md +2 -2
  2. package/bin/holoscript.cjs +3 -0
  3. package/dist/GLTFPipeline-276GE64O.js +16 -0
  4. package/dist/GLTFPipeline-M7WSSJED.cjs +37 -0
  5. package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
  6. package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
  7. package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
  8. package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
  9. package/dist/HoloScriptRuntime-3URVTKPJ.js +10 -0
  10. package/dist/HoloScriptRuntime-SXEAEU2N.cjs +19 -0
  11. package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
  12. package/dist/USDZExporter-D2HQLQYK.js +1035 -0
  13. package/dist/agents/index.cjs +19 -0
  14. package/dist/agents/index.d.ts +100 -0
  15. package/dist/agents/index.js +17 -0
  16. package/dist/chunk-23J755AR.js +1046 -0
  17. package/dist/chunk-253GBQZY.cjs +627 -0
  18. package/dist/chunk-25IQCHTO.cjs +781 -0
  19. package/dist/chunk-2BSMSUCE.js +1941 -0
  20. package/dist/chunk-2M2DPHKB.js +762 -0
  21. package/dist/chunk-2YSNA2F2.cjs +1274 -0
  22. package/dist/chunk-3AO425MZ.cjs +886 -0
  23. package/dist/chunk-3FOKASKO.cjs +348 -0
  24. package/dist/chunk-3HYYMEXI.cjs +56578 -0
  25. package/dist/chunk-3NFFOWGG.js +4287 -0
  26. package/dist/chunk-3WZEJHUQ.cjs +116 -0
  27. package/dist/chunk-4C57PR42.js +468 -0
  28. package/dist/chunk-4N4SXXWF.js +769 -0
  29. package/dist/chunk-4PDEPEQW.cjs +41 -0
  30. package/dist/chunk-4R6SBXDB.js +45 -0
  31. package/dist/chunk-4V2E7U7Q.cjs +2015 -0
  32. package/dist/chunk-5FSKKMR7.cjs +2092 -0
  33. package/dist/chunk-5GLCTO44.js +161 -0
  34. package/dist/chunk-5JEU52DW.js +382 -0
  35. package/dist/chunk-5S7RKFGR.cjs +446 -0
  36. package/dist/chunk-5WUNN6ZN.cjs +428 -0
  37. package/dist/chunk-62FBK3B7.js +70 -0
  38. package/dist/chunk-6CTRH7HT.cjs +1985 -0
  39. package/dist/chunk-6DPSFNJB.cjs +847 -0
  40. package/dist/chunk-6EX3I5P4.cjs +130 -0
  41. package/dist/chunk-73FELZVJ.cjs +611 -0
  42. package/dist/chunk-7CUEMLDZ.cjs +6445 -0
  43. package/dist/chunk-7HIASF7S.cjs +814 -0
  44. package/dist/chunk-A6KINLZJ.js +236 -0
  45. package/dist/chunk-AIA52I7T.cjs +543 -0
  46. package/dist/chunk-ANXZFVY2.js +113 -0
  47. package/dist/chunk-AYBXB26F.js +2176 -0
  48. package/dist/chunk-B4TFTDG4.js +449 -0
  49. package/dist/chunk-BE4UJCQT.js +623 -0
  50. package/dist/chunk-BRQJKJGT.cjs +20 -0
  51. package/dist/chunk-C2A5DUMF.cjs +689 -0
  52. package/dist/chunk-C37BHB7N.cjs +636 -0
  53. package/dist/chunk-CBJY23VL.js +126 -0
  54. package/dist/chunk-CIWWXYHZ.cjs +50 -0
  55. package/dist/chunk-CXFDRBQU.cjs +672 -0
  56. package/dist/chunk-D54CNIAJ.cjs +413 -0
  57. package/dist/chunk-DAJXW4KX.js +725 -0
  58. package/dist/chunk-DTGBOSEM.cjs +319 -0
  59. package/dist/chunk-E7JP3BS3.cjs +61 -0
  60. package/dist/chunk-EKBKLK7P.js +1169 -0
  61. package/dist/chunk-EKYL4PE3.cjs +404 -0
  62. package/dist/chunk-EUDQTK7N.cjs +4310 -0
  63. package/dist/chunk-EXKSFGSX.cjs +274 -0
  64. package/dist/chunk-EXUP2BUM.cjs +1173 -0
  65. package/dist/chunk-F43YAA34.js +623 -0
  66. package/dist/chunk-FDSGHPAK.js +130 -0
  67. package/dist/chunk-FEWUHQNM.cjs +144 -0
  68. package/dist/chunk-FGGJQRLZ.js +270 -0
  69. package/dist/chunk-FHP6LXJS.js +415 -0
  70. package/dist/chunk-FJPADH77.cjs +666 -0
  71. package/dist/chunk-FYSPZT4V.cjs +169 -0
  72. package/dist/chunk-GIOYPNTH.js +5575 -0
  73. package/dist/chunk-GJNCFRJU.cjs +125 -0
  74. package/dist/chunk-GMP623FG.cjs +1508 -0
  75. package/dist/chunk-GQHQOPXZ.cjs +5580 -0
  76. package/dist/chunk-GQT4TYKY.cjs +4381 -0
  77. package/dist/chunk-GTU2Z2WW.cjs +262 -0
  78. package/dist/chunk-GYZE55MO.js +2007 -0
  79. package/dist/chunk-GZG4KA4E.js +529 -0
  80. package/dist/chunk-H652NHX5.js +600 -0
  81. package/dist/chunk-HCCQLAA4.cjs +74 -0
  82. package/dist/chunk-HINXWAOD.cjs +1049 -0
  83. package/dist/chunk-HYNTS5CP.js +422 -0
  84. package/dist/chunk-HZSPDCXV.cjs +457 -0
  85. package/dist/chunk-HZTDET3N.js +1399 -0
  86. package/dist/chunk-I6XZ5DZF.cjs +488 -0
  87. package/dist/chunk-ILRBGFVD.cjs +72 -0
  88. package/dist/chunk-IPWSXCCN.js +1183 -0
  89. package/dist/chunk-IUTY5WQ2.cjs +424 -0
  90. package/dist/chunk-IVSZDECV.js +882 -0
  91. package/dist/chunk-IVY74O6C.js +247 -0
  92. package/dist/chunk-IZM5VQZD.js +714 -0
  93. package/dist/chunk-J32ZJZJH.js +554 -0
  94. package/dist/chunk-J6M4FPK5.js +421 -0
  95. package/dist/chunk-JC5YBPSF.cjs +984 -0
  96. package/dist/chunk-JCLBKPMX.js +3813 -0
  97. package/dist/chunk-JD7CIZ33.js +1949 -0
  98. package/dist/chunk-JIYN45TV.cjs +2525 -0
  99. package/dist/chunk-JJBE3TIH.cjs +1189 -0
  100. package/dist/chunk-JX7YL6ZE.js +2252 -0
  101. package/dist/chunk-K4VVR7CN.cjs +2433 -0
  102. package/dist/chunk-KEFNV2WM.cjs +2257 -0
  103. package/dist/chunk-KH4CNH66.cjs +424 -0
  104. package/dist/chunk-KJLB4OPV.js +5731 -0
  105. package/dist/chunk-KKFZ3B6J.cjs +557 -0
  106. package/dist/chunk-KKP7JKN4.cjs +6002 -0
  107. package/dist/chunk-KPJL34Y7.cjs +186 -0
  108. package/dist/chunk-KQCN6AKJ.cjs +3042 -0
  109. package/dist/chunk-KVRSTFNH.cjs +72 -0
  110. package/dist/chunk-LICPB5HZ.cjs +1409 -0
  111. package/dist/chunk-LM2VU56C.cjs +37 -0
  112. package/dist/chunk-M56JSP4A.js +400 -0
  113. package/dist/chunk-MBOOR7X4.js +18 -0
  114. package/dist/chunk-MGE5Z4GS.js +608 -0
  115. package/dist/chunk-MXFUTKCO.js +56 -0
  116. package/dist/chunk-MYY4PMWX.cjs +264 -0
  117. package/dist/chunk-N75IH2HY.js +258 -0
  118. package/dist/chunk-NBMHU6SW.js +669 -0
  119. package/dist/chunk-NG77ATEW.cjs +778 -0
  120. package/dist/chunk-NGKREZ36.js +6384 -0
  121. package/dist/chunk-NHWSN2SD.cjs +718 -0
  122. package/dist/chunk-NV4VMVXU.js +421 -0
  123. package/dist/chunk-NW5G5FBQ.js +215 -0
  124. package/dist/chunk-NXZFOPVD.cjs +5737 -0
  125. package/dist/chunk-OBIYPYYS.cjs +1993 -0
  126. package/dist/chunk-OIQYIIO3.cjs +473 -0
  127. package/dist/chunk-OL46QLBJ.js +61 -0
  128. package/dist/chunk-OMXII44L.js +5386 -0
  129. package/dist/chunk-OR4Q2BGL.cjs +759 -0
  130. package/dist/chunk-OSYNRVOV.cjs +243 -0
  131. package/dist/chunk-PGANYCAG.cjs +220 -0
  132. package/dist/chunk-PHENW4MQ.js +65 -0
  133. package/dist/chunk-PHVRG4I2.js +844 -0
  134. package/dist/chunk-Q56TT7IL.js +483 -0
  135. package/dist/chunk-QPOQ7VPI.js +1491 -0
  136. package/dist/chunk-QPSKHBJP.js +5963 -0
  137. package/dist/chunk-QXH7QDSZ.js +1989 -0
  138. package/dist/chunk-R75BSDH7.cjs +50 -0
  139. package/dist/chunk-RARB3MBR.js +207 -0
  140. package/dist/chunk-RVBHAXFG.js +56160 -0
  141. package/dist/chunk-S3MDHNKB.cjs +490 -0
  142. package/dist/chunk-S4W6Z2MN.js +2426 -0
  143. package/dist/chunk-S6YWHCKV.cjs +410 -0
  144. package/dist/chunk-SIEXCILW.js +229 -0
  145. package/dist/chunk-SJBGLS25.cjs +2196 -0
  146. package/dist/chunk-SLU6UPJI.cjs +410 -0
  147. package/dist/chunk-SMIWS6DE.cjs +212 -0
  148. package/dist/chunk-T2QCTZMO.js +811 -0
  149. package/dist/chunk-T5J7ZKP3.cjs +4885 -0
  150. package/dist/chunk-TDCNJHWO.js +341 -0
  151. package/dist/chunk-TG7O4WBC.js +406 -0
  152. package/dist/chunk-THCK6ECW.js +2085 -0
  153. package/dist/chunk-TJHVSBP2.js +439 -0
  154. package/dist/chunk-TVHSPJ4N.cjs +606 -0
  155. package/dist/chunk-U44IKGG7.cjs +5390 -0
  156. package/dist/chunk-UJXISJBN.js +487 -0
  157. package/dist/chunk-UM6C3CGK.js +4375 -0
  158. package/dist/chunk-UMABK6SI.js +686 -0
  159. package/dist/chunk-UOIGFQXC.cjs +9750 -0
  160. package/dist/chunk-URG2SJLK.js +2521 -0
  161. package/dist/chunk-V6MKC2FZ.js +979 -0
  162. package/dist/chunk-VECQYRXL.js +474 -0
  163. package/dist/chunk-VJ3L7CHT.cjs +169 -0
  164. package/dist/chunk-VMLKSV26.js +1216 -0
  165. package/dist/chunk-VVKVQZI6.js +55 -0
  166. package/dist/chunk-W6RW64BB.cjs +1219 -0
  167. package/dist/chunk-W7VDOASB.cjs +639 -0
  168. package/dist/chunk-WDT3JTGM.cjs +483 -0
  169. package/dist/chunk-WJIHFLMJ.js +404 -0
  170. package/dist/chunk-WKX5AMOY.js +309 -0
  171. package/dist/chunk-WNNE3PO3.js +34 -0
  172. package/dist/chunk-WRKUDAZJ.js +3038 -0
  173. package/dist/chunk-WRLUBRKS.cjs +1943 -0
  174. package/dist/chunk-WRNEH5MO.js +3169 -0
  175. package/dist/chunk-WRWEX5ZF.js +658 -0
  176. package/dist/chunk-X3GJPRVK.cjs +3246 -0
  177. package/dist/chunk-XHIV6326.cjs +793 -0
  178. package/dist/chunk-XIVIE43A.cjs +729 -0
  179. package/dist/chunk-XJAN7CZG.cjs +432 -0
  180. package/dist/chunk-XKTPFXGA.js +164 -0
  181. package/dist/chunk-XL6INWKT.js +121 -0
  182. package/dist/chunk-XSFNHP2E.js +632 -0
  183. package/dist/chunk-XT6JY5W5.js +9684 -0
  184. package/dist/chunk-XUILI4KB.cjs +430 -0
  185. package/dist/chunk-XUUVDHIF.cjs +3962 -0
  186. package/dist/chunk-YF2I3MV3.js +46 -0
  187. package/dist/chunk-YIMN575O.js +4847 -0
  188. package/dist/chunk-YIVFJNYV.js +176 -0
  189. package/dist/chunk-YKGPCZEE.cjs +237 -0
  190. package/dist/chunk-YN6V7R3L.cjs +327 -0
  191. package/dist/chunk-YQELFNJV.js +39 -0
  192. package/dist/chunk-YYXH45E2.js +426 -0
  193. package/dist/chunk-ZBQXLH2L.js +756 -0
  194. package/dist/chunk-ZDSYWBIE.cjs +69 -0
  195. package/dist/chunk-ZU7NIRT6.js +325 -0
  196. package/dist/chunk-ZZ7RO2UQ.js +1243 -0
  197. package/dist/chunk-ZZEI7MV4.js +778 -0
  198. package/dist/cli/holoscript-runner.cjs +2255 -0
  199. package/dist/cli/holoscript-runner.js +2230 -0
  200. package/dist/codebase/index.cjs +336 -0
  201. package/dist/codebase/index.js +331 -0
  202. package/dist/compiler/agent-inference.cjs +31 -0
  203. package/dist/compiler/agent-inference.js +8 -0
  204. package/dist/compiler/android-xr.cjs +24 -0
  205. package/dist/compiler/android-xr.js +14 -0
  206. package/dist/compiler/android.cjs +24 -0
  207. package/dist/compiler/android.js +14 -0
  208. package/dist/compiler/ar.cjs +23 -0
  209. package/dist/compiler/ar.js +11 -0
  210. package/dist/compiler/babylon.cjs +21 -0
  211. package/dist/compiler/babylon.js +15 -0
  212. package/dist/compiler/business-quest.cjs +43 -0
  213. package/dist/compiler/business-quest.js +4 -0
  214. package/dist/compiler/coco.cjs +27 -0
  215. package/dist/compiler/coco.js +4 -0
  216. package/dist/compiler/context.cjs +25 -0
  217. package/dist/compiler/context.d.ts +28 -0
  218. package/dist/compiler/context.js +8 -0
  219. package/dist/compiler/domain-block-utils.cjs +605 -0
  220. package/dist/compiler/domain-block-utils.js +11 -0
  221. package/dist/compiler/dtdl.cjs +27 -0
  222. package/dist/compiler/dtdl.js +11 -0
  223. package/dist/compiler/gltf-pipeline.cjs +39 -0
  224. package/dist/compiler/gltf-pipeline.js +4 -0
  225. package/dist/compiler/godot.cjs +18 -0
  226. package/dist/compiler/godot.js +12 -0
  227. package/dist/compiler/incremental.cjs +34 -0
  228. package/dist/compiler/incremental.js +9 -0
  229. package/dist/compiler/index.cjs +5860 -0
  230. package/dist/compiler/index.d.ts +322 -21
  231. package/dist/compiler/index.js +5525 -0
  232. package/dist/compiler/ios.cjs +23 -0
  233. package/dist/compiler/ios.js +13 -0
  234. package/dist/compiler/llm-provider-capabilities.cjs +25 -0
  235. package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
  236. package/dist/compiler/llm-provider-capabilities.js +8 -0
  237. package/dist/compiler/multi-layer.cjs +24 -0
  238. package/dist/compiler/multi-layer.js +15 -0
  239. package/dist/compiler/nodetoy.cjs +23 -0
  240. package/dist/compiler/nodetoy.js +4 -0
  241. package/dist/compiler/openxr.cjs +19 -0
  242. package/dist/compiler/openxr.js +13 -0
  243. package/dist/compiler/playcanvas.cjs +19 -0
  244. package/dist/compiler/playcanvas.js +13 -0
  245. package/dist/compiler/r3f.cjs +38 -0
  246. package/dist/compiler/r3f.d.ts +22 -0
  247. package/dist/compiler/r3f.js +16 -0
  248. package/dist/compiler/remotion.cjs +23 -0
  249. package/dist/compiler/remotion.js +4 -0
  250. package/dist/compiler/reproducibility.cjs +39 -0
  251. package/dist/compiler/reproducibility.js +4 -0
  252. package/dist/compiler/sdf.cjs +24 -0
  253. package/dist/compiler/sdf.js +12 -0
  254. package/dist/compiler/semantic-scene.cjs +31 -0
  255. package/dist/compiler/semantic-scene.js +4 -0
  256. package/dist/compiler/state.cjs +21 -0
  257. package/dist/compiler/state.js +11 -0
  258. package/dist/compiler/trait-composition.cjs +30 -0
  259. package/dist/compiler/trait-composition.js +9 -0
  260. package/dist/compiler/unity.cjs +19 -0
  261. package/dist/compiler/unity.js +13 -0
  262. package/dist/compiler/unreal.cjs +23 -0
  263. package/dist/compiler/unreal.js +13 -0
  264. package/dist/compiler/urdf.cjs +52 -0
  265. package/dist/compiler/urdf.js +12 -0
  266. package/dist/compiler/usd-physics.cjs +26 -0
  267. package/dist/compiler/usd-physics.js +9 -0
  268. package/dist/compiler/visionos.cjs +19 -0
  269. package/dist/compiler/visionos.js +13 -0
  270. package/dist/compiler/vrchat.cjs +22 -0
  271. package/dist/compiler/vrchat.js +12 -0
  272. package/dist/compiler/vrr.cjs +24 -0
  273. package/dist/compiler/vrr.js +12 -0
  274. package/dist/compiler/wasm.cjs +36 -0
  275. package/dist/compiler/wasm.js +12 -0
  276. package/dist/compiler/webgpu.cjs +18 -0
  277. package/dist/compiler/webgpu.js +12 -0
  278. package/dist/coordinators/index.cjs +1266 -0
  279. package/dist/coordinators/index.d.ts +72 -1
  280. package/dist/coordinators/index.js +1259 -0
  281. package/dist/debugger.cjs +24 -0
  282. package/dist/debugger.js +11 -0
  283. package/dist/entries/interop.cjs +64 -0
  284. package/dist/entries/interop.js +7 -0
  285. package/dist/entries/scripting.cjs +55 -0
  286. package/dist/entries/scripting.js +10 -0
  287. package/dist/hololand/index.cjs +146 -0
  288. package/dist/hololand/index.d.ts +70 -0
  289. package/dist/hololand/index.js +5 -0
  290. package/dist/index.cjs +43233 -0
  291. package/dist/index.d.ts +976 -21
  292. package/dist/index.js +39995 -0
  293. package/dist/math/tropical-spmv.cjs +45 -0
  294. package/dist/math/tropical-spmv.js +4 -0
  295. package/dist/math/vec3.cjs +57 -0
  296. package/dist/math/vec3.js +4 -0
  297. package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
  298. package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
  299. package/dist/paper-0c-spike/index.cjs +150 -0
  300. package/dist/paper-0c-spike/index.js +141 -0
  301. package/dist/parser.cjs +61 -0
  302. package/dist/parser.d.ts +11 -0
  303. package/dist/parser.js +12 -0
  304. package/dist/playwright-3AT3AKTV.cjs +98673 -0
  305. package/dist/playwright-VZPDVUEQ.js +98660 -0
  306. package/dist/reconstruction/index.cjs +153 -0
  307. package/dist/reconstruction/index.d.ts +29 -2
  308. package/dist/reconstruction/index.js +8 -0
  309. package/dist/runtime.cjs +316 -0
  310. package/dist/runtime.d.ts +61 -0
  311. package/dist/runtime.js +31 -0
  312. package/dist/self-improvement/index.cjs +563 -0
  313. package/dist/self-improvement/index.js +545 -0
  314. package/dist/storage/index.cjs +38 -0
  315. package/dist/storage/index.js +5 -0
  316. package/dist/testing.cjs +25 -0
  317. package/dist/testing.d.ts +70 -0
  318. package/dist/testing.js +4 -0
  319. package/dist/traitDocs/traitDocs.cjs +33 -0
  320. package/dist/traitDocs/traitDocs.js +7 -0
  321. package/dist/traits/botanical-lotus.cjs +41 -0
  322. package/dist/traits/botanical-lotus.d.ts +172 -0
  323. package/dist/traits/botanical-lotus.js +4 -0
  324. package/dist/traits/engines/index.cjs +520 -0
  325. package/dist/traits/engines/index.js +380 -0
  326. package/dist/traits/index.cjs +24409 -0
  327. package/dist/traits/index.d.ts +171 -35
  328. package/dist/traits/index.js +21634 -0
  329. package/dist/traits/simulation-solver-factory.cjs +13 -0
  330. package/dist/traits/simulation-solver-factory.d.ts +23 -0
  331. package/dist/traits/simulation-solver-factory.js +4 -0
  332. package/dist/traits/webcam-gaze.cjs +35 -0
  333. package/dist/traits/webcam-gaze.d.ts +17 -0
  334. package/dist/traits/webcam-gaze.js +4 -0
  335. package/dist/type-checker.cjs +19 -0
  336. package/dist/type-checker.js +6 -0
  337. package/dist/world/index.cjs +947 -0
  338. package/dist/world/index.d.ts +147 -0
  339. package/dist/world/index.js +939 -0
  340. package/dist/world-model/index.cjs +1446 -0
  341. package/dist/world-model/index.d.ts +119 -0
  342. package/dist/world-model/index.js +1414 -0
  343. package/dist/wot/index.cjs +29 -0
  344. package/dist/wot/index.js +4 -0
  345. package/package.json +93 -49
@@ -0,0 +1,474 @@
1
+ // src/traits/BotanicalLotusTrait.ts
2
+ var DEFAULT_BOTANICAL_LOTUS_CONFIG = {
3
+ schema: "holoscript.trait.botanical_lotus.v0",
4
+ status: "visual_seed",
5
+ source: {
6
+ kind: "conversation_reference_images",
7
+ count: 3,
8
+ content_hash_status: "pending_media_ingest",
9
+ wallet_signature_status: "pending_cael_anchor",
10
+ note: "Derived from three pink lotus reference images provided in-thread; raw media ingest is pending."
11
+ },
12
+ reference_anchors: [
13
+ {
14
+ id: "lotus-reference-2026-05-06-01",
15
+ label: "open pink lotus close-up",
16
+ uri: "conversation://2026-05-06/lotus-reference-01",
17
+ role: "material",
18
+ status: "pending_media_ingest"
19
+ },
20
+ {
21
+ id: "lotus-reference-2026-05-06-02",
22
+ label: "upright pink lotus silhouette",
23
+ uri: "conversation://2026-05-06/lotus-reference-02",
24
+ role: "silhouette",
25
+ status: "pending_media_ingest"
26
+ },
27
+ {
28
+ id: "lotus-reference-2026-05-06-03",
29
+ label: "pink lotus with leaves and water context",
30
+ uri: "conversation://2026-05-06/lotus-reference-03",
31
+ role: "leaf_context",
32
+ status: "pending_media_ingest"
33
+ }
34
+ ],
35
+ material: {
36
+ subsurface_scattering: 0.74,
37
+ subsurface_radius_rgb: [0.9, 0.32, 0.72],
38
+ petal_translucency_base: 0.68,
39
+ petal_translucency_edge: 0.36,
40
+ roughness: 0.72,
41
+ ior: 1.36,
42
+ vein_normal_intensity: 0.045,
43
+ edge_curl_intensity: 0.58,
44
+ gravity_sag_outer: 0.3
45
+ },
46
+ colors: {
47
+ petal_base: "#fff1f6",
48
+ petal_mid: "#f47ab7",
49
+ petal_inner: "#ff9ecf",
50
+ petal_rim: "#c42a86",
51
+ petal_shadow: "#84205f",
52
+ seed_pod: "#f4d74a",
53
+ seed_pod_rim: "#b7c66b",
54
+ stamen: "#f59e0b",
55
+ stamen_tip: "#fff4bd",
56
+ leaf: "#235f4f",
57
+ leaf_dark: "#102f28",
58
+ water: "#07140f"
59
+ },
60
+ geometry: {
61
+ petal_rings: [
62
+ { name: "inner", count: 8, cup: 0.86, gravity_sag: 0.02 },
63
+ { name: "mid", count: 13, cup: 0.5, gravity_sag: 0.12 },
64
+ { name: "outer", count: 21, cup: 0.24, gravity_sag: 0.3 }
65
+ ],
66
+ petal_shape: "broad_elliptic_pointed_tip_with_center_ridge",
67
+ stamen_filament_count: 58,
68
+ seed_pod_dot_pattern: "1_center_7_12_18_radial"
69
+ },
70
+ renderer: {
71
+ requires: ["sss_render", "instanced_filaments", "water_surface"],
72
+ lod: {
73
+ close: "full_filaments",
74
+ mid: "simplified_filaments",
75
+ far: "petal_billboard"
76
+ },
77
+ material_model: "thin_tissue_mesh_physical_material"
78
+ }
79
+ };
80
+ var SHA256_HASH_PATTERN = /^sha256:[a-f0-9]{64}$/;
81
+ var HEX_COLOR_PATTERN = /^#[0-9a-fA-F]{6}$/;
82
+ var RING_RENDER_DEFAULTS = {
83
+ inner: { radius: 0.32, length: 0.82, width: 0.34, pitch_degrees: 74 },
84
+ mid: { radius: 0.58, length: 1.15, width: 0.46, pitch_degrees: 42 },
85
+ outer: { radius: 0.92, length: 1.52, width: 0.58, pitch_degrees: 18 }
86
+ };
87
+ function cloneDefaultConfig() {
88
+ const d = DEFAULT_BOTANICAL_LOTUS_CONFIG;
89
+ return {
90
+ ...d,
91
+ source: { ...d.source },
92
+ reference_anchors: d.reference_anchors.map((a) => ({ ...a })),
93
+ material: {
94
+ ...d.material,
95
+ subsurface_radius_rgb: [...d.material.subsurface_radius_rgb]
96
+ },
97
+ colors: { ...d.colors },
98
+ geometry: {
99
+ ...d.geometry,
100
+ petal_rings: d.geometry.petal_rings.map((r) => ({ ...r }))
101
+ },
102
+ renderer: {
103
+ ...d.renderer,
104
+ requires: [...d.renderer.requires],
105
+ lod: { ...d.renderer.lod }
106
+ }
107
+ };
108
+ }
109
+ function isFiniteNumber(value) {
110
+ return typeof value === "number" && Number.isFinite(value);
111
+ }
112
+ function addRangeError(errors, label, value, min, max) {
113
+ if (!isFiniteNumber(value) || value < min || value > max) {
114
+ errors.push(`${label} must be a finite number in [${min}, ${max}]`);
115
+ }
116
+ }
117
+ function validateHexColors(errors, colors) {
118
+ for (const [key, value] of Object.entries(colors)) {
119
+ if (!HEX_COLOR_PATTERN.test(value)) {
120
+ errors.push(`colors.${key} must be a 6-digit hex color`);
121
+ }
122
+ }
123
+ }
124
+ function validateReferenceAnchor(errors, anchor, index) {
125
+ const prefix = `reference_anchors[${index}]`;
126
+ if (!anchor.id || typeof anchor.id !== "string") {
127
+ errors.push(`${prefix}.id is required`);
128
+ }
129
+ if (!anchor.uri || typeof anchor.uri !== "string") {
130
+ errors.push(`${prefix}.uri is required`);
131
+ }
132
+ if (anchor.status !== "pending_media_ingest" && anchor.status !== "hashed" && anchor.status !== "wallet_signed") {
133
+ errors.push(`${prefix}.status must be pending_media_ingest, hashed, or wallet_signed`);
134
+ }
135
+ if (anchor.status !== "pending_media_ingest") {
136
+ if (!anchor.content_hash || !SHA256_HASH_PATTERN.test(anchor.content_hash)) {
137
+ errors.push(`${prefix}.content_hash must be sha256:<64 lowercase hex chars>`);
138
+ }
139
+ }
140
+ if (anchor.status === "wallet_signed" && !anchor.wallet_signature) {
141
+ errors.push(`${prefix}.wallet_signature is required when status is wallet_signed`);
142
+ }
143
+ if (anchor.width !== void 0 && (!Number.isInteger(anchor.width) || anchor.width <= 0)) {
144
+ errors.push(`${prefix}.width must be a positive integer when present`);
145
+ }
146
+ if (anchor.height !== void 0 && (!Number.isInteger(anchor.height) || anchor.height <= 0)) {
147
+ errors.push(`${prefix}.height must be a positive integer when present`);
148
+ }
149
+ }
150
+ function normalizeBotanicalLotusConfig(input = {}) {
151
+ const d = cloneDefaultConfig();
152
+ const inputGeometry = input.geometry ?? {};
153
+ const inputRenderer = input.renderer ?? {};
154
+ const petalRings = Array.isArray(inputGeometry.petal_rings) ? inputGeometry.petal_rings.map((r) => ({ ...r })) : d.geometry.petal_rings.map((r) => ({ ...r }));
155
+ return {
156
+ schema: input.schema ?? d.schema,
157
+ status: input.status ?? d.status,
158
+ source: {
159
+ ...d.source,
160
+ ...input.source ?? {}
161
+ },
162
+ reference_anchors: Array.isArray(input.reference_anchors) ? input.reference_anchors.map((a) => ({ ...a })) : d.reference_anchors,
163
+ material: {
164
+ ...d.material,
165
+ ...input.material ?? {},
166
+ subsurface_radius_rgb: [
167
+ ...input.material?.subsurface_radius_rgb ?? d.material.subsurface_radius_rgb
168
+ ]
169
+ },
170
+ colors: {
171
+ ...d.colors,
172
+ ...input.colors ?? {}
173
+ },
174
+ geometry: {
175
+ ...d.geometry,
176
+ ...inputGeometry,
177
+ petal_rings: petalRings
178
+ },
179
+ renderer: {
180
+ ...d.renderer,
181
+ ...inputRenderer,
182
+ requires: [...inputRenderer.requires ?? d.renderer.requires],
183
+ lod: {
184
+ ...d.renderer.lod,
185
+ ...inputRenderer.lod ?? {}
186
+ }
187
+ }
188
+ };
189
+ }
190
+ function validateBotanicalLotusConfig(input = {}) {
191
+ const config = normalizeBotanicalLotusConfig(input);
192
+ const errors = [];
193
+ const { material, geometry } = config;
194
+ if (config.schema !== "holoscript.trait.botanical_lotus.v0") {
195
+ errors.push("schema must be holoscript.trait.botanical_lotus.v0");
196
+ }
197
+ if (config.status !== "visual_seed" && config.status !== "content_hashed" && config.status !== "wallet_signed") {
198
+ errors.push("status must be visual_seed, content_hashed, or wallet_signed");
199
+ }
200
+ if (config.reference_anchors.length === 0) {
201
+ errors.push("reference_anchors must include at least one anchor");
202
+ }
203
+ config.reference_anchors.forEach(
204
+ (anchor, index) => validateReferenceAnchor(errors, anchor, index)
205
+ );
206
+ addRangeError(errors, "material.subsurface_scattering", material.subsurface_scattering, 0, 1);
207
+ if (material.subsurface_radius_rgb.length !== 3) {
208
+ errors.push("material.subsurface_radius_rgb must contain exactly three values");
209
+ }
210
+ material.subsurface_radius_rgb.forEach(
211
+ (value, index) => addRangeError(errors, `material.subsurface_radius_rgb[${index}]`, value, 0, 2)
212
+ );
213
+ addRangeError(
214
+ errors,
215
+ "material.petal_translucency_base",
216
+ material.petal_translucency_base,
217
+ 0,
218
+ 1
219
+ );
220
+ addRangeError(
221
+ errors,
222
+ "material.petal_translucency_edge",
223
+ material.petal_translucency_edge,
224
+ 0,
225
+ 1
226
+ );
227
+ addRangeError(errors, "material.roughness", material.roughness, 0, 1);
228
+ addRangeError(errors, "material.ior", material.ior, 1, 2.5);
229
+ addRangeError(
230
+ errors,
231
+ "material.vein_normal_intensity",
232
+ material.vein_normal_intensity,
233
+ 0,
234
+ 0.25
235
+ );
236
+ addRangeError(errors, "material.edge_curl_intensity", material.edge_curl_intensity, 0, 1);
237
+ addRangeError(errors, "material.gravity_sag_outer", material.gravity_sag_outer, 0, 1);
238
+ validateHexColors(errors, config.colors);
239
+ if (geometry.petal_rings.length === 0) {
240
+ errors.push("geometry.petal_rings must include at least one ring");
241
+ }
242
+ geometry.petal_rings.forEach((ring, index) => {
243
+ if (!ring.name) {
244
+ errors.push(`geometry.petal_rings[${index}].name is required`);
245
+ }
246
+ if (!Number.isInteger(ring.count) || ring.count <= 0) {
247
+ errors.push(`geometry.petal_rings[${index}].count must be a positive integer`);
248
+ }
249
+ addRangeError(errors, `geometry.petal_rings[${index}].cup`, ring.cup, 0, 1);
250
+ addRangeError(
251
+ errors,
252
+ `geometry.petal_rings[${index}].gravity_sag`,
253
+ ring.gravity_sag,
254
+ 0,
255
+ 1
256
+ );
257
+ });
258
+ if (!Number.isInteger(geometry.stamen_filament_count) || geometry.stamen_filament_count <= 0) {
259
+ errors.push("geometry.stamen_filament_count must be a positive integer");
260
+ }
261
+ if (config.renderer.requires.length === 0) {
262
+ errors.push("renderer.requires must include at least one render capability");
263
+ }
264
+ return {
265
+ ok: errors.length === 0,
266
+ errors,
267
+ config
268
+ };
269
+ }
270
+ function assertBotanicalLotusConfig(input = {}) {
271
+ const result = validateBotanicalLotusConfig(input);
272
+ if (!result.ok) {
273
+ throw new Error(`Invalid botanical_lotus config: ${result.errors.join("; ")}`);
274
+ }
275
+ return result.config;
276
+ }
277
+ function deriveBotanicalLotusAnchorStatus(anchors) {
278
+ if (anchors.length > 0 && anchors.every((anchor) => anchor.status === "wallet_signed")) {
279
+ return "wallet_signed";
280
+ }
281
+ if (anchors.length > 0 && anchors.every((anchor) => anchor.status === "hashed" || anchor.status === "wallet_signed")) {
282
+ return "hashed";
283
+ }
284
+ return "pending_media_ingest";
285
+ }
286
+ function getBotanicalLotusPetalCount(input = {}) {
287
+ const config = normalizeBotanicalLotusConfig(input);
288
+ return config.geometry.petal_rings.reduce((sum, ring) => sum + ring.count, 0);
289
+ }
290
+ function createBotanicalLotusRenderProfile(input = {}, placement, lighting) {
291
+ const config = assertBotanicalLotusConfig(input);
292
+ const anchorStatus = deriveBotanicalLotusAnchorStatus(config.reference_anchors);
293
+ const petalRings = config.geometry.petal_rings.map((ring, index) => {
294
+ const base = RING_RENDER_DEFAULTS[ring.name] ?? {
295
+ radius: 0.42 + index * 0.24,
296
+ length: 0.82 + index * 0.2,
297
+ width: 0.34 + index * 0.08,
298
+ pitch_degrees: Math.max(12, 70 - index * 18)
299
+ };
300
+ return {
301
+ name: ring.name,
302
+ count: ring.count,
303
+ radius: base.radius,
304
+ length: base.length,
305
+ width: base.width,
306
+ cup: ring.cup,
307
+ gravity_sag: ring.gravity_sag,
308
+ pitch_degrees: base.pitch_degrees
309
+ };
310
+ });
311
+ return {
312
+ trait: "botanical_lotus",
313
+ anchor_status: anchorStatus,
314
+ wallet_signed: anchorStatus === "wallet_signed",
315
+ petal_count: petalRings.reduce((sum, ring) => sum + ring.count, 0),
316
+ petal_rings: petalRings,
317
+ pbr_uniforms: {
318
+ subsurface_scattering: config.material.subsurface_scattering,
319
+ subsurface_radius_rgb: config.material.subsurface_radius_rgb,
320
+ transmission: config.material.petal_translucency_base,
321
+ thickness: config.material.petal_translucency_edge,
322
+ roughness: config.material.roughness,
323
+ ior: config.material.ior,
324
+ vein_normal_intensity: config.material.vein_normal_intensity
325
+ },
326
+ colors: config.colors,
327
+ stamen_filament_count: config.geometry.stamen_filament_count,
328
+ seed_pod_dot_pattern: config.geometry.seed_pod_dot_pattern,
329
+ reference_anchor_ids: config.reference_anchors.map((anchor) => anchor.id),
330
+ renderer_requires: config.renderer.requires,
331
+ surface_anchor_id: placement?.surface_anchor_id,
332
+ lighting_reference: lighting?.reference_id
333
+ };
334
+ }
335
+ var botanicalLotusHandler = {
336
+ name: "botanical_lotus",
337
+ defaultConfig: DEFAULT_BOTANICAL_LOTUS_CONFIG,
338
+ validate: validateBotanicalLotusConfig,
339
+ toRenderProfile: createBotanicalLotusRenderProfile,
340
+ onAttach(node, config, context) {
341
+ const normalized = assertBotanicalLotusConfig(config);
342
+ const profile = createBotanicalLotusRenderProfile(normalized);
343
+ const state = { config: normalized, profile };
344
+ node.__botanicalLotusState = state;
345
+ const nodeId = String(node.id ?? "unknown");
346
+ context.setState?.({
347
+ [`botanical_lotus.${nodeId}.anchor_status`]: profile.anchor_status,
348
+ [`botanical_lotus.${nodeId}.petal_count`]: profile.petal_count
349
+ });
350
+ context.emit?.("botanical_lotus_attached", {
351
+ node,
352
+ anchorStatus: profile.anchor_status,
353
+ walletSigned: profile.wallet_signed,
354
+ petalCount: profile.petal_count,
355
+ referenceAnchorIds: profile.reference_anchor_ids,
356
+ rendererRequires: profile.renderer_requires
357
+ });
358
+ },
359
+ onDetach(node, _config, context) {
360
+ context.emit?.("botanical_lotus_detached", { node });
361
+ delete node.__botanicalLotusState;
362
+ },
363
+ onUpdate(_node, _config, _context, _delta) {
364
+ },
365
+ onEvent(node, _config, context, event) {
366
+ const state = node.__botanicalLotusState;
367
+ if (!state) return;
368
+ if (event.type === "botanical_lotus_query") {
369
+ context.emit?.("botanical_lotus_response", {
370
+ queryId: event.queryId,
371
+ node,
372
+ config: state.config,
373
+ profile: state.profile
374
+ });
375
+ return;
376
+ }
377
+ if (event.type === "botanical_lotus_reference_anchored") {
378
+ const anchorId = String(event.anchorId ?? "");
379
+ const contentHash = typeof event.contentHash === "string" ? event.contentHash : void 0;
380
+ const walletSignature = typeof event.walletSignature === "string" ? event.walletSignature : void 0;
381
+ if (!anchorId || !contentHash) return;
382
+ const updatedAnchors = state.config.reference_anchors.map((anchor) => {
383
+ if (anchor.id !== anchorId) return anchor;
384
+ return {
385
+ ...anchor,
386
+ content_hash: contentHash,
387
+ wallet_signature: walletSignature,
388
+ status: walletSignature ? "wallet_signed" : "hashed"
389
+ };
390
+ });
391
+ const updatedConfig = assertBotanicalLotusConfig({
392
+ ...state.config,
393
+ status: updatedAnchors.every((anchor) => anchor.status === "wallet_signed") ? "wallet_signed" : "content_hashed",
394
+ source: {
395
+ ...state.config.source,
396
+ content_hash_status: deriveBotanicalLotusAnchorStatus(updatedAnchors),
397
+ wallet_signature_status: updatedAnchors.every(
398
+ (anchor) => anchor.status === "wallet_signed"
399
+ ) ? "wallet_signed" : "pending_cael_anchor"
400
+ },
401
+ reference_anchors: updatedAnchors
402
+ });
403
+ state.config = updatedConfig;
404
+ state.profile = createBotanicalLotusRenderProfile(updatedConfig, state.placement, state.lighting);
405
+ context.emit?.("botanical_lotus_reference_updated", {
406
+ node,
407
+ anchorId,
408
+ anchorStatus: state.profile.anchor_status,
409
+ walletSigned: state.profile.wallet_signed,
410
+ referenceAnchorIds: state.profile.reference_anchor_ids
411
+ });
412
+ return;
413
+ }
414
+ if (event.type === "holomap:surface_anchor_placed") {
415
+ const payload = event.payload ?? {};
416
+ const surfaceAnchorId = typeof payload.surfaceAnchorId === "string" ? payload.surfaceAnchorId : void 0;
417
+ const surfaceNormal = Array.isArray(payload.surfaceNormal) ? payload.surfaceNormal : void 0;
418
+ const worldPosition = Array.isArray(payload.worldPosition) ? payload.worldPosition : void 0;
419
+ if (!surfaceAnchorId) return;
420
+ state.placement = {
421
+ surface_anchor_id: surfaceAnchorId,
422
+ surface_normal: surfaceNormal,
423
+ world_position: worldPosition
424
+ };
425
+ state.profile = createBotanicalLotusRenderProfile(state.config, state.placement, state.lighting);
426
+ context.emit?.("botanical_lotus_surface_bound", {
427
+ node,
428
+ surfaceAnchorId,
429
+ surfaceNormal,
430
+ worldPosition
431
+ });
432
+ return;
433
+ }
434
+ if (event.type === "holomap:lighting_update") {
435
+ const payload = event.payload ?? {};
436
+ const referenceId = typeof payload.referenceId === "string" ? payload.referenceId : void 0;
437
+ const estimatedLux = typeof payload.estimatedLux === "number" && Number.isFinite(payload.estimatedLux) ? payload.estimatedLux : void 0;
438
+ const colorTemperatureK = typeof payload.colorTemperatureK === "number" && Number.isFinite(payload.colorTemperatureK) ? payload.colorTemperatureK : void 0;
439
+ const dominantDirection = Array.isArray(payload.dominantDirection) ? payload.dominantDirection : void 0;
440
+ if (!referenceId) return;
441
+ state.lighting = {
442
+ reference_id: referenceId,
443
+ estimated_lux: estimatedLux,
444
+ color_temperature_k: colorTemperatureK,
445
+ dominant_direction: dominantDirection
446
+ };
447
+ state.profile = createBotanicalLotusRenderProfile(state.config, state.placement, state.lighting);
448
+ context.emit?.("botanical_lotus_lighting_updated", {
449
+ node,
450
+ referenceId,
451
+ estimatedLux,
452
+ colorTemperatureK,
453
+ dominantDirection
454
+ });
455
+ return;
456
+ }
457
+ if (event.type === "holomap:anchor_state_changed") {
458
+ const payload = event.payload ?? {};
459
+ const anchorFrameIndex = typeof payload.anchorFrameIndex === "number" ? payload.anchorFrameIndex : void 0;
460
+ if (state.placement?.surface_anchor_id && anchorFrameIndex !== void 0) {
461
+ context.emit?.("botanical_lotus_anchor_drift", {
462
+ node,
463
+ surfaceAnchorId: state.placement.surface_anchor_id,
464
+ anchorFrameIndex
465
+ });
466
+ }
467
+ return;
468
+ }
469
+ }
470
+ };
471
+
472
+ export { DEFAULT_BOTANICAL_LOTUS_CONFIG, assertBotanicalLotusConfig, botanicalLotusHandler, createBotanicalLotusRenderProfile, deriveBotanicalLotusAnchorStatus, getBotanicalLotusPetalCount, normalizeBotanicalLotusConfig, validateBotanicalLotusConfig };
473
+ //# sourceMappingURL=chunk-VECQYRXL.js.map
474
+ //# sourceMappingURL=chunk-VECQYRXL.js.map
@@ -0,0 +1,169 @@
1
+ 'use strict';
2
+
3
+ // src/compiler/ReproducibilityMode.ts
4
+ var DEFAULT_FIXED_TIMESTAMP = "2026-01-01T00:00:00.000Z";
5
+ var DEFAULT_SEED = 42;
6
+ var DEFAULT_GENERATOR = "holoscript-compiler";
7
+ var COMPILER_VERSION = "6.0.0";
8
+ function createSeededRNG(seed = DEFAULT_SEED) {
9
+ let state = seed | 0;
10
+ const initialSeed = state;
11
+ function next() {
12
+ state = state + 1831565813 | 0;
13
+ let t = Math.imul(state ^ state >>> 15, 1 | state);
14
+ t = t + Math.imul(t ^ t >>> 7, 61 | t) ^ t;
15
+ return ((t ^ t >>> 14) >>> 0) / 4294967296;
16
+ }
17
+ function nextInt(min, max) {
18
+ return Math.floor(next() * (max - min + 1)) + min;
19
+ }
20
+ function nextUUID() {
21
+ const hex = (n, len) => Array.from({ length: len }, () => nextInt(0, 15).toString(16)).join("");
22
+ return `${hex(0, 8)}-${hex(0, 4)}-4${hex(0, 3)}-${(8 + nextInt(0, 3)).toString(16)}${hex(0, 3)}-${hex(0, 12)}`;
23
+ }
24
+ function reset() {
25
+ state = initialSeed;
26
+ }
27
+ function getState() {
28
+ return state;
29
+ }
30
+ return { next, nextInt, nextUUID, reset, getState };
31
+ }
32
+ function sortKeysDeep(value) {
33
+ if (value === null || value === void 0) return value;
34
+ if (Array.isArray(value)) {
35
+ return value.map((item) => sortKeysDeep(item));
36
+ }
37
+ if (typeof value === "object") {
38
+ const sorted = {};
39
+ const keys = Object.keys(value).sort();
40
+ for (const key of keys) {
41
+ sorted[key] = sortKeysDeep(value[key]);
42
+ }
43
+ return sorted;
44
+ }
45
+ return value;
46
+ }
47
+ function fnv1a32(input) {
48
+ let hash = 2166136261;
49
+ for (let i = 0; i < input.length; i++) {
50
+ hash ^= input.charCodeAt(i);
51
+ hash = Math.imul(hash, 16777619);
52
+ }
53
+ return (hash >>> 0).toString(16).padStart(8, "0");
54
+ }
55
+ function hashComposition(composition) {
56
+ const sorted = sortKeysDeep(composition);
57
+ const serialized = JSON.stringify(sorted);
58
+ const h1 = fnv1a32(serialized);
59
+ const h2 = fnv1a32(serialized + h1);
60
+ const h3 = fnv1a32(serialized + h2);
61
+ const h4 = fnv1a32(serialized + h3);
62
+ const h5 = fnv1a32(serialized + h4);
63
+ const h6 = fnv1a32(serialized + h5);
64
+ const h7 = fnv1a32(serialized + h6);
65
+ const h8 = fnv1a32(serialized + h7);
66
+ return `${h1}${h2}${h3}${h4}${h5}${h6}${h7}${h8}`;
67
+ }
68
+ function createReproducibilityContext(config) {
69
+ const fullConfig = {
70
+ enabled: config.enabled,
71
+ fixedTimestamp: config.fixedTimestamp ?? DEFAULT_FIXED_TIMESTAMP,
72
+ randomSeed: config.randomSeed ?? DEFAULT_SEED,
73
+ sortKeys: config.sortKeys ?? config.enabled,
74
+ deterministicIds: config.deterministicIds ?? config.enabled,
75
+ generatorString: config.generatorString ?? DEFAULT_GENERATOR,
76
+ includeManifest: config.includeManifest ?? false
77
+ };
78
+ const rng = createSeededRNG(fullConfig.randomSeed);
79
+ function random() {
80
+ return fullConfig.enabled ? rng.next() : Math.random();
81
+ }
82
+ function randomInt(min, max) {
83
+ return fullConfig.enabled ? rng.nextInt(min, max) : Math.floor(Math.random() * (max - min + 1)) + min;
84
+ }
85
+ function timestamp() {
86
+ return fullConfig.enabled ? fullConfig.fixedTimestamp : (/* @__PURE__ */ new Date()).toISOString();
87
+ }
88
+ function timestampDate() {
89
+ return fullConfig.enabled ? new Date(fullConfig.fixedTimestamp) : /* @__PURE__ */ new Date();
90
+ }
91
+ function uuid() {
92
+ if (!fullConfig.enabled || !fullConfig.deterministicIds) {
93
+ return crypto?.randomUUID?.() ?? rng.nextUUID();
94
+ }
95
+ return rng.nextUUID();
96
+ }
97
+ function generator() {
98
+ return fullConfig.generatorString;
99
+ }
100
+ function stabilize(value) {
101
+ if (!fullConfig.enabled || !fullConfig.sortKeys) return value;
102
+ return sortKeysDeep(value);
103
+ }
104
+ function manifest(composition) {
105
+ return {
106
+ reproducible: true,
107
+ seed: fullConfig.randomSeed,
108
+ timestamp: fullConfig.fixedTimestamp,
109
+ inputHash: hashComposition(composition),
110
+ compilerVersion: COMPILER_VERSION
111
+ };
112
+ }
113
+ function reset() {
114
+ rng.reset();
115
+ }
116
+ function stringify(value, indent = 2) {
117
+ const processed = fullConfig.enabled && fullConfig.sortKeys ? sortKeysDeep(value) : value;
118
+ return JSON.stringify(processed, null, indent);
119
+ }
120
+ return {
121
+ enabled: fullConfig.enabled,
122
+ config: fullConfig,
123
+ random,
124
+ randomInt,
125
+ timestamp,
126
+ timestampDate,
127
+ uuid,
128
+ generator,
129
+ stabilize,
130
+ manifest,
131
+ reset,
132
+ stringify
133
+ };
134
+ }
135
+ function parseReproducibilityFlags(args) {
136
+ const config = { enabled: false };
137
+ for (const arg of args) {
138
+ if (arg === "--reproducible") {
139
+ config.enabled = true;
140
+ }
141
+ if (arg === "--no-reproducible") {
142
+ config.enabled = false;
143
+ }
144
+ if (arg.startsWith("--reproducible-seed=")) {
145
+ config.enabled = true;
146
+ config.randomSeed = parseInt(arg.split("=")[1], 10);
147
+ if (isNaN(config.randomSeed)) config.randomSeed = DEFAULT_SEED;
148
+ }
149
+ if (arg.startsWith("--reproducible-timestamp=")) {
150
+ config.enabled = true;
151
+ config.fixedTimestamp = arg.split("=")[1].replace(/"/g, "");
152
+ }
153
+ if (arg === "--reproducible-manifest") {
154
+ config.includeManifest = true;
155
+ }
156
+ }
157
+ return config;
158
+ }
159
+ var ReproducibilityMode_default = createReproducibilityContext;
160
+
161
+ exports.ReproducibilityMode_default = ReproducibilityMode_default;
162
+ exports.createReproducibilityContext = createReproducibilityContext;
163
+ exports.createSeededRNG = createSeededRNG;
164
+ exports.fnv1a32 = fnv1a32;
165
+ exports.hashComposition = hashComposition;
166
+ exports.parseReproducibilityFlags = parseReproducibilityFlags;
167
+ exports.sortKeysDeep = sortKeysDeep;
168
+ //# sourceMappingURL=chunk-VJ3L7CHT.cjs.map
169
+ //# sourceMappingURL=chunk-VJ3L7CHT.cjs.map