@holoscript/core 6.0.4 → 6.1.1

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 (352) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -3
  3. package/bin/holoscript.cjs +3 -0
  4. package/dist/GLTFPipeline-SFIORFJU.js +16 -0
  5. package/dist/GLTFPipeline-VNNDPONV.cjs +37 -0
  6. package/dist/{HoloScriptPlusParser-BN6KVRCM.js → HoloScriptPlusParser-7FBIFUFC.js} +6 -5
  7. package/dist/{HoloScriptPlusParser-NC5FE6AL.cjs → HoloScriptPlusParser-A2W7OCN2.cjs} +17 -16
  8. package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
  9. package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
  10. package/dist/{USDZExporter-UWGWNMMD.cjs → USDZExporter-3FWJ25JI.cjs} +344 -16
  11. package/dist/{USDZExporter-NTMBNTDB.js → USDZExporter-D2HQLQYK.js} +344 -16
  12. package/dist/agents/index.cjs +19 -0
  13. package/dist/agents/index.d.ts +100 -0
  14. package/dist/agents/index.js +17 -0
  15. package/dist/chunk-22W6NGYN.js +725 -0
  16. package/dist/{chunk-5OEOHAAW.cjs → chunk-27MPVJVZ.cjs} +64 -28
  17. package/dist/{chunk-RVYPEYPX.js → chunk-2A7FURVO.js} +44 -8
  18. package/dist/{chunk-XCWFGZAA.js → chunk-2B7WVIDZ.js} +11 -8
  19. package/dist/{chunk-NDQNIJEH.js → chunk-2BSMSUCE.js} +250 -24
  20. package/dist/chunk-2HLIGOKU.cjs +5546 -0
  21. package/dist/{chunk-EONILVMF.js → chunk-2M2DPHKB.js} +4 -4
  22. package/dist/{chunk-G7CT3EMP.cjs → chunk-2YSNA2F2.cjs} +319 -47
  23. package/dist/{chunk-IWI6J7FX.js → chunk-33XCOVE3.js} +5 -5
  24. package/dist/chunk-3FOKASKO.cjs +348 -0
  25. package/dist/{chunk-DXJQDCFL.js → chunk-4C57PR42.js} +3 -3
  26. package/dist/{chunk-MPXBVFHQ.js → chunk-4N4SXXWF.js} +4 -3
  27. package/dist/chunk-4PDEPEQW.cjs +41 -0
  28. package/dist/chunk-4R6SBXDB.js +45 -0
  29. package/dist/chunk-4SY77NA4.cjs +413 -0
  30. package/dist/{chunk-YCXFCXDS.js → chunk-4UUKPCY4.js} +668 -110
  31. package/dist/{chunk-LGGRPKTV.cjs → chunk-52ULD552.cjs} +114 -35
  32. package/dist/{chunk-L4G4RLXX.js → chunk-5CKA5SXU.js} +438 -22
  33. package/dist/chunk-5FSKKMR7.cjs +2092 -0
  34. package/dist/{chunk-FF3Q7ADR.js → chunk-5JEU52DW.js} +5 -3
  35. package/dist/chunk-5N54COB6.cjs +327 -0
  36. package/dist/chunk-5S7RKFGR.cjs +446 -0
  37. package/dist/{chunk-KED34ILP.js → chunk-6ASWLXXN.js} +21 -9
  38. package/dist/chunk-6CTRH7HT.cjs +1985 -0
  39. package/dist/{chunk-CAUCGUEA.cjs → chunk-6EX3I5P4.cjs} +6 -6
  40. package/dist/chunk-6FGQNDR4.js +5731 -0
  41. package/dist/{chunk-72EQECGT.cjs → chunk-6KMK2UXT.cjs} +122 -46
  42. package/dist/{chunk-G4VZTCIB.js → chunk-6L4VE27M.js} +33 -23
  43. package/dist/{chunk-ATSKSYVE.cjs → chunk-6S6TKNEA.cjs} +6478 -1738
  44. package/dist/chunk-77V4GTCA.js +596 -0
  45. package/dist/{chunk-ZP4D3CSX.cjs → chunk-7AD52FRS.cjs} +16 -16
  46. package/dist/chunk-7OPW2KO7.cjs +639 -0
  47. package/dist/chunk-A6KINLZJ.js +236 -0
  48. package/dist/chunk-AIA52I7T.cjs +543 -0
  49. package/dist/chunk-AIX25INK.cjs +602 -0
  50. package/dist/{chunk-B5TCIAPQ.cjs → chunk-AO4I2Z7M.cjs} +17 -18
  51. package/dist/{chunk-Q5SJOGHQ.cjs → chunk-BPICAGBV.cjs} +324 -199
  52. package/dist/chunk-BRQJKJGT.cjs +20 -0
  53. package/dist/{chunk-3FXV5S25.cjs → chunk-C37BHB7N.cjs} +6 -3
  54. package/dist/{chunk-XUTX5CBW.js → chunk-CBJY23VL.js} +3 -3
  55. package/dist/chunk-CIWWXYHZ.cjs +50 -0
  56. package/dist/{chunk-XXINBTZK.cjs → chunk-DIL6DDDN.cjs} +101 -45
  57. package/dist/chunk-DMXC24WV.js +404 -0
  58. package/dist/{chunk-PMGODDJA.cjs → chunk-DTGBOSEM.cjs} +12 -12
  59. package/dist/chunk-E7JP3BS3.cjs +61 -0
  60. package/dist/{chunk-HJJLD366.js → chunk-EKBKLK7P.js} +3 -3
  61. package/dist/chunk-EKYL4PE3.cjs +404 -0
  62. package/dist/{chunk-UPJBDCVF.js → chunk-EMMC5CSQ.js} +12 -8
  63. package/dist/{chunk-GGHSW2NN.js → chunk-EOBB6A4B.js} +6389 -1718
  64. package/dist/chunk-EOFNVCM6.js +325 -0
  65. package/dist/{chunk-FHQVYCH2.js → chunk-ER4GATIU.js} +7 -7
  66. package/dist/{chunk-N5FTS757.cjs → chunk-EXKSFGSX.cjs} +7 -148
  67. package/dist/{chunk-LK5IAVH6.cjs → chunk-EXUP2BUM.cjs} +27 -27
  68. package/dist/chunk-FDSGHPAK.js +130 -0
  69. package/dist/chunk-FEWUHQNM.cjs +144 -0
  70. package/dist/{chunk-5TOFIR6L.js → chunk-FGGJQRLZ.js} +5 -142
  71. package/dist/chunk-FHP6LXJS.js +415 -0
  72. package/dist/{chunk-7LCYLPW2.cjs → chunk-FJPADH77.cjs} +7 -4
  73. package/dist/{chunk-T36DDXSF.js → chunk-FXKTYFYA.js} +150 -25
  74. package/dist/chunk-GCMWDSBZ.cjs +729 -0
  75. package/dist/chunk-GJNCFRJU.cjs +125 -0
  76. package/dist/{chunk-Q4QX3AET.cjs → chunk-GMP623FG.cjs} +16 -13
  77. package/dist/{chunk-XD6IYDUX.js → chunk-GN3KDX4W.js} +119 -43
  78. package/dist/{chunk-QLEAOI3Q.cjs → chunk-GQYKQSTC.cjs} +10 -10
  79. package/dist/chunk-GTU2Z2WW.cjs +262 -0
  80. package/dist/chunk-GZG4KA4E.js +529 -0
  81. package/dist/{chunk-BND3ST2K.cjs → chunk-H3MGK7TX.cjs} +42 -32
  82. package/dist/{chunk-XRKWN5PL.cjs → chunk-H5DZIHJP.cjs} +14 -18
  83. package/dist/{chunk-Z34RLXRA.cjs → chunk-HANL7K2Q.cjs} +65 -50
  84. package/dist/{chunk-3SAK5KFL.cjs → chunk-HCCQLAA4.cjs} +2 -11
  85. package/dist/{chunk-LXJ4667L.cjs → chunk-HGVXZDSK.cjs} +108 -20
  86. package/dist/{chunk-3FJCK5XA.js → chunk-HRODTEEO.js} +30 -10
  87. package/dist/{chunk-HQUEA5R6.cjs → chunk-HZCQO4JM.cjs} +6 -6
  88. package/dist/{chunk-S565K7NK.js → chunk-I2O7TW6B.js} +12 -8
  89. package/dist/chunk-IHESJZSW.js +4490 -0
  90. package/dist/{chunk-FSF7EQVA.cjs → chunk-IRWWS72C.cjs} +63 -22
  91. package/dist/{chunk-5O6TQC6M.cjs → chunk-IVIA7K75.cjs} +689 -127
  92. package/dist/chunk-IVY74O6C.js +247 -0
  93. package/dist/chunk-J32ZJZJH.js +554 -0
  94. package/dist/chunk-JD7CIZ33.js +1949 -0
  95. package/dist/{chunk-T7LEXZUZ.cjs → chunk-JIYN45TV.cjs} +14 -15
  96. package/dist/{chunk-FFKU7BTK.cjs → chunk-KHPCJRI3.cjs} +24 -21
  97. package/dist/chunk-KKFZ3B6J.cjs +557 -0
  98. package/dist/chunk-KPJL34Y7.cjs +186 -0
  99. package/dist/{chunk-HE7ULERA.cjs → chunk-KQTPCYTG.cjs} +128 -44
  100. package/dist/{chunk-OFKWH2IP.js → chunk-KX76JUQY.js} +3 -3
  101. package/dist/chunk-L4LFINPO.js +623 -0
  102. package/dist/{chunk-33LSUQDD.cjs → chunk-L63H3SQ4.cjs} +43 -31
  103. package/dist/{chunk-K6EKD26I.js → chunk-LAOCQJ2M.js} +64 -8
  104. package/dist/chunk-LM2VU56C.cjs +37 -0
  105. package/dist/chunk-M56JSP4A.js +400 -0
  106. package/dist/chunk-MBOOR7X4.js +18 -0
  107. package/dist/{chunk-XWPNTWDN.cjs → chunk-MJVIRCUV.cjs} +31 -27
  108. package/dist/{chunk-SDAMZIRE.js → chunk-MSMIFMBL.js} +135 -18
  109. package/dist/{chunk-56IF4NTA.js → chunk-MXFUTKCO.js} +18 -18
  110. package/dist/{chunk-6UEHYZ7V.cjs → chunk-MXJ5SS53.cjs} +447 -31
  111. package/dist/chunk-MXWNGCRS.js +2176 -0
  112. package/dist/chunk-MYY4PMWX.cjs +264 -0
  113. package/dist/chunk-N75IH2HY.js +258 -0
  114. package/dist/{chunk-GVUR45UF.cjs → chunk-NG77ATEW.cjs} +7 -6
  115. package/dist/chunk-NW5G5FBQ.js +215 -0
  116. package/dist/{chunk-E3FWRT3Z.js → chunk-OEFY723R.js} +28 -13
  117. package/dist/chunk-OEV5RMZO.cjs +3042 -0
  118. package/dist/{chunk-X4ZF6CNE.cjs → chunk-OIQYIIO3.cjs} +7 -7
  119. package/dist/{chunk-2CWOLHTE.js → chunk-OL46QLBJ.js} +3 -11
  120. package/dist/chunk-OPZ7XDDI.js +487 -0
  121. package/dist/chunk-OSYNRVOV.cjs +243 -0
  122. package/dist/{chunk-TEWCN33Y.js → chunk-P7YIA5LN.js} +91 -7
  123. package/dist/chunk-PGANYCAG.cjs +220 -0
  124. package/dist/{chunk-CS2EMTGF.js → chunk-QAVXL2IH.js} +62 -21
  125. package/dist/{chunk-T4NKMBDL.js → chunk-QCCBXSCE.js} +1666 -756
  126. package/dist/{chunk-F4IULT7N.js → chunk-QPOQ7VPI.js} +16 -13
  127. package/dist/{chunk-6XSERL6L.js → chunk-QTPMJRGS.js} +3108 -2827
  128. package/dist/{chunk-F3HH56EB.cjs → chunk-QWNQ523V.cjs} +1730 -823
  129. package/dist/{chunk-R7MA7QWV.js → chunk-R3IVNY6P.js} +102 -23
  130. package/dist/chunk-R75BSDH7.cjs +50 -0
  131. package/dist/{chunk-BF2235SI.cjs → chunk-RMHC2VG7.cjs} +2876 -2592
  132. package/dist/chunk-RUXGBKPS.cjs +4517 -0
  133. package/dist/{chunk-UERJ3YJV.js → chunk-S5IFXW6E.js} +113 -9
  134. package/dist/{chunk-27LWW5FU.cjs → chunk-S6YWHCKV.cjs} +5 -5
  135. package/dist/{chunk-WB4Z63GG.js → chunk-SIEXCILW.js} +3 -3
  136. package/dist/{chunk-CLYEIWA5.cjs → chunk-SLU6UPJI.cjs} +5 -3
  137. package/dist/{chunk-LZ266PCM.cjs → chunk-T5J7ZKP3.cjs} +446 -60
  138. package/dist/chunk-TDCNJHWO.js +341 -0
  139. package/dist/{chunk-IHOUYQIA.js → chunk-TG7O4WBC.js} +5 -5
  140. package/dist/chunk-THCK6ECW.js +2085 -0
  141. package/dist/chunk-TJHVSBP2.js +439 -0
  142. package/dist/chunk-TK74TR4H.js +5541 -0
  143. package/dist/{chunk-CDPGV4DN.js → chunk-U4NBQJBY.js} +14 -15
  144. package/dist/{chunk-NOZZ46QU.js → chunk-UD3DSHZM.js} +10 -14
  145. package/dist/chunk-UDMYRFDZ.js +3038 -0
  146. package/dist/{chunk-WDW67DZB.cjs → chunk-UOIGFQXC.cjs} +90 -68
  147. package/dist/{chunk-BU7VWW2K.js → chunk-URG2SJLK.js} +14 -15
  148. package/dist/{chunk-EQV4R3EV.cjs → chunk-V73NPPTM.cjs} +152 -35
  149. package/dist/chunk-VECQYRXL.js +474 -0
  150. package/dist/chunk-VEXPG4WN.js +1989 -0
  151. package/dist/{chunk-LDP5OK6G.js → chunk-VMLKSV26.js} +5 -5
  152. package/dist/{chunk-5BGSECRJ.cjs → chunk-VSK7W3O5.cjs} +47 -27
  153. package/dist/chunk-VVKVQZI6.js +55 -0
  154. package/dist/{chunk-YQK5JNFK.js → chunk-W55Z7QIX.js} +103 -15
  155. package/dist/{chunk-KSGXLT74.cjs → chunk-W6P2GBHH.cjs} +3 -3
  156. package/dist/{chunk-IBDG74G2.cjs → chunk-W6RW64BB.cjs} +7 -7
  157. package/dist/chunk-WDT3JTGM.cjs +483 -0
  158. package/dist/{chunk-HPS76H7Q.js → chunk-WKX5AMOY.js} +3 -3
  159. package/dist/chunk-WNNE3PO3.js +34 -0
  160. package/dist/{chunk-XG23EUQX.cjs → chunk-WRLUBRKS.cjs} +538 -312
  161. package/dist/{chunk-IFNQFCTM.js → chunk-WRNEH5MO.js} +79 -8
  162. package/dist/{chunk-54FHG2MX.js → chunk-WRWEX5ZF.js} +7 -4
  163. package/dist/{chunk-KCQ5NDYC.cjs → chunk-X3GJPRVK.cjs} +154 -80
  164. package/dist/{chunk-7AGYRWKW.cjs → chunk-XFXGA5IW.cjs} +126 -22
  165. package/dist/{chunk-TQSZUOW5.cjs → chunk-XHIV6326.cjs} +4 -4
  166. package/dist/chunk-XJAN7CZG.cjs +432 -0
  167. package/dist/chunk-XL6INWKT.js +121 -0
  168. package/dist/{chunk-E3UALNFA.js → chunk-XMWZG36H.js} +4 -4
  169. package/dist/{chunk-BKIGPPVM.js → chunk-XSFNHP2E.js} +6 -3
  170. package/dist/{chunk-H5Z7NASB.js → chunk-XT6JY5W5.js} +25 -3
  171. package/dist/chunk-XXZJEFKW.cjs +490 -0
  172. package/dist/chunk-Y3MWXQSB.cjs +5737 -0
  173. package/dist/chunk-YF2I3MV3.js +46 -0
  174. package/dist/{chunk-V3NN3HPP.js → chunk-YIMN575O.js} +437 -52
  175. package/dist/chunk-YIVFJNYV.js +176 -0
  176. package/dist/{chunk-MD6KDHVE.cjs → chunk-YKGPCZEE.cjs} +10 -10
  177. package/dist/chunk-YQELFNJV.js +39 -0
  178. package/dist/chunk-YSCKYJOB.cjs +2196 -0
  179. package/dist/chunk-Z5XMPRNC.cjs +5390 -0
  180. package/dist/{chunk-3FYZOR7S.cjs → chunk-ZDSYWBIE.cjs} +18 -18
  181. package/dist/{chunk-6TZPZCOJ.cjs → chunk-ZKSS47EV.cjs} +24 -19
  182. package/dist/chunk-ZUL5AVTX.cjs +1993 -0
  183. package/dist/chunk-ZXBZVXDW.js +5386 -0
  184. package/dist/{chunk-DMG7C4H2.js → chunk-ZZ7RO2UQ.js} +312 -44
  185. package/dist/cli/holoscript-runner.cjs +200 -204
  186. package/dist/cli/holoscript-runner.js +144 -148
  187. package/dist/codebase/index.cjs +1 -1
  188. package/dist/codebase/index.js +1 -1
  189. package/dist/compiler/agent-inference.cjs +10 -7
  190. package/dist/compiler/agent-inference.js +6 -3
  191. package/dist/compiler/android-xr.cjs +12 -7
  192. package/dist/compiler/android-xr.js +10 -5
  193. package/dist/compiler/android.cjs +12 -8
  194. package/dist/compiler/android.js +10 -6
  195. package/dist/compiler/ar.cjs +9 -6
  196. package/dist/compiler/ar.js +7 -4
  197. package/dist/compiler/babylon.cjs +12 -8
  198. package/dist/compiler/babylon.js +11 -7
  199. package/dist/compiler/business-quest.cjs +43 -0
  200. package/dist/compiler/business-quest.js +4 -0
  201. package/dist/compiler/coco.cjs +1 -1
  202. package/dist/compiler/coco.js +1 -1
  203. package/dist/compiler/context.cjs +25 -0
  204. package/dist/compiler/context.d.ts +28 -0
  205. package/dist/compiler/context.js +8 -0
  206. package/dist/compiler/domain-block-utils.cjs +155 -152
  207. package/dist/compiler/domain-block-utils.js +7 -4
  208. package/dist/compiler/dtdl.cjs +10 -7
  209. package/dist/compiler/dtdl.js +7 -4
  210. package/dist/compiler/gltf-pipeline.cjs +9 -9
  211. package/dist/compiler/gltf-pipeline.js +2 -2
  212. package/dist/compiler/godot.cjs +9 -6
  213. package/dist/compiler/godot.js +8 -5
  214. package/dist/compiler/incremental.cjs +12 -7
  215. package/dist/compiler/incremental.js +7 -2
  216. package/dist/compiler/index.cjs +3550 -268
  217. package/dist/compiler/index.d.ts +404 -21
  218. package/dist/compiler/index.js +3280 -138
  219. package/dist/compiler/ios.cjs +11 -8
  220. package/dist/compiler/ios.js +9 -6
  221. package/dist/compiler/llm-provider-capabilities.cjs +25 -0
  222. package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
  223. package/dist/compiler/llm-provider-capabilities.js +8 -0
  224. package/dist/compiler/multi-layer.cjs +14 -10
  225. package/dist/compiler/multi-layer.js +13 -9
  226. package/dist/compiler/nodetoy.cjs +5 -5
  227. package/dist/compiler/nodetoy.js +2 -2
  228. package/dist/compiler/openxr.cjs +10 -6
  229. package/dist/compiler/openxr.js +9 -5
  230. package/dist/compiler/playcanvas.cjs +10 -7
  231. package/dist/compiler/playcanvas.js +9 -6
  232. package/dist/compiler/r3f.cjs +17 -13
  233. package/dist/compiler/r3f.d.ts +22 -0
  234. package/dist/compiler/r3f.js +12 -8
  235. package/dist/compiler/remotion.cjs +1 -1
  236. package/dist/compiler/remotion.js +1 -1
  237. package/dist/compiler/reproducibility.cjs +1 -1
  238. package/dist/compiler/reproducibility.js +1 -1
  239. package/dist/compiler/sdf.cjs +10 -7
  240. package/dist/compiler/sdf.js +8 -5
  241. package/dist/compiler/semantic-scene.cjs +1 -1
  242. package/dist/compiler/semantic-scene.js +1 -1
  243. package/dist/compiler/state.cjs +9 -5
  244. package/dist/compiler/state.js +7 -3
  245. package/dist/compiler/trait-composition.cjs +11 -7
  246. package/dist/compiler/trait-composition.js +7 -3
  247. package/dist/compiler/unity.cjs +10 -6
  248. package/dist/compiler/unity.js +9 -5
  249. package/dist/compiler/unreal.cjs +11 -7
  250. package/dist/compiler/unreal.js +9 -5
  251. package/dist/compiler/urdf.cjs +20 -13
  252. package/dist/compiler/urdf.js +8 -5
  253. package/dist/compiler/usd-physics.cjs +10 -7
  254. package/dist/compiler/usd-physics.js +7 -4
  255. package/dist/compiler/visionos.cjs +10 -6
  256. package/dist/compiler/visionos.js +9 -5
  257. package/dist/compiler/vrchat.cjs +10 -7
  258. package/dist/compiler/vrchat.js +8 -5
  259. package/dist/compiler/vrr.cjs +10 -7
  260. package/dist/compiler/vrr.js +8 -5
  261. package/dist/compiler/wasm.cjs +13 -10
  262. package/dist/compiler/wasm.js +8 -5
  263. package/dist/compiler/webgpu.cjs +9 -6
  264. package/dist/compiler/webgpu.js +8 -5
  265. package/dist/constants.d.ts +3 -2
  266. package/dist/coordinators/index.cjs +1266 -0
  267. package/dist/coordinators/index.d.ts +260 -0
  268. package/dist/coordinators/index.js +1259 -0
  269. package/dist/debugger.cjs +9 -7
  270. package/dist/debugger.js +7 -5
  271. package/dist/entries/interop.cjs +23 -21
  272. package/dist/entries/interop.js +5 -3
  273. package/dist/entries/scripting.cjs +18 -18
  274. package/dist/entries/scripting.js +8 -8
  275. package/dist/hololand/index.cjs +146 -0
  276. package/dist/hololand/index.d.ts +70 -0
  277. package/dist/hololand/index.js +5 -0
  278. package/dist/index.cjs +20332 -18121
  279. package/dist/index.d.ts +1477 -40
  280. package/dist/index.js +19451 -17638
  281. package/dist/math/tropical-spmv.cjs +45 -0
  282. package/dist/math/tropical-spmv.js +4 -0
  283. package/dist/math/vec3.cjs +14 -14
  284. package/dist/math/vec3.js +2 -2
  285. package/dist/{ml-dsa-PHCWUBPX.cjs → ml-dsa-FSKBTE3W.cjs} +177 -90
  286. package/dist/{ml-dsa-WYLJHJO6.js → ml-dsa-Z7JDKW4L.js} +158 -71
  287. package/dist/paper-0c-spike/index.cjs +150 -0
  288. package/dist/paper-0c-spike/index.d.ts +29 -0
  289. package/dist/paper-0c-spike/index.js +141 -0
  290. package/dist/parser.cjs +45 -11
  291. package/dist/parser.d.ts +11 -0
  292. package/dist/parser.js +10 -8
  293. package/dist/{playwright-RL6GY4F7.cjs → playwright-3AT3AKTV.cjs} +1985 -1985
  294. package/dist/{playwright-5OSAPTNH.js → playwright-VZPDVUEQ.js} +3 -3
  295. package/dist/reconstruction/index.cjs +153 -0
  296. package/dist/reconstruction/index.d.ts +105 -0
  297. package/dist/reconstruction/index.js +8 -0
  298. package/dist/runtime.cjs +7 -5
  299. package/dist/runtime.js +6 -4
  300. package/dist/self-improvement/index.cjs +563 -0
  301. package/dist/self-improvement/index.js +545 -0
  302. package/dist/storage/index.cjs +10 -9
  303. package/dist/storage/index.js +3 -2
  304. package/dist/testing.cjs +25 -0
  305. package/dist/testing.d.ts +70 -0
  306. package/dist/testing.js +4 -0
  307. package/dist/tools/index.d.ts +22 -1
  308. package/dist/traitDocs/traitDocs.cjs +33 -0
  309. package/dist/traitDocs/traitDocs.d.ts +69 -0
  310. package/dist/traitDocs/traitDocs.js +7 -0
  311. package/dist/traits/botanical-lotus.cjs +41 -0
  312. package/dist/traits/botanical-lotus.d.ts +172 -0
  313. package/dist/traits/botanical-lotus.js +4 -0
  314. package/dist/traits/engines/index.cjs +520 -0
  315. package/dist/traits/engines/index.d.ts +111 -0
  316. package/dist/traits/engines/index.js +380 -0
  317. package/dist/traits/index.cjs +17630 -7881
  318. package/dist/traits/index.d.ts +197 -0
  319. package/dist/traits/index.js +16573 -7193
  320. package/dist/traits/simulation-solver-factory.cjs +13 -0
  321. package/dist/traits/simulation-solver-factory.d.ts +23 -0
  322. package/dist/traits/simulation-solver-factory.js +4 -0
  323. package/dist/traits/webcam-gaze.cjs +35 -0
  324. package/dist/traits/webcam-gaze.d.ts +17 -0
  325. package/dist/traits/webcam-gaze.js +4 -0
  326. package/dist/type-checker.cjs +6 -5
  327. package/dist/type-checker.js +4 -3
  328. package/dist/world/index.cjs +947 -0
  329. package/dist/world/index.d.ts +147 -0
  330. package/dist/world/index.js +939 -0
  331. package/dist/world-model/index.cjs +1446 -0
  332. package/dist/world-model/index.d.ts +119 -0
  333. package/dist/world-model/index.js +1414 -0
  334. package/dist/wot/index.cjs +29 -0
  335. package/dist/wot/index.js +4 -0
  336. package/package.json +153 -61
  337. package/dist/GLTFPipeline-DEN36VNK.js +0 -12
  338. package/dist/GLTFPipeline-YPCAK236.cjs +0 -33
  339. package/dist/chunk-4XSNJCLC.cjs +0 -1859
  340. package/dist/chunk-A7PIMZGU.js +0 -263
  341. package/dist/chunk-BWFJEM5A.js +0 -5419
  342. package/dist/chunk-CBJSLA2E.cjs +0 -5423
  343. package/dist/chunk-K3JDKWGI.cjs +0 -270
  344. package/dist/chunk-LSW7P7ML.js +0 -3675
  345. package/dist/chunk-MEASWI2Y.js +0 -126
  346. package/dist/chunk-NCUKG4SK.cjs +0 -3075
  347. package/dist/chunk-Q5JT3YML.cjs +0 -129
  348. package/dist/chunk-QGKNANZ3.js +0 -3071
  349. package/dist/chunk-S2N5TNMA.js +0 -1855
  350. package/dist/chunk-TSH3MSQU.cjs +0 -129
  351. package/dist/chunk-WGMEAYBG.js +0 -126
  352. package/dist/chunk-X6SEAXAX.cjs +0 -3681
@@ -0,0 +1,243 @@
1
+ 'use strict';
2
+
3
+ // src/resilience/ResiliencePatterns.ts
4
+ var CircuitBreakerState = /* @__PURE__ */ ((CircuitBreakerState2) => {
5
+ CircuitBreakerState2["CLOSED"] = "CLOSED";
6
+ CircuitBreakerState2["OPEN"] = "OPEN";
7
+ CircuitBreakerState2["HALF_OPEN"] = "HALF_OPEN";
8
+ return CircuitBreakerState2;
9
+ })(CircuitBreakerState || {});
10
+ var CircuitBreaker = class {
11
+ constructor(config = {}) {
12
+ this.state = "CLOSED" /* CLOSED */;
13
+ this.failureCount = 0;
14
+ this.successCount = 0;
15
+ this.lastFailureTime = null;
16
+ this.failures = [];
17
+ this.config = {
18
+ failureThreshold: 5,
19
+ successThreshold: 2,
20
+ resetTimeoutMs: 6e4,
21
+ // 1 minute
22
+ windowMs: 3e4,
23
+ // 30 seconds
24
+ isRetryable: (err) => err instanceof Error,
25
+ ...config
26
+ };
27
+ }
28
+ /**
29
+ * Execute function with circuit breaker protection
30
+ */
31
+ async execute(fn) {
32
+ if (this.state === "OPEN" /* OPEN */) {
33
+ if (Date.now() - (this.lastFailureTime || 0) > this.config.resetTimeoutMs) {
34
+ this.state = "HALF_OPEN" /* HALF_OPEN */;
35
+ this.successCount = 0;
36
+ } else {
37
+ throw new Error(`Circuit breaker is OPEN. Retry after ${this.config.resetTimeoutMs}ms`);
38
+ }
39
+ }
40
+ try {
41
+ const result = await fn();
42
+ this.onSuccess();
43
+ return result;
44
+ } catch (error) {
45
+ this.onFailure(error);
46
+ throw error;
47
+ }
48
+ }
49
+ onSuccess() {
50
+ this.failureCount = 0;
51
+ this.failures = this.failures.filter((f) => Date.now() - f.timestamp < this.config.windowMs);
52
+ if (this.state === "HALF_OPEN" /* HALF_OPEN */) {
53
+ this.successCount++;
54
+ if (this.successCount >= this.config.successThreshold) {
55
+ this.state = "CLOSED" /* CLOSED */;
56
+ }
57
+ }
58
+ }
59
+ onFailure(error) {
60
+ this.lastFailureTime = Date.now();
61
+ this.failureCount++;
62
+ this.failures.push({ timestamp: Date.now(), error });
63
+ this.failures = this.failures.filter((f) => Date.now() - f.timestamp < this.config.windowMs);
64
+ if (this.state === "HALF_OPEN" /* HALF_OPEN */) {
65
+ this.state = "OPEN" /* OPEN */;
66
+ } else if (this.failureCount >= this.config.failureThreshold) {
67
+ this.state = "OPEN" /* OPEN */;
68
+ console.error(`Circuit breaker OPEN after ${this.failureCount} failures: ${error.message}`);
69
+ }
70
+ }
71
+ get currentState() {
72
+ return this.state;
73
+ }
74
+ /**
75
+ * Get current circuit breaker state (accessor method)
76
+ */
77
+ getState() {
78
+ if (this.state === "OPEN" /* OPEN */ && Date.now() - (this.lastFailureTime || 0) > this.config.resetTimeoutMs) {
79
+ return "HALF_OPEN" /* HALF_OPEN */;
80
+ }
81
+ return this.state;
82
+ }
83
+ /**
84
+ * Get circuit breaker metrics
85
+ */
86
+ getMetrics() {
87
+ return {
88
+ state: this.state,
89
+ totalFailures: this.failureCount,
90
+ totalSuccesses: this.successCount,
91
+ lastFailureTime: this.lastFailureTime,
92
+ totalRequests: this.failureCount + this.successCount
93
+ };
94
+ }
95
+ };
96
+ async function retryWithBackoff(fn, config = {}) {
97
+ const cfg = {
98
+ maxAttempts: 3,
99
+ initialBackoffMs: 100,
100
+ maxBackoffMs: 1e4,
101
+ multiplier: 2,
102
+ jitter: true,
103
+ isRetryable: (err, attempt) => attempt < cfg.maxAttempts,
104
+ ...config
105
+ };
106
+ let lastError = null;
107
+ for (let attempt = 1; attempt <= cfg.maxAttempts; attempt++) {
108
+ try {
109
+ return await fn();
110
+ } catch (error) {
111
+ lastError = error;
112
+ if (!cfg.isRetryable(lastError, attempt)) {
113
+ throw lastError;
114
+ }
115
+ if (attempt < cfg.maxAttempts) {
116
+ const backoff = Math.min(
117
+ cfg.initialBackoffMs * Math.pow(cfg.multiplier, attempt - 1),
118
+ cfg.maxBackoffMs
119
+ );
120
+ const jitteredBackoff = cfg.jitter ? backoff * (0.5 + Math.random() * 0.5) : backoff;
121
+ console.warn(
122
+ `Attempt ${attempt} failed: ${lastError.message}. Retrying in ${Math.round(jitteredBackoff)}ms`
123
+ );
124
+ await sleep(jitteredBackoff);
125
+ }
126
+ }
127
+ }
128
+ throw lastError || new Error("Max retry attempts exceeded");
129
+ }
130
+ var Bulkhead = class {
131
+ constructor(config = {}) {
132
+ this.running = 0;
133
+ this.queue = [];
134
+ this.config = {
135
+ maxConcurrent: 10,
136
+ queueSize: 100,
137
+ timeoutMs: 3e4,
138
+ ...config
139
+ };
140
+ }
141
+ /**
142
+ * Execute function within bulkhead
143
+ */
144
+ async execute(fn) {
145
+ if (this.queue.length >= this.config.queueSize) {
146
+ throw new Error("Bulkhead queue full - too many pending operations");
147
+ }
148
+ return new Promise((resolve, reject) => {
149
+ const timeoutId = setTimeout(() => {
150
+ const idx = this.queue.findIndex((item) => item.resolve === resolve);
151
+ if (idx !== -1) {
152
+ this.queue.splice(idx, 1);
153
+ }
154
+ reject(new Error("Bulkhead operation timeout"));
155
+ }, this.config.timeoutMs);
156
+ this.queue.push({
157
+ fn,
158
+ // @ts-expect-error
159
+ resolve,
160
+ reject,
161
+ timeoutId
162
+ });
163
+ this.processQueue();
164
+ });
165
+ }
166
+ processQueue() {
167
+ while (this.running < this.config.maxConcurrent && this.queue.length > 0) {
168
+ const item = this.queue.shift();
169
+ if (!item) break;
170
+ this.running++;
171
+ item.fn().then((result) => {
172
+ clearTimeout(item.timeoutId);
173
+ item.resolve(result);
174
+ }).catch((error) => {
175
+ clearTimeout(item.timeoutId);
176
+ item.reject(error);
177
+ }).finally(() => {
178
+ this.running--;
179
+ this.processQueue();
180
+ });
181
+ }
182
+ }
183
+ get stats() {
184
+ return {
185
+ running: this.running,
186
+ queued: this.queue.length
187
+ };
188
+ }
189
+ /**
190
+ * Get bulkhead state (accessor method)
191
+ */
192
+ getState() {
193
+ return {
194
+ running: this.running,
195
+ queued: this.queue.length,
196
+ maxConcurrent: this.config.maxConcurrent
197
+ };
198
+ }
199
+ /**
200
+ * Get bulkhead metrics
201
+ */
202
+ getMetrics() {
203
+ return {
204
+ running: this.running,
205
+ queued: this.queue.length,
206
+ utilizationPercent: this.running / this.config.maxConcurrent * 100,
207
+ queueUtilizationPercent: this.queue.length / this.config.queueSize * 100
208
+ };
209
+ }
210
+ };
211
+ async function fallbackChain(strategies) {
212
+ let lastError = null;
213
+ for (let i = 0; i < strategies.length; i++) {
214
+ try {
215
+ const result = await strategies[i]();
216
+ return result;
217
+ } catch (error) {
218
+ lastError = error;
219
+ console.warn(`Strategy ${i + 1} failed: ${lastError.message}`);
220
+ }
221
+ }
222
+ throw lastError || new Error("All fallback strategies failed");
223
+ }
224
+ function sleep(ms) {
225
+ return new Promise((resolve) => setTimeout(resolve, ms));
226
+ }
227
+ async function withTimeout(promise, timeoutMs) {
228
+ return Promise.race([
229
+ promise,
230
+ new Promise(
231
+ (_, reject) => setTimeout(() => reject(new Error(`Operation timeout after ${timeoutMs}ms`)), timeoutMs)
232
+ )
233
+ ]);
234
+ }
235
+
236
+ exports.Bulkhead = Bulkhead;
237
+ exports.CircuitBreaker = CircuitBreaker;
238
+ exports.CircuitBreakerState = CircuitBreakerState;
239
+ exports.fallbackChain = fallbackChain;
240
+ exports.retryWithBackoff = retryWithBackoff;
241
+ exports.withTimeout = withTimeout;
242
+ //# sourceMappingURL=chunk-OSYNRVOV.cjs.map
243
+ //# sourceMappingURL=chunk-OSYNRVOV.cjs.map
@@ -1,7 +1,8 @@
1
- import { init_DomainBlockCompilerMixin, compileDomainBlocks, inputToUnity, compileInputBlock, navigationToUnity, compileNavigationBlock, renderingToUnity, compileRenderingBlock, proceduralToUnity, compileProceduralBlock, web3ToUnity, compileWeb3Block, architectureToUnity, compileArchitectureBlock, musicToUnity, compileMusicBlock, educationToUnity, compileEducationBlock, datavizToUnity, compileDataVizBlock, iotToUnity, compileIoTBlock, compileRoboticsBlock, roboticsToUnity, compileHealthcareBlock, healthcareToUnity, compilePaymentBlock, paymentToUnity, compileNarrativeBlock, narrativeToUnity, compileWeatherBlock, weatherToUnity, compileAudioSourceBlock, audioSourceToUnity, compilePostProcessingBlock, postProcessingToUnity, compileParticleBlock, particlesToUnity, compilePhysicsBlock, physicsToUnity, compileMaterialBlock, materialToUnity } from './chunk-YQK5JNFK.js';
2
- import { init_CompilerBase, CompilerBase } from './chunk-6XSERL6L.js';
3
- import { __export, __esm } from './chunk-2CWOLHTE.js';
4
- import { ANSCapabilityPath } from '@holoscript/platform';
1
+ import { init_PlatformConditionalCompilerMixin, createPlatformTarget, PlatformConditionalCompilerMixin } from './chunk-GZG4KA4E.js';
2
+ import { init_DomainBlockCompilerMixin, compileDomainBlocks, inputToUnity, compileInputBlock, navigationToUnity, compileNavigationBlock, renderingToUnity, compileRenderingBlock, proceduralToUnity, compileProceduralBlock, web3ToUnity, compileWeb3Block, architectureToUnity, compileArchitectureBlock, musicToUnity, compileMusicBlock, educationToUnity, compileEducationBlock, datavizToUnity, compileDataVizBlock, iotToUnity, compileIoTBlock, compileRoboticsBlock, roboticsToUnity, compileHealthcareBlock, healthcareToUnity, compilePaymentBlock, paymentToUnity, compileNarrativeBlock, narrativeToUnity, compileWeatherBlock, weatherToUnity, compileAudioSourceBlock, audioSourceToUnity, compilePostProcessingBlock, postProcessingToUnity, compileParticleBlock, particlesToUnity, compilePhysicsBlock, physicsToUnity, compileMaterialBlock, materialToUnity } from './chunk-W55Z7QIX.js';
3
+ import { init_CompilerBase, CompilerBase } from './chunk-QTPMJRGS.js';
4
+ import { __export, __esm } from './chunk-OL46QLBJ.js';
5
+ import { ANSCapabilityPath } from '@holoscript/core-types/ans';
5
6
 
6
7
  // src/compiler/UnityCompiler.ts
7
8
  var UnityCompiler_exports = {};
@@ -13,6 +14,7 @@ var init_UnityCompiler = __esm({
13
14
  "src/compiler/UnityCompiler.ts"() {
14
15
  init_CompilerBase();
15
16
  init_DomainBlockCompilerMixin();
17
+ init_PlatformConditionalCompilerMixin();
16
18
  UnityCompiler = class extends CompilerBase {
17
19
  constructor(options = {}) {
18
20
  super();
@@ -23,14 +25,23 @@ var init_UnityCompiler = __esm({
23
25
  namespace: options.namespace || "HoloScene",
24
26
  className: options.className || "GeneratedScene",
25
27
  useURP: options.useURP ?? true,
26
- indent: options.indent || " "
28
+ indent: options.indent || " ",
29
+ provenanceHash: options.provenanceHash ?? "",
30
+ holomapPointCloud: options.holomapPointCloud
27
31
  };
32
+ if (options.platformTarget) {
33
+ this._platformTarget = typeof options.platformTarget === "string" ? createPlatformTarget(options.platformTarget) : options.platformTarget;
34
+ }
28
35
  }
29
36
  getRequiredCapability() {
30
37
  return ANSCapabilityPath.UNITY;
31
38
  }
32
39
  compile(composition, agentToken, outputPath) {
33
40
  this.validateCompilerAccess(agentToken, outputPath);
41
+ if (this._platformTarget) {
42
+ const platformMixin = new PlatformConditionalCompilerMixin();
43
+ composition = platformMixin.filterForPlatform(composition, this._platformTarget);
44
+ }
34
45
  this.lines = [];
35
46
  this.indentLevel = 0;
36
47
  this.emit("// Auto-generated by HoloScript UnityCompiler");
@@ -38,6 +49,9 @@ var init_UnityCompiler = __esm({
38
49
  `// Source: composition "${this.escapeStringValue(composition.name, "CSharp")}"`
39
50
  );
40
51
  this.emit("// Do not edit manually \u2014 regenerate from .holo source");
52
+ if (this.options.provenanceHash) {
53
+ this.emit(`// Provenance Hash: ${this.options.provenanceHash}`);
54
+ }
41
55
  this.emit("");
42
56
  this.emit("using UnityEngine;");
43
57
  this.emit("using UnityEngine.UI;");
@@ -101,6 +115,7 @@ var init_UnityCompiler = __esm({
101
115
  }
102
116
  }
103
117
  }
118
+ this.emitHolomapPointCloudLoader();
104
119
  this.indentLevel--;
105
120
  this.emit("}");
106
121
  this.emit("");
@@ -127,6 +142,75 @@ var init_UnityCompiler = __esm({
127
142
  this.emit("}");
128
143
  return this.lines.join("\n");
129
144
  }
145
+ emitHolomapPointCloudLoader() {
146
+ const h = this.options.holomapPointCloud;
147
+ if (!h || h.pointCount < 1) return;
148
+ this.emit(" // --- HoloMap point cloud (base64 \u2192 Mesh topology Points) ---");
149
+ this.emit(" {");
150
+ const posLit = this.chunkBase64CSharpLiteral(h.positionsB64);
151
+ const colLit = this.chunkBase64CSharpLiteral(h.colorsB64);
152
+ this.emit(` string holomapPosB64 = ${posLit};`);
153
+ this.emit(` string holomapColB64 = ${colLit};`);
154
+ this.emit(` int holomapN = ${h.pointCount};`);
155
+ this.emit(
156
+ " byte[] holomapPos = System.Convert.FromBase64String(holomapPosB64);"
157
+ );
158
+ this.emit(
159
+ " byte[] holomapCol = System.Convert.FromBase64String(holomapColB64);"
160
+ );
161
+ this.emit(" if (holomapPos.Length >= holomapN * 12 && holomapCol.Length >= holomapN * 3)");
162
+ this.emit(" {");
163
+ this.emit(
164
+ ' var holomapGo = new GameObject("HoloMapReconstructionPoints");'
165
+ );
166
+ this.emit(" holomapGo.transform.SetParent(transform, false);");
167
+ this.emit(" var mesh = new Mesh();");
168
+ this.emit(
169
+ " mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;"
170
+ );
171
+ this.emit(" var verts = new Vector3[holomapN];");
172
+ this.emit(" var cols = new Color32[holomapN];");
173
+ this.emit(" var idx = new int[holomapN];");
174
+ this.emit(" for (int i = 0; i < holomapN; i++)");
175
+ this.emit(" {");
176
+ this.emit(
177
+ " int p = i * 12; int c = i * 3;"
178
+ );
179
+ this.emit(
180
+ " verts[i] = new Vector3(System.BitConverter.ToSingle(holomapPos, p), System.BitConverter.ToSingle(holomapPos, p + 4), System.BitConverter.ToSingle(holomapPos, p + 8));"
181
+ );
182
+ this.emit(
183
+ " cols[i] = new Color32(holomapCol[c], holomapCol[c + 1], holomapCol[c + 2], 255);"
184
+ );
185
+ this.emit(" idx[i] = i;");
186
+ this.emit(" }");
187
+ this.emit(" mesh.vertices = verts;");
188
+ this.emit(" mesh.colors32 = cols;");
189
+ this.emit(" mesh.SetIndices(idx, MeshTopology.Points, 0, true);");
190
+ this.emit(" mesh.RecalculateBounds();");
191
+ this.emit(" var mf = holomapGo.AddComponent<MeshFilter>();");
192
+ this.emit(" mf.sharedMesh = mesh;");
193
+ this.emit(" var mr = holomapGo.AddComponent<MeshRenderer>();");
194
+ this.emit(
195
+ ' var sh = Shader.Find("Universal Render Pipeline/Unlit");'
196
+ );
197
+ this.emit(
198
+ ' if (sh == null) sh = Shader.Find("Unlit/Color");'
199
+ );
200
+ this.emit(' mr.sharedMaterial = sh != null ? new Material(sh) : new Material(Shader.Find("Hidden/InternalErrorShader"));');
201
+ this.emit(" }");
202
+ this.emit(" }");
203
+ }
204
+ /** Concatenated string literals so very large MCP payloads stay valid C#. */
205
+ chunkBase64CSharpLiteral(b64) {
206
+ const chunk = 4096;
207
+ if (b64.length <= chunk) return `"${b64}"`;
208
+ const parts = [];
209
+ for (let i = 0; i < b64.length; i += chunk) {
210
+ parts.push(`"${b64.slice(i, i + chunk)}"`);
211
+ }
212
+ return parts.join(" + ");
213
+ }
130
214
  compileDomainBlocks(composition) {
131
215
  const domainBlocks = composition.domainBlocks ?? [];
132
216
  if (domainBlocks.length === 0) return;
@@ -690,5 +774,5 @@ var init_UnityCompiler = __esm({
690
774
  });
691
775
 
692
776
  export { UnityCompiler, UnityCompiler_exports, init_UnityCompiler };
693
- //# sourceMappingURL=chunk-TEWCN33Y.js.map
694
- //# sourceMappingURL=chunk-TEWCN33Y.js.map
777
+ //# sourceMappingURL=chunk-P7YIA5LN.js.map
778
+ //# sourceMappingURL=chunk-P7YIA5LN.js.map
@@ -0,0 +1,220 @@
1
+ 'use strict';
2
+
3
+ // src/testing/DeterminismHarness.ts
4
+ function getGlobal() {
5
+ return globalThis ?? {};
6
+ }
7
+ function detectRuntime() {
8
+ const g = getGlobal();
9
+ if (typeof g.window !== "undefined" && typeof g.document !== "undefined") {
10
+ return "browser";
11
+ }
12
+ if (typeof g.process !== "undefined" && g.process.versions?.node) {
13
+ return "node";
14
+ }
15
+ return "unknown";
16
+ }
17
+ function detectBrowserFromUserAgent(ua) {
18
+ if (!ua) return {};
19
+ let browser;
20
+ let os;
21
+ if (/Firefox\//.test(ua)) browser = "firefox";
22
+ else if (/Edg\//.test(ua)) browser = "edge";
23
+ else if (/Chrome\//.test(ua)) browser = "chromium";
24
+ else if (/Safari\//.test(ua)) browser = "safari";
25
+ if (/Windows NT/.test(ua)) os = "windows";
26
+ else if (/Mac OS X/.test(ua)) os = "macos";
27
+ else if (/Linux/.test(ua)) os = "linux";
28
+ else if (/Android/.test(ua)) os = "android";
29
+ else if (/iPhone|iPad/.test(ua)) os = "ios";
30
+ return { browser, os };
31
+ }
32
+ async function captureEnvironment(annotations = {}) {
33
+ const runtime = detectRuntime();
34
+ const g = getGlobal();
35
+ const info = { runtime };
36
+ if (Object.keys(annotations).length > 0) info.annotations = { ...annotations };
37
+ if (runtime === "browser") {
38
+ const nav = g.navigator;
39
+ const ua = nav?.userAgent;
40
+ info.browser = { userAgent: ua, ...detectBrowserFromUserAgent(ua) };
41
+ if (nav?.gpu?.requestAdapter) {
42
+ try {
43
+ const adapter = await nav.gpu.requestAdapter();
44
+ let gpuInfo = adapter?.info;
45
+ if (!gpuInfo && adapter?.requestAdapterInfo) {
46
+ gpuInfo = await adapter.requestAdapterInfo();
47
+ }
48
+ if (gpuInfo) {
49
+ info.gpu = {
50
+ vendor: gpuInfo.vendor,
51
+ architecture: gpuInfo.architecture,
52
+ device: gpuInfo.device,
53
+ description: gpuInfo.description,
54
+ backend: "webgpu"
55
+ };
56
+ }
57
+ } catch {
58
+ }
59
+ }
60
+ } else if (runtime === "node") {
61
+ const proc = g.process;
62
+ if (proc) {
63
+ info.node = {
64
+ version: proc.versions?.node ?? "unknown",
65
+ arch: proc.arch ?? "unknown",
66
+ platform: proc.platform ?? "unknown"
67
+ };
68
+ }
69
+ }
70
+ return info;
71
+ }
72
+ function toUint8Array(input) {
73
+ if (input instanceof Uint8Array) return input;
74
+ if (typeof TextEncoder !== "undefined") {
75
+ return new TextEncoder().encode(input);
76
+ }
77
+ const bytes = new Uint8Array(input.length);
78
+ for (let i = 0; i < input.length; i++) bytes[i] = input.charCodeAt(i) & 255;
79
+ return bytes;
80
+ }
81
+ function fnv1a64Hex(bytes) {
82
+ let hash = 0xcbf29ce484222325n;
83
+ const prime = 0x100000001b3n;
84
+ const mask = 0xffffffffffffffffn;
85
+ for (let i = 0; i < bytes.length; i++) {
86
+ hash = (hash ^ BigInt(bytes[i])) & mask;
87
+ hash = hash * prime & mask;
88
+ }
89
+ return hash.toString(16).padStart(16, "0");
90
+ }
91
+ async function hashBytes(input, algo = "sha256") {
92
+ const bytes = toUint8Array(input);
93
+ if (algo === "sha256") {
94
+ const g = getGlobal();
95
+ const subtle = g.crypto?.subtle;
96
+ if (subtle && typeof subtle.digest === "function") {
97
+ try {
98
+ const digest = await subtle.digest("SHA-256", bytes);
99
+ const view = new Uint8Array(digest);
100
+ let hex = "";
101
+ for (let i = 0; i < view.length; i++) hex += view[i].toString(16).padStart(2, "0");
102
+ return `sha256:${hex}`;
103
+ } catch {
104
+ }
105
+ }
106
+ }
107
+ return `fnv1a-64:${fnv1a64Hex(bytes)}`;
108
+ }
109
+ var DeterminismHarness = class {
110
+ constructor(options = {}) {
111
+ this.options = {
112
+ captureOutput: options.captureOutput ?? false,
113
+ hashAlgorithm: options.hashAlgorithm ?? "sha256",
114
+ annotations: options.annotations ?? {}
115
+ };
116
+ }
117
+ /**
118
+ * Run a probe function, capture environment, hash the output,
119
+ * return a structured ProbeResult. Never throws — errors are
120
+ * caught and reported on the result's `error` field with a
121
+ * sentinel outputHash of `error:<message>`.
122
+ */
123
+ async probe(name, fn, annotations = {}) {
124
+ const timestamp = Date.now();
125
+ const mergedAnnotations = { ...this.options.annotations, ...annotations };
126
+ const environment = await captureEnvironment(mergedAnnotations);
127
+ const started = typeof performance !== "undefined" ? performance.now() : timestamp;
128
+ let output;
129
+ let error;
130
+ try {
131
+ output = await fn();
132
+ } catch (err) {
133
+ error = err instanceof Error ? err.message : String(err);
134
+ }
135
+ const ended = typeof performance !== "undefined" ? performance.now() : Date.now();
136
+ const durationMs = Math.max(0, ended - started);
137
+ if (error !== void 0 || output === void 0) {
138
+ return {
139
+ name,
140
+ timestamp,
141
+ environment,
142
+ durationMs,
143
+ outputHash: `error:${error ?? "no-output"}`,
144
+ outputSize: 0,
145
+ error
146
+ };
147
+ }
148
+ const outputHash = await hashBytes(output, this.options.hashAlgorithm);
149
+ const outputSize = output instanceof Uint8Array ? output.byteLength : toUint8Array(output).byteLength;
150
+ const result = {
151
+ name,
152
+ timestamp,
153
+ environment,
154
+ durationMs,
155
+ outputHash,
156
+ outputSize
157
+ };
158
+ if (this.options.captureOutput) result.output = output;
159
+ return result;
160
+ }
161
+ /**
162
+ * Compare a collection of probe results and report whether they
163
+ * agree. Groups results by hash so the caller can see which
164
+ * environments produced which outputs.
165
+ */
166
+ static compareResults(results) {
167
+ if (results.length === 0) {
168
+ return {
169
+ probeName: "(empty)",
170
+ totalResults: 0,
171
+ uniqueHashes: 0,
172
+ divergent: false,
173
+ groups: [],
174
+ summary: "No results supplied to compare."
175
+ };
176
+ }
177
+ const probeName = results[0].name;
178
+ const byHash = /* @__PURE__ */ new Map();
179
+ for (const r of results) {
180
+ const existing = byHash.get(r.outputHash);
181
+ if (existing) existing.push(r);
182
+ else byHash.set(r.outputHash, [r]);
183
+ }
184
+ const groups = Array.from(byHash.entries()).map(([hash, rs]) => ({
185
+ hash,
186
+ results: rs,
187
+ environments: rs.map((r) => describeEnvironment(r.environment))
188
+ }));
189
+ const divergent = groups.length > 1;
190
+ const summary = divergent ? `DIVERGENT: ${groups.length} distinct hashes across ${results.length} runs of "${probeName}".` : `CONVERGENT: all ${results.length} runs of "${probeName}" produced hash ${groups[0].hash}.`;
191
+ return {
192
+ probeName,
193
+ totalResults: results.length,
194
+ uniqueHashes: groups.length,
195
+ divergent,
196
+ groups,
197
+ summary
198
+ };
199
+ }
200
+ };
201
+ function describeEnvironment(env) {
202
+ const parts = [env.runtime];
203
+ if (env.browser?.browser) parts.push(env.browser.browser);
204
+ if (env.browser?.os) parts.push(env.browser.os);
205
+ if (env.node) parts.push(`node ${env.node.version} ${env.node.platform}/${env.node.arch}`);
206
+ if (env.gpu?.vendor) parts.push(`gpu:${env.gpu.vendor}${env.gpu.architecture ? "/" + env.gpu.architecture : ""}`);
207
+ if (env.annotations) {
208
+ for (const [k, v] of Object.entries(env.annotations)) {
209
+ parts.push(`${k}=${v}`);
210
+ }
211
+ }
212
+ return parts.join(" | ");
213
+ }
214
+
215
+ exports.DeterminismHarness = DeterminismHarness;
216
+ exports.captureEnvironment = captureEnvironment;
217
+ exports.describeEnvironment = describeEnvironment;
218
+ exports.hashBytes = hashBytes;
219
+ //# sourceMappingURL=chunk-PGANYCAG.cjs.map
220
+ //# sourceMappingURL=chunk-PGANYCAG.cjs.map