@holoscript/core 8.0.8 → 8.0.9

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 (462) hide show
  1. package/bin/holoscript.cjs +5 -1
  2. package/dist/GLTFPipeline-L76YTXKA.js +15 -0
  3. package/dist/GLTFPipeline-ZWJN7GI6.cjs +36 -0
  4. package/dist/HoloCompositionParser-K76KTEEE.js +12 -0
  5. package/dist/HoloCompositionParser-UZH6Y4HO.cjs +45 -0
  6. package/dist/HoloScriptCodeParser-2D4ERFUZ.js +6 -0
  7. package/dist/HoloScriptCodeParser-UDRLDA7I.cjs +23 -0
  8. package/dist/HoloScriptPlusParser-FTMCGWXD.js +13 -0
  9. package/dist/HoloScriptPlusParser-LQR5GIKF.cjs +30 -0
  10. package/dist/HoloScriptRuntime-UTRLJI5L.js +12 -0
  11. package/dist/HoloScriptRuntime-YBYXJHJN.cjs +21 -0
  12. package/dist/SceneIRCompiler-63KA3M2F.js +17 -0
  13. package/dist/SceneIRCompiler-KWUFHZ4O.cjs +42 -0
  14. package/dist/{USDZExporter-AUHZODOF.cjs → USDZExporter-ML4UMIGC.cjs} +3 -3
  15. package/dist/{USDZExporter-GXB4AUSG.js → USDZExporter-ZFKLQ76G.js} +3 -3
  16. package/dist/agents/index.cjs +1 -1
  17. package/dist/agents/index.js +1 -1
  18. package/dist/audit/AuditLogger.d.ts +106 -0
  19. package/dist/audit/AuditQueryBuilder.d.ts +79 -0
  20. package/dist/audit/ComplianceReporter.d.ts +90 -0
  21. package/dist/audit/index.d.ts +13 -0
  22. package/dist/{chunk-FGMDMJM7.js → chunk-2BYAUHBO.js} +3 -3
  23. package/dist/{chunk-EDPYCLRC.cjs → chunk-2E6PP5UE.cjs} +83 -59
  24. package/dist/{chunk-GASCWJK5.js → chunk-2EGGAZT3.js} +65 -287
  25. package/dist/{chunk-SIEXCILW.js → chunk-2I3XAGMF.js} +3 -3
  26. package/dist/{chunk-OS533P33.cjs → chunk-2KKOYZYI.cjs} +1074 -1655
  27. package/dist/chunk-2MQKNDNH.js +51 -0
  28. package/dist/{chunk-7DMMMBCY.cjs → chunk-2X3IPCBK.cjs} +10 -10
  29. package/dist/chunk-2ZOTBO25.cjs +202 -0
  30. package/dist/chunk-356N4NPM.cjs +152 -0
  31. package/dist/{chunk-X3GJPRVK.cjs → chunk-36NPLOI4.cjs} +92 -81
  32. package/dist/{chunk-SLU6UPJI.cjs → chunk-37HHY7RH.cjs} +5 -5
  33. package/dist/{chunk-YDPEHCCI.cjs → chunk-3CDDRUER.cjs} +3 -118
  34. package/dist/chunk-3F7ZZWIN.js +1651 -0
  35. package/dist/chunk-3ILD7TKP.cjs +187 -0
  36. package/dist/{chunk-X27QRG4C.cjs → chunk-3IUHTGDD.cjs} +153 -41
  37. package/dist/{chunk-PXNZ6TME.js → chunk-4376VHNJ.js} +60 -36
  38. package/dist/{chunk-YKGPCZEE.cjs → chunk-4FIBOJW6.cjs} +10 -10
  39. package/dist/chunk-4Q7RKQQI.cjs +14195 -0
  40. package/dist/{chunk-YCM6QQRT.cjs → chunk-566ZB4LZ.cjs} +180 -8
  41. package/dist/{chunk-2Y3V22SG.js → chunk-5CURIYGT.js} +3 -3
  42. package/dist/{chunk-QBWNJXNR.js → chunk-5FYMCVBY.js} +5 -5
  43. package/dist/{chunk-ZA34AN3R.js → chunk-5LVFTGKH.js} +841 -12
  44. package/dist/chunk-63AUAIL6.js +48 -0
  45. package/dist/chunk-655FATJU.js +110 -0
  46. package/dist/{chunk-TQ377OLB.cjs → chunk-65S62L4D.cjs} +28 -22
  47. package/dist/chunk-6NTAZN5Z.cjs +502 -0
  48. package/dist/chunk-6TRX6AR2.js +9376 -0
  49. package/dist/chunk-6ZCCLKS2.cjs +51 -0
  50. package/dist/{chunk-MDR235RZ.js → chunk-734OB5SK.js} +721 -8
  51. package/dist/{chunk-Q2Q34NF3.js → chunk-77QI552M.js} +6 -6
  52. package/dist/{chunk-WKX5AMOY.js → chunk-7I74JWPW.js} +3 -3
  53. package/dist/{chunk-5FSKKMR7.cjs → chunk-7IDJDMPU.cjs} +232 -4
  54. package/dist/chunk-7VBKRGIZ.cjs +847 -0
  55. package/dist/{chunk-KCPHASCO.js → chunk-AATYYLYK.js} +5 -5
  56. package/dist/{chunk-WFKVS2K4.cjs → chunk-AUZRKIHQ.cjs} +1101 -55
  57. package/dist/{chunk-DTGBOSEM.cjs → chunk-AWXFEAQL.cjs} +12 -12
  58. package/dist/{chunk-THCK6ECW.js → chunk-B3CWTCK2.js} +231 -3
  59. package/dist/chunk-BCP4E7MD.cjs +997 -0
  60. package/dist/chunk-BG7RPYJP.js +91 -0
  61. package/dist/{chunk-VF257YKO.js → chunk-BP4KTMLY.js} +117 -5
  62. package/dist/{chunk-YN6IETRZ.js → chunk-BQJ3YBF3.js} +6424 -987
  63. package/dist/{chunk-KOUAQL2B.cjs → chunk-CANAL6CT.cjs} +1569 -168
  64. package/dist/{chunk-FDSGHPAK.js → chunk-CBSDJF3B.js} +3 -3
  65. package/dist/{chunk-FEWUHQNM.cjs → chunk-CFVK26P4.cjs} +4 -4
  66. package/dist/{chunk-M7K4LE66.cjs → chunk-CI33NINL.cjs} +4 -4
  67. package/dist/{chunk-2OWDB4FB.js → chunk-CKV5NYAE.js} +6 -6
  68. package/dist/{chunk-LPS5AMQD.cjs → chunk-CM4NHXVO.cjs} +24 -24
  69. package/dist/chunk-D3HSRXYB.js +115 -0
  70. package/dist/{chunk-FNHJRI32.js → chunk-DBH3D2MU.js} +1561 -160
  71. package/dist/{chunk-GW3LKD5C.js → chunk-DJNH4HFW.js} +3 -3
  72. package/dist/{chunk-2GCNOI2U.cjs → chunk-DN6F4DHH.cjs} +9 -3
  73. package/dist/chunk-DQRJ5RJG.js +432 -0
  74. package/dist/{chunk-C7ZBSV2Q.js → chunk-DUG3OQAS.js} +106 -43
  75. package/dist/chunk-ECUYJOJ2.cjs +199 -0
  76. package/dist/chunk-EEMTCAK7.js +182 -0
  77. package/dist/{chunk-3SKLAUDD.cjs → chunk-EI3J6LTW.cjs} +359 -581
  78. package/dist/{chunk-SSSN7VAM.js → chunk-EM2OGPYE.js} +4 -4
  79. package/dist/{chunk-56VOWURB.cjs → chunk-ENZCIQZC.cjs} +522 -453
  80. package/dist/chunk-ESBXUYOC.cjs +836 -0
  81. package/dist/{chunk-L5U4W6JC.js → chunk-ESSEF6U2.js} +4 -4
  82. package/dist/chunk-ET3AN4W3.js +824 -0
  83. package/dist/chunk-EXKSFGSX.cjs +14 -14
  84. package/dist/{chunk-I76GIKN7.cjs → chunk-F3YT6GUF.cjs} +17 -17
  85. package/dist/{chunk-WRWEX5ZF.js → chunk-F75DZBBI.js} +3 -3
  86. package/dist/{chunk-4JGRWHZJ.js → chunk-FG6PYGIZ.js} +12 -6
  87. package/dist/chunk-FGGJQRLZ.js +14 -14
  88. package/dist/{chunk-SXOSDZD6.js → chunk-FWCHPCD4.js} +128 -10
  89. package/dist/{chunk-XW6IXEQH.cjs → chunk-G35CAQ7I.cjs} +5 -5
  90. package/dist/{chunk-7VMGP2FW.js → chunk-G6KACNMO.js} +132 -188
  91. package/dist/{chunk-FJPADH77.cjs → chunk-GAWJJAGT.cjs} +6 -6
  92. package/dist/chunk-GGR7QUKK.cjs +4724 -0
  93. package/dist/chunk-GIBF4BHH.js +14098 -0
  94. package/dist/{chunk-AWB7QYY6.cjs → chunk-GILYQ5VH.cjs} +6 -6
  95. package/dist/{chunk-FWVYAMNW.cjs → chunk-GKFCHGCM.cjs} +4 -4
  96. package/dist/{chunk-Y3ZFVUUU.js → chunk-GLEJ2TLS.js} +3 -3
  97. package/dist/{chunk-3GWWJT7L.js → chunk-GP3OKSKT.js} +13 -13
  98. package/dist/chunk-GTIPOEHN.js +196 -0
  99. package/dist/{chunk-LMJ5EBV7.cjs → chunk-GZPUA2TL.cjs} +16 -15
  100. package/dist/{chunk-IELX2OKI.js → chunk-H4LJ4HEA.js} +3 -115
  101. package/dist/{chunk-ACVWFGBI.cjs → chunk-HCX4SMFK.cjs} +3 -3
  102. package/dist/{chunk-HYNTS5CP.js → chunk-HHRZ6STP.js} +24 -2
  103. package/dist/chunk-HIDEIEFG.js +48 -0
  104. package/dist/{chunk-W6RW64BB.cjs → chunk-HSWBIDZM.cjs} +228 -5
  105. package/dist/{chunk-GSOUNWEL.js → chunk-HVX7QQYK.js} +1035 -1616
  106. package/dist/{chunk-TRCGG42I.cjs → chunk-IFW5IW4L.cjs} +6502 -1019
  107. package/dist/{chunk-F5LKJ6F5.cjs → chunk-IJU6AS67.cjs} +32 -28
  108. package/dist/{chunk-TVANHNJ7.js → chunk-IK6Z2HNC.js} +173 -3
  109. package/dist/{chunk-QGMUTVVH.cjs → chunk-IS7NTKY5.cjs} +20 -20
  110. package/dist/{chunk-YFVQWSNJ.js → chunk-IXWGYWH6.js} +3 -3
  111. package/dist/chunk-J2DAS2PL.js +148 -0
  112. package/dist/chunk-JBQXZIWB.js +148 -0
  113. package/dist/chunk-JBYBMBMW.js +261 -0
  114. package/dist/{chunk-LWUOUCYL.js → chunk-JEJ7TT54.js} +5 -5
  115. package/dist/{chunk-DUCB6LGL.js → chunk-JOTCTHN5.js} +211 -5
  116. package/dist/{chunk-47RUFYKR.js → chunk-K56UVEXV.js} +3 -3
  117. package/dist/{chunk-XSFNHP2E.js → chunk-KB26H447.js} +3 -3
  118. package/dist/{chunk-3NGDZZR4.js → chunk-KEYG7HGY.js} +430 -37
  119. package/dist/{chunk-DY72BMU5.js → chunk-KFVNCW4Q.js} +4 -4
  120. package/dist/chunk-KPGC7SK2.js +192 -0
  121. package/dist/chunk-KROXXBK5.cjs +53 -0
  122. package/dist/{chunk-ZPZAVHXL.cjs → chunk-LB3ZZMKT.cjs} +137 -19
  123. package/dist/chunk-LDYZWNJW.cjs +1654 -0
  124. package/dist/{chunk-ULMSSHCJ.cjs → chunk-LMB555QB.cjs} +405 -38
  125. package/dist/{chunk-CBJY23VL.js → chunk-MD4IVS42.js} +3 -3
  126. package/dist/{chunk-VMLKSV26.js → chunk-MDDWEBCX.js} +226 -3
  127. package/dist/chunk-MUWH4QK5.cjs +94 -0
  128. package/dist/{chunk-T6W3Z3SH.cjs → chunk-N2ILK7BF.cjs} +4 -4
  129. package/dist/{chunk-6EX3I5P4.cjs → chunk-N74QRJGP.cjs} +6 -6
  130. package/dist/chunk-NFFHLX37.cjs +132 -0
  131. package/dist/chunk-NJSYWX7H.js +190 -0
  132. package/dist/{chunk-SH5PPVK7.cjs → chunk-NQN5LFN4.cjs} +165 -221
  133. package/dist/chunk-NTQRFOPP.cjs +56 -0
  134. package/dist/{chunk-YFWRJW4B.js → chunk-NWMJPTVL.js} +51 -55
  135. package/dist/{chunk-63ZGNR2T.cjs → chunk-OC6GV5QH.cjs} +42 -42
  136. package/dist/{chunk-7E7GCQCK.js → chunk-OG3MBHM3.js} +9 -3
  137. package/dist/chunk-OMNHTCS4.cjs +264 -0
  138. package/dist/chunk-OQXB6NNC.cjs +117 -0
  139. package/dist/{chunk-Y57W2CT5.cjs → chunk-OV46CCA2.cjs} +51 -55
  140. package/dist/{chunk-6PRZIHGL.cjs → chunk-OV6HHKLE.cjs} +21 -266
  141. package/dist/{chunk-C37BHB7N.cjs → chunk-P26YYPOO.cjs} +5 -5
  142. package/dist/{chunk-2BZHWUSR.cjs → chunk-P7JEKJTZ.cjs} +16 -16
  143. package/dist/{chunk-NGBXXZLL.cjs → chunk-PDXX5UI4.cjs} +45 -45
  144. package/dist/{chunk-FHQFPYV4.js → chunk-PJFTTSKE.js} +8 -7
  145. package/dist/{chunk-GVFJ6T4S.cjs → chunk-PVODJEJ7.cjs} +721 -8
  146. package/dist/{chunk-ZZ7RO2UQ.js → chunk-Q265VZJ4.js} +3 -3
  147. package/dist/{chunk-E7JP3BS3.cjs → chunk-Q47JEE2C.cjs} +4 -4
  148. package/dist/chunk-QBY7LRN2.js +281 -0
  149. package/dist/{chunk-Z6PMDS4G.js → chunk-QDQWKSU3.js} +1090 -53
  150. package/dist/{chunk-GH6C2QGW.cjs → chunk-QEDMOGF3.cjs} +857 -16
  151. package/dist/{chunk-5WUNN6ZN.cjs → chunk-QHSAVOOL.cjs} +24 -2
  152. package/dist/chunk-QJNCDVYM.cjs +137 -0
  153. package/dist/chunk-QM7FJB5W.js +4717 -0
  154. package/dist/chunk-QQFB4RT2.cjs +448 -0
  155. package/dist/chunk-QSYBHQAD.cjs +196 -0
  156. package/dist/{chunk-UGXHYIWT.cjs → chunk-QUJ3ZB55.cjs} +28 -28
  157. package/dist/{chunk-2YSNA2F2.cjs → chunk-QVJMDVYZ.cjs} +5 -5
  158. package/dist/chunk-RAJMAX6D.js +131 -0
  159. package/dist/{chunk-VVKVQZI6.js → chunk-RAN3ECAS.js} +3 -3
  160. package/dist/chunk-RKGUZBOC.js +79 -0
  161. package/dist/{chunk-HLFDZ35S.cjs → chunk-RRQIAJLQ.cjs} +8 -8
  162. package/dist/{chunk-PABONWKI.js → chunk-RXQNRZ5F.js} +3 -3
  163. package/dist/{chunk-7ZHYEITD.cjs → chunk-S4O7CFHQ.cjs} +10 -11
  164. package/dist/chunk-SE7ANBGN.js +128 -0
  165. package/dist/{chunk-X2AVEAZM.cjs → chunk-SJIRCTIS.cjs} +176 -2
  166. package/dist/{chunk-WXQ57LAO.js → chunk-SQXAZHDG.js} +4 -4
  167. package/dist/chunk-SR73L5ZP.cjs +84 -0
  168. package/dist/{chunk-OABEO6HH.js → chunk-SZOLTWWD.js} +2349 -214
  169. package/dist/{chunk-5JEU52DW.js → chunk-TPZ3BN2D.js} +3 -3
  170. package/dist/{chunk-QFU53KRH.js → chunk-TSTFYGGX.js} +4 -5
  171. package/dist/{chunk-EBS32AJI.cjs → chunk-TZCFKZ6Z.cjs} +5 -5
  172. package/dist/chunk-UCVZXQ63.js +724 -0
  173. package/dist/chunk-UGQ3QNV6.js +992 -0
  174. package/dist/chunk-UNMVGZVW.js +142 -0
  175. package/dist/{chunk-TEVX443G.js → chunk-UTUD6GJI.js} +178 -6
  176. package/dist/chunk-UXBYA7DV.cjs +155 -0
  177. package/dist/chunk-V6GXFSK7.cjs +443 -0
  178. package/dist/chunk-VHORVGCG.cjs +761 -0
  179. package/dist/{chunk-B4EKV6HQ.js → chunk-VKCTYLDN.js} +500 -442
  180. package/dist/{chunk-O3MGZDCT.cjs → chunk-VTEXJOSD.cjs} +63 -63
  181. package/dist/chunk-VVAAZITA.cjs +287 -0
  182. package/dist/{chunk-V7AKE5VT.cjs → chunk-W2GA3EQB.cjs} +435 -42
  183. package/dist/chunk-W4GABFCR.js +37 -0
  184. package/dist/chunk-WKEK4NCA.js +490 -0
  185. package/dist/{chunk-5A4TCHOC.cjs → chunk-WNYXT4TE.cjs} +4 -4
  186. package/dist/{chunk-S762UEV5.js → chunk-WTH23ISI.js} +6 -6
  187. package/dist/{chunk-BTKZGHAV.js → chunk-WWNCM473.js} +10 -6
  188. package/dist/{chunk-7X5PNIQJ.js → chunk-X3YFRH6K.js} +27 -25
  189. package/dist/{chunk-4YNYPHH3.cjs → chunk-X75H75UY.cjs} +2351 -213
  190. package/dist/{chunk-LYJJI7ZK.cjs → chunk-XCUDDFKC.cjs} +216 -9
  191. package/dist/chunk-YAO4HPJL.cjs +120 -0
  192. package/dist/chunk-YKY2JBER.cjs +9443 -0
  193. package/dist/chunk-YP5CHEYU.cjs +154 -0
  194. package/dist/{chunk-WRNEH5MO.js → chunk-YW3I2FQL.js} +18 -7
  195. package/dist/{chunk-BRNUPDHJ.js → chunk-Z557DVYN.js} +386 -19
  196. package/dist/{chunk-VSACG2AR.js → chunk-Z6LZUYZF.js} +21 -264
  197. package/dist/chunk-ZHPMP447.cjs +43 -0
  198. package/dist/{chunk-LODTHGST.cjs → chunk-ZK7KX5CD.cjs} +133 -70
  199. package/dist/{chunk-CCPSNT6B.cjs → chunk-ZRPALBQB.cjs} +5 -5
  200. package/dist/chunk-ZVFHPMC5.js +824 -0
  201. package/dist/chunk-ZVQMKUGJ.js +443 -0
  202. package/dist/cli/holoscript-runner.cjs +86 -48
  203. package/dist/cli/holoscript-runner.js +54 -16
  204. package/dist/codebase/index.cjs +1 -1
  205. package/dist/codebase/index.js +1 -1
  206. package/dist/compiler/agent-inference.cjs +11 -11
  207. package/dist/compiler/agent-inference.js +9 -6
  208. package/dist/compiler/android-xr.cjs +13 -12
  209. package/dist/compiler/android-xr.js +11 -10
  210. package/dist/compiler/android.cjs +12 -12
  211. package/dist/compiler/android.js +10 -10
  212. package/dist/compiler/business-quest.cjs +10 -10
  213. package/dist/compiler/business-quest.js +2 -2
  214. package/dist/compiler/coco.cjs +1 -1
  215. package/dist/compiler/coco.js +1 -1
  216. package/dist/compiler/context.cjs +9 -9
  217. package/dist/compiler/context.js +6 -6
  218. package/dist/compiler/daimon-seed.cjs +36 -0
  219. package/dist/compiler/daimon-seed.js +12 -0
  220. package/dist/compiler/domain-block-utils.cjs +205 -156
  221. package/dist/compiler/domain-block-utils.js +8 -7
  222. package/dist/compiler/dtdl.cjs +10 -10
  223. package/dist/compiler/dtdl.js +7 -7
  224. package/dist/compiler/gltf-pipeline.cjs +9 -9
  225. package/dist/compiler/gltf-pipeline.js +2 -2
  226. package/dist/compiler/godot.cjs +10 -9
  227. package/dist/compiler/godot.js +9 -8
  228. package/dist/compiler/incremental.cjs +11 -11
  229. package/dist/compiler/incremental.js +6 -6
  230. package/dist/compiler/index.cjs +2585 -3273
  231. package/dist/compiler/index.d.ts +149 -35
  232. package/dist/compiler/index.js +2197 -3102
  233. package/dist/compiler/ios.cjs +11 -11
  234. package/dist/compiler/ios.js +9 -9
  235. package/dist/compiler/llm-provider-capabilities.cjs +9 -9
  236. package/dist/compiler/llm-provider-capabilities.js +6 -6
  237. package/dist/compiler/nodetoy.cjs +1 -1
  238. package/dist/compiler/nodetoy.js +1 -1
  239. package/dist/compiler/openxr.cjs +11 -10
  240. package/dist/compiler/openxr.js +10 -9
  241. package/dist/compiler/remotion.cjs +1 -1
  242. package/dist/compiler/remotion.js +1 -1
  243. package/dist/compiler/reproducibility.cjs +1 -1
  244. package/dist/compiler/reproducibility.js +1 -1
  245. package/dist/compiler/sdf.cjs +11 -10
  246. package/dist/compiler/sdf.js +9 -8
  247. package/dist/compiler/semantic-scene.cjs +7 -7
  248. package/dist/compiler/semantic-scene.js +2 -2
  249. package/dist/compiler/state.cjs +9 -9
  250. package/dist/compiler/state.js +7 -7
  251. package/dist/compiler/trait-composition.cjs +11 -11
  252. package/dist/compiler/trait-composition.js +7 -7
  253. package/dist/compiler/traits/ProvenanceSemiring.d.ts +167 -0
  254. package/dist/compiler/traits/Semiring.d.ts +26 -0
  255. package/dist/compiler/unity.cjs +11 -10
  256. package/dist/compiler/unity.js +10 -9
  257. package/dist/compiler/unreal.cjs +12 -11
  258. package/dist/compiler/unreal.js +10 -9
  259. package/dist/compiler/urdf.cjs +18 -17
  260. package/dist/compiler/urdf.js +9 -8
  261. package/dist/compiler/usd-physics.cjs +11 -10
  262. package/dist/compiler/usd-physics.js +8 -7
  263. package/dist/compiler/visionos.cjs +11 -10
  264. package/dist/compiler/visionos.js +10 -9
  265. package/dist/compiler/vrchat.cjs +11 -10
  266. package/dist/compiler/vrchat.js +9 -8
  267. package/dist/compiler/wasm.cjs +14 -13
  268. package/dist/compiler/wasm.js +9 -8
  269. package/dist/compiler/webgpu.cjs +10 -9
  270. package/dist/compiler/webgpu.js +9 -8
  271. package/dist/constants.cjs +398 -0
  272. package/dist/constants.js +9 -0
  273. package/dist/coordinators/index.cjs +4 -1
  274. package/dist/coordinators/index.js +4 -1
  275. package/dist/debugger.cjs +11 -9
  276. package/dist/debugger.js +9 -7
  277. package/dist/{dist-ACXG6IH5.cjs → dist-GRMOP2UL.cjs} +341 -65
  278. package/dist/{dist-VD4L6V7Q.js → dist-ZBUKU2JG.js} +333 -63
  279. package/dist/entries/interop.cjs +23 -23
  280. package/dist/entries/interop.js +3 -3
  281. package/dist/entries/scripting.cjs +12 -11
  282. package/dist/entries/scripting.js +8 -7
  283. package/dist/evolution/index.cjs +66 -0
  284. package/dist/evolution/index.d.ts +162 -0
  285. package/dist/evolution/index.js +17 -0
  286. package/dist/hololand/index.cjs +41 -37
  287. package/dist/hololand/index.js +3 -3
  288. package/dist/index.cjs +12394 -3224
  289. package/dist/index.d.ts +260 -18
  290. package/dist/index.js +10755 -2182
  291. package/dist/keyword-registry/PluginKeywordRegistry.d.ts +138 -0
  292. package/dist/keyword-registry/index.cjs +29 -0
  293. package/dist/keyword-registry/index.d.ts +1 -0
  294. package/dist/keyword-registry/index.js +4 -0
  295. package/dist/math/tropical-spmv.cjs +11 -11
  296. package/dist/math/tropical-spmv.d.ts +1 -0
  297. package/dist/math/tropical-spmv.js +2 -2
  298. package/dist/math/tropicalSpmv.d.ts +43 -0
  299. package/dist/math/vec3.cjs +1 -1
  300. package/dist/math/vec3.js +1 -1
  301. package/dist/matter/StagedMatter.d.ts +82 -0
  302. package/dist/matter/index.cjs +17 -0
  303. package/dist/matter/index.d.ts +1 -0
  304. package/dist/matter/index.js +4 -0
  305. package/dist/{ml-dsa-Z7JDKW4L.js → ml-dsa-J6VKVT4K.js} +3 -3
  306. package/dist/{ml-dsa-FSKBTE3W.cjs → ml-dsa-MTIK4ZUQ.cjs} +23 -23
  307. package/dist/paper-0c-spike/index.cjs +1 -1
  308. package/dist/paper-0c-spike/index.js +1 -1
  309. package/dist/parameter-envelope/ParameterEnvelope.d.ts +128 -0
  310. package/dist/parameter-envelope/index.cjs +17 -0
  311. package/dist/parameter-envelope/index.d.ts +2 -0
  312. package/dist/parameter-envelope/index.js +4 -0
  313. package/dist/parser/HoloCompositionTypes.d.ts +2013 -0
  314. package/dist/parser/PipelineParser.d.ts +162 -0
  315. package/dist/parser.cjs +36 -20
  316. package/dist/parser.js +13 -9
  317. package/dist/plugin-manifest/ManifestAutoLoader.d.ts +35 -0
  318. package/dist/plugin-manifest/PluginManifest.d.ts +156 -0
  319. package/dist/plugin-manifest/index.cjs +25 -0
  320. package/dist/plugin-manifest/index.d.ts +2 -0
  321. package/dist/plugin-manifest/index.js +4 -0
  322. package/dist/plugin-solver-contract/PluginSolverContract.d.ts +288 -0
  323. package/dist/plugin-solver-contract/index.cjs +41 -0
  324. package/dist/plugin-solver-contract/index.d.ts +1 -0
  325. package/dist/plugin-solver-contract/index.js +4 -0
  326. package/dist/policy/ContentPolicyGate.d.ts +51 -0
  327. package/dist/policy/PolicyPack.d.ts +120 -0
  328. package/dist/policy/blocklist.d.ts +32 -0
  329. package/dist/policy/defaults.d.ts +44 -0
  330. package/dist/policy/index.cjs +106 -0
  331. package/dist/policy/index.d.ts +17 -0
  332. package/dist/policy/index.js +5 -0
  333. package/dist/policy/jsonLogic.d.ts +31 -0
  334. package/dist/policy/types.d.ts +174 -0
  335. package/dist/proof-composition/ProofCompositionLaw.d.ts +93 -0
  336. package/dist/proof-composition/index.cjs +25 -0
  337. package/dist/proof-composition/index.d.ts +1 -0
  338. package/dist/proof-composition/index.js +4 -0
  339. package/dist/receipts/hash-policy.d.ts +85 -0
  340. package/dist/reconstruction/index.cjs +75 -47
  341. package/dist/reconstruction/index.js +5 -5
  342. package/dist/runtime/plugin-trait-registrar.d.ts +36 -0
  343. package/dist/runtime.cjs +81 -79
  344. package/dist/runtime.js +9 -7
  345. package/dist/scene-presets-EDKYZ5GW.js +4 -0
  346. package/dist/scene-presets-NCW2CFRS.cjs +17 -0
  347. package/dist/self-improvement/index.cjs +1 -1
  348. package/dist/self-improvement/index.js +1 -1
  349. package/dist/{src-PT2FERDV.cjs → src-G3D7ZATQ.cjs} +545 -21
  350. package/dist/{src-J6CM4AUR.js → src-UXYA7HM6.js} +539 -16
  351. package/dist/storage/index.cjs +10 -10
  352. package/dist/storage/index.js +3 -3
  353. package/dist/testing.cjs +1 -1
  354. package/dist/testing.js +1 -1
  355. package/dist/tools/index.cjs +3631 -0
  356. package/dist/tools/index.js +3581 -0
  357. package/dist/traitDocs/traitDocs.cjs +9 -9
  358. package/dist/traitDocs/traitDocs.d.ts +1 -0
  359. package/dist/traitDocs/traitDocs.js +3 -3
  360. package/dist/traits/ControlLoopTrait.d.ts +154 -0
  361. package/dist/traits/KinematicChainTrait.d.ts +116 -0
  362. package/dist/traits/SensorSamplingTrait.d.ts +154 -0
  363. package/dist/traits/TraitTypes.d.ts +270 -0
  364. package/dist/traits/TransactionTrait.d.ts +121 -0
  365. package/dist/traits/botanical-lotus.cjs +54 -50
  366. package/dist/traits/botanical-lotus.js +2 -5
  367. package/dist/traits/control-loop.cjs +21 -0
  368. package/dist/traits/control-loop.d.ts +1 -0
  369. package/dist/traits/control-loop.js +4 -0
  370. package/dist/traits/engines/cloth-verlet.d.ts +65 -0
  371. package/dist/traits/engines/index.cjs +19 -19
  372. package/dist/traits/engines/index.d.ts +15 -275
  373. package/dist/traits/engines/index.js +3 -3
  374. package/dist/traits/engines/motion-data-schema.d.ts +119 -0
  375. package/dist/traits/engines/motion-matching.d.ts +102 -0
  376. package/dist/traits/engines/noise.d.ts +25 -0
  377. package/dist/traits/engines/onnx-adapter.d.ts +173 -0
  378. package/dist/traits/engines/onnx-motion-matching.d.ts +163 -0
  379. package/dist/traits/engines/pfnn-network.d.ts +92 -0
  380. package/dist/traits/engines/synthetic-walk-cycle.d.ts +38 -0
  381. package/dist/traits/engines/tensor-ops.d.ts +15 -0
  382. package/dist/traits/index.cjs +2789 -1259
  383. package/dist/traits/index.d.ts +35 -0
  384. package/dist/traits/index.js +1692 -411
  385. package/dist/traits/kinematic-chain.cjs +25 -0
  386. package/dist/traits/kinematic-chain.d.ts +1 -0
  387. package/dist/traits/kinematic-chain.js +4 -0
  388. package/dist/traits/sensor-sampling.cjs +33 -0
  389. package/dist/traits/sensor-sampling.d.ts +1 -0
  390. package/dist/traits/sensor-sampling.js +4 -0
  391. package/dist/traits/simulation-solver-factory.cjs +1 -1
  392. package/dist/traits/simulation-solver-factory.js +1 -1
  393. package/dist/traits/transaction.cjs +29 -0
  394. package/dist/traits/transaction.d.ts +1 -0
  395. package/dist/traits/transaction.js +4 -0
  396. package/dist/traits/webcam-gaze.cjs +1 -1
  397. package/dist/traits/webcam-gaze.js +1 -1
  398. package/dist/type-checker.cjs +7 -6
  399. package/dist/type-checker.js +5 -4
  400. package/dist/types/AdvancedTypeSystem.d.ts +489 -0
  401. package/dist/types/HoloScriptPlus.d.ts +810 -0
  402. package/dist/types/base.d.ts +248 -0
  403. package/dist/types.d.ts +799 -0
  404. package/dist/world/index.cjs +3 -4
  405. package/dist/world/index.js +3 -4
  406. package/dist/world-model/index.cjs +1 -1
  407. package/dist/world-model/index.js +1 -1
  408. package/dist/wot/index.cjs +1 -1
  409. package/dist/wot/index.js +1 -1
  410. package/package.json +113 -46
  411. package/dist/GLTFPipeline-3EJLL3TS.cjs +0 -38
  412. package/dist/GLTFPipeline-3OWJV2VK.js +0 -17
  413. package/dist/HoloScriptPlusParser-ADWRY5OS.cjs +0 -698
  414. package/dist/HoloScriptPlusParser-JLJDXHSC.js +0 -693
  415. package/dist/HoloScriptPlusParser-QCGFPWIL.cjs +0 -27
  416. package/dist/HoloScriptPlusParser-WENAFEFV.js +0 -10
  417. package/dist/HoloScriptRuntime-GGRVEU4T.cjs +0 -19
  418. package/dist/HoloScriptRuntime-GJK6VJPH.js +0 -10
  419. package/dist/chunk-22Q5A6RV.js +0 -979
  420. package/dist/chunk-4C57PR42.js +0 -468
  421. package/dist/chunk-4W5G5QVL.cjs +0 -847
  422. package/dist/chunk-5ET6L4NS.js +0 -487
  423. package/dist/chunk-C4GSLCHE.cjs +0 -7153
  424. package/dist/chunk-F2G6CWFT.js +0 -7089
  425. package/dist/chunk-G6PNEASF.cjs +0 -814
  426. package/dist/chunk-GTA4Q3A3.js +0 -1491
  427. package/dist/chunk-HCCQLAA4.cjs +0 -74
  428. package/dist/chunk-HFSVMKM3.cjs +0 -72
  429. package/dist/chunk-KAIVDEIG.cjs +0 -4539
  430. package/dist/chunk-KQU64CIX.cjs +0 -1508
  431. package/dist/chunk-MSYSQ2AJ.js +0 -4533
  432. package/dist/chunk-NHJLP37F.js +0 -70
  433. package/dist/chunk-NHYRRAGI.cjs +0 -490
  434. package/dist/chunk-OIQYIIO3.cjs +0 -473
  435. package/dist/chunk-OL46QLBJ.js +0 -61
  436. package/dist/chunk-SKZPC5AG.cjs +0 -984
  437. package/dist/chunk-SLHLXUMO.js +0 -445
  438. package/dist/chunk-UOIGFQXC.cjs +0 -9750
  439. package/dist/chunk-UOL6Y5TD.cjs +0 -759
  440. package/dist/chunk-UVFI7XIR.cjs +0 -452
  441. package/dist/chunk-VEPGBETF.js +0 -844
  442. package/dist/chunk-XQ5MWMP2.js +0 -756
  443. package/dist/chunk-XT6JY5W5.js +0 -9684
  444. package/dist/chunk-YRRAUB35.js +0 -811
  445. package/dist/compiler/GasOptimizationAnalyzer.d.ts +0 -73
  446. package/dist/compiler/NFTMarketplaceCompiler.d.ts +0 -23
  447. package/dist/compiler/ar.cjs +0 -23
  448. package/dist/compiler/ar.js +0 -11
  449. package/dist/compiler/babylon.cjs +0 -21
  450. package/dist/compiler/babylon.js +0 -15
  451. package/dist/compiler/multi-layer.cjs +0 -24
  452. package/dist/compiler/multi-layer.js +0 -15
  453. package/dist/compiler/playcanvas.cjs +0 -19
  454. package/dist/compiler/playcanvas.js +0 -13
  455. package/dist/compiler/r3f.cjs +0 -39
  456. package/dist/compiler/r3f.d.ts +0 -22
  457. package/dist/compiler/r3f.js +0 -17
  458. package/dist/compiler/vrr.cjs +0 -24
  459. package/dist/compiler/vrr.js +0 -12
  460. package/dist/parser/NFTMarketplaceTypes.d.ts +0 -191
  461. package/dist/playwright-3AT3AKTV.cjs +0 -98673
  462. package/dist/playwright-VZPDVUEQ.js +0 -98660
@@ -1,4 +1,5 @@
1
1
  import { logger } from './chunk-PHENW4MQ.js';
2
+ import { LOCOMOTION_REACTION_TRIGGERS, isLocomotionReactionTrigger } from './chunk-63AUAIL6.js';
2
3
 
3
4
  // src/HoloScriptPersistenceParser.ts
4
5
  var HoloScriptPersistenceParser = class {
@@ -143,8 +144,10 @@ var CODE_SECURITY_CONFIG = {
143
144
  "__proto__",
144
145
  "fs",
145
146
  "child_process",
146
- "exec",
147
- "spawn"
147
+ "exec"
148
+ // NOTE: 'spawn' is intentionally excluded — it is a valid .hs game-logic keyword
149
+ // (MMO entity spawn rules). The security gate uses word-boundary regex, so
150
+ // node-API 'spawn' from child_process cannot slip through via game code anyway.
148
151
  ]
149
152
  };
150
153
  function stripCommentsAndStrings(code) {
@@ -303,11 +306,41 @@ var HoloScriptCodeParser = class {
303
306
  "on_collision",
304
307
  "on_enter",
305
308
  "on_exit",
309
+ // Domain-neutral interaction / lifecycle reaction triggers
310
+ "on_grab",
311
+ "on_release",
312
+ "on_use",
313
+ "on_hover",
314
+ "on_proximity",
315
+ "on_signal",
316
+ "on_input",
317
+ "on_tick",
318
+ // Movement statement clause keywords (`move x to [..] over 2 via glide`)
319
+ "over",
320
+ "via",
321
+ "easing",
322
+ // Movement reaction triggers (routes to ReactionCategory 'movement').
323
+ // Sourced from the locomotion SSOT so the keyword set and reactionCategory()
324
+ // share exactly one list — never edit these names in two places.
325
+ ...LOCOMOTION_REACTION_TRIGGERS,
306
326
  "using",
307
327
  "memory",
308
328
  "semantic",
309
329
  "episodic",
310
- "procedural"
330
+ "procedural",
331
+ "pcg_graph",
332
+ "density_filter",
333
+ "slope_mask",
334
+ "snap_to_terrain",
335
+ // MMO / game-logic keywords (Phase: game-logic constructs)
336
+ "ability",
337
+ "loot_table",
338
+ "authority",
339
+ "on_combat",
340
+ "on_death",
341
+ "on_spawn",
342
+ "on_cast"
343
+ // 'spawn' already present above (line ~304); Set deduplicates, listed here for readability
311
344
  ]);
312
345
  }
313
346
  /**
@@ -768,6 +801,48 @@ var HoloScriptCodeParser = class {
768
801
  return this.parseZone();
769
802
  case "memory":
770
803
  return this.parseMemory();
804
+ // MMO / game-logic constructs
805
+ case "ability":
806
+ return this.parseAbility();
807
+ case "loot_table":
808
+ return this.parseLootTable();
809
+ case "spawn":
810
+ return this.parseSpawnRule();
811
+ case "authority":
812
+ return this.parseAuthorityBlock();
813
+ // Reactions — domain-neutral event blocks. Combat triggers kept for
814
+ // back-compat; interaction & lifecycle triggers generalize the layer.
815
+ case "on_combat":
816
+ case "on_death":
817
+ case "on_spawn":
818
+ case "on_cast":
819
+ case "on_interact":
820
+ case "on_collision":
821
+ case "on_proximity":
822
+ case "on_grab":
823
+ case "on_release":
824
+ case "on_use":
825
+ case "on_hover":
826
+ case "on_enter":
827
+ case "on_exit":
828
+ case "on_signal":
829
+ case "on_input":
830
+ case "on_tick":
831
+ // Movement reactions
832
+ case "on_move":
833
+ case "on_walk":
834
+ case "on_run":
835
+ case "on_jump":
836
+ case "on_land":
837
+ case "on_strafe":
838
+ case "on_teleport":
839
+ return this.parseGameEventBlock();
840
+ // Movements — first-class movement statement (serves F.118 VR locomotion)
841
+ case "move":
842
+ return this.parseMove();
843
+ // Actions — domain-neutral verb declaration (general form of `ability`)
844
+ case "action":
845
+ return this.parseActionDecl();
771
846
  default:
772
847
  return this.parseExpressionStatement();
773
848
  }
@@ -969,19 +1044,19 @@ var HoloScriptCodeParser = class {
969
1044
  position: [0, 0, 0]
970
1045
  };
971
1046
  }
972
- const exports$1 = [];
1047
+ const exports = [];
973
1048
  if (this.check("punctuation", "{")) {
974
1049
  this.advance();
975
1050
  while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
976
1051
  const name = this.expectIdentifier();
977
- if (name) exports$1.push(name);
1052
+ if (name) exports.push(name);
978
1053
  if (this.check("punctuation", ",")) this.advance();
979
1054
  }
980
1055
  this.expect("punctuation", "}");
981
1056
  }
982
1057
  return {
983
1058
  type: "export",
984
- exports: exports$1,
1059
+ exports,
985
1060
  position: [0, 0, 0]
986
1061
  };
987
1062
  }
@@ -1142,6 +1217,41 @@ var HoloScriptCodeParser = class {
1142
1217
  const bindings = this.parseBindingsBlock();
1143
1218
  return { type: "bindings", bindings };
1144
1219
  }
1220
+ const GAME_LOGIC_ANNOTATIONS = /* @__PURE__ */ new Set([
1221
+ "server_side",
1222
+ "client_side",
1223
+ "replicated",
1224
+ "cooldown",
1225
+ "mana_cost",
1226
+ "damage_type",
1227
+ "drop_chance",
1228
+ // Ability-stat annotations carrying an inline value (e.g. `@range 30`,
1229
+ // `@gcd 1.5s`, `@cast_time 2s`, `@authority server`).
1230
+ "range",
1231
+ "gcd",
1232
+ "cast_time",
1233
+ "authority",
1234
+ "authority_envelope"
1235
+ ]);
1236
+ if (GAME_LOGIC_ANNOTATIONS.has(name)) {
1237
+ let value;
1238
+ const next = this.currentToken();
1239
+ if (next && next.type !== "newline" && next.value !== "{" && next.value !== "}") {
1240
+ let raw = "";
1241
+ while (this.position < this.tokens.length) {
1242
+ const t = this.currentToken();
1243
+ if (!t || t.type === "newline" || t.value === ";" || t.value === "{") break;
1244
+ raw += t.value;
1245
+ this.advance();
1246
+ }
1247
+ value = raw.trim() || void 0;
1248
+ }
1249
+ return {
1250
+ type: "trait",
1251
+ name,
1252
+ config: value !== void 0 ? { value } : {}
1253
+ };
1254
+ }
1145
1255
  if (name.startsWith("on_")) {
1146
1256
  let body = "";
1147
1257
  if (this.check("punctuation", "{")) {
@@ -2068,6 +2178,609 @@ var HoloScriptCodeParser = class {
2068
2178
  /**
2069
2179
  * Parse generic expression statement (e.g. function call or assignment)
2070
2180
  */
2181
+ // ===========================================================================
2182
+ // MMO / GAME-LOGIC PARSERS
2183
+ // ===========================================================================
2184
+ /**
2185
+ * Parse ability declaration.
2186
+ *
2187
+ * Syntax:
2188
+ * ability <name> {
2189
+ * @cooldown 5s
2190
+ * @mana_cost 30
2191
+ * @damage_type fire
2192
+ * @range 30
2193
+ * on_cast(target) { ... }
2194
+ * on_hit { ... }
2195
+ * on_miss { ... }
2196
+ * <key>: <value>
2197
+ * }
2198
+ *
2199
+ * Compiles to a generic `game-ability` AST node. The downstream compiler maps
2200
+ * this to CombatAbilityTrait handler entries.
2201
+ */
2202
+ parseAbility() {
2203
+ this.expect("keyword", "ability");
2204
+ const name = this.expectName() || `ability_${Date.now()}`;
2205
+ const properties = {};
2206
+ const directives = [];
2207
+ const eventBlocks = [];
2208
+ let damageFormula;
2209
+ if (this.check("punctuation", "{")) {
2210
+ this.advance();
2211
+ while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
2212
+ this.skipNewlines();
2213
+ if (this.check("punctuation", "}")) break;
2214
+ const token = this.currentToken();
2215
+ if (token?.type === "punctuation" && token.value === "@") {
2216
+ const dir = this.parseDirective();
2217
+ if (dir) directives.push(dir);
2218
+ this.skipNewlines();
2219
+ continue;
2220
+ }
2221
+ if ((token?.type === "keyword" || token?.type === "identifier") && token.value === "damage_formula") {
2222
+ damageFormula = this.parseDamageFormula();
2223
+ this.skipNewlines();
2224
+ continue;
2225
+ }
2226
+ const nextAfterIdent = (token?.type === "keyword" || token?.type === "identifier") && this.tokens[this.position + 1]?.value === "{";
2227
+ if (nextAfterIdent) {
2228
+ const blockKey = token.value;
2229
+ this.advance();
2230
+ let raw = "";
2231
+ if (this.check("punctuation", "{")) {
2232
+ this.advance();
2233
+ let depth = 1;
2234
+ while (depth > 0 && this.position < this.tokens.length) {
2235
+ const t = this.advance();
2236
+ if (t.value === "{") depth++;
2237
+ else if (t.value === "}") {
2238
+ depth--;
2239
+ if (depth === 0) break;
2240
+ }
2241
+ raw += (t.type === "string" ? JSON.stringify(t.value) : t.value) + " ";
2242
+ }
2243
+ }
2244
+ properties[blockKey] = raw.trim();
2245
+ this.skipNewlines();
2246
+ continue;
2247
+ }
2248
+ if ((token?.type === "keyword" || token?.type === "identifier") && token.value.startsWith("on_")) {
2249
+ const event = token.value;
2250
+ this.advance();
2251
+ const params = [];
2252
+ if (this.check("punctuation", "(")) {
2253
+ this.advance();
2254
+ while (!this.check("punctuation", ")") && this.position < this.tokens.length) {
2255
+ const p = this.expectIdentifier();
2256
+ if (p) params.push(p);
2257
+ if (this.check("punctuation", ",")) this.advance();
2258
+ }
2259
+ this.expect("punctuation", ")");
2260
+ }
2261
+ let body = "";
2262
+ if (this.check("punctuation", "{")) {
2263
+ this.advance();
2264
+ let depth = 1;
2265
+ while (depth > 0 && this.position < this.tokens.length) {
2266
+ const t = this.advance();
2267
+ if (t.value === "{") depth++;
2268
+ else if (t.value === "}") {
2269
+ depth--;
2270
+ if (depth === 0) break;
2271
+ }
2272
+ body += (t.type === "string" ? JSON.stringify(t.value) : t.value) + " ";
2273
+ }
2274
+ }
2275
+ eventBlocks.push({ event, params, body: body.trim() });
2276
+ this.skipNewlines();
2277
+ continue;
2278
+ }
2279
+ const prop = this.parseProperty();
2280
+ if (prop) {
2281
+ properties[prop.key] = prop.value;
2282
+ } else {
2283
+ this.advance();
2284
+ }
2285
+ this.skipNewlines();
2286
+ }
2287
+ this.expect("punctuation", "}");
2288
+ }
2289
+ const abilityNode = {
2290
+ type: "game-ability",
2291
+ name,
2292
+ properties,
2293
+ directives: directives.length > 0 ? directives : void 0,
2294
+ eventBlocks: eventBlocks.length > 0 ? eventBlocks : void 0,
2295
+ damageFormula,
2296
+ position: [0, 0, 0]
2297
+ };
2298
+ return abilityNode;
2299
+ }
2300
+ /**
2301
+ * Parse a `damage_formula { ... }` sub-block inside an ability declaration.
2302
+ *
2303
+ * Accepted fields (all optional; safe defaults apply):
2304
+ * base: number — flat pre-scaling damage (default 0)
2305
+ * scaling: string — expression emitted verbatim (default "0")
2306
+ * crit_multiplier: number — damage multiplier on crit (default 1.5)
2307
+ * crit_chance: string — 0-1 expression (default "0.05")
2308
+ * resist_school: string — elemental school name (default "")
2309
+ *
2310
+ * Any other key-value pairs are collected into the `raw` bag for
2311
+ * forward-compatibility and passed through to the compiler.
2312
+ */
2313
+ parseDamageFormula() {
2314
+ this.advance();
2315
+ const raw = {};
2316
+ if (this.check("punctuation", "{")) {
2317
+ this.advance();
2318
+ while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
2319
+ this.skipNewlines();
2320
+ if (this.check("punctuation", "}")) break;
2321
+ const prop = this.parseProperty();
2322
+ if (prop) {
2323
+ raw[prop.key] = prop.value;
2324
+ } else {
2325
+ this.advance();
2326
+ }
2327
+ this.skipNewlines();
2328
+ }
2329
+ this.expect("punctuation", "}");
2330
+ }
2331
+ const coerceNum = (v, fallback) => {
2332
+ if (typeof v === "number" && Number.isFinite(v)) return v;
2333
+ if (typeof v === "string") {
2334
+ const n = Number(v.trim());
2335
+ if (Number.isFinite(n)) return n;
2336
+ }
2337
+ return fallback;
2338
+ };
2339
+ const coerceStr = (v, fallback) => {
2340
+ if (typeof v === "string" && v.trim().length > 0) return v.trim();
2341
+ if (typeof v === "number") return String(v);
2342
+ return fallback;
2343
+ };
2344
+ return {
2345
+ base: coerceNum(raw["base"], 0),
2346
+ scaling: coerceStr(raw["scaling"], "0"),
2347
+ critMultiplier: coerceNum(raw["crit_multiplier"] ?? raw["critMultiplier"], 1.5),
2348
+ critChance: coerceStr(raw["crit_chance"] ?? raw["critChance"], "0.05"),
2349
+ resistSchool: coerceStr(raw["resist_school"] ?? raw["resistSchool"], ""),
2350
+ raw
2351
+ };
2352
+ }
2353
+ /**
2354
+ * Parse spawn declaration.
2355
+ *
2356
+ * Syntax:
2357
+ * spawn <name> {
2358
+ * entity: goblin_warrior
2359
+ * zone: ironveil_outskirts
2360
+ * max_count: 8
2361
+ * respawn_interval: 120s
2362
+ * loot_table: goblin_drops
2363
+ * faction: goblin_clan
2364
+ * }
2365
+ *
2366
+ * Compiles to a generic `game-spawn` AST node. The MMO compiler uses this
2367
+ * for load-balancing across shards.
2368
+ */
2369
+ parseSpawnRule() {
2370
+ this.expect("keyword", "spawn");
2371
+ const name = this.expectName() || `spawn_${Date.now()}`;
2372
+ const properties = {};
2373
+ const directives = [];
2374
+ if (this.check("punctuation", "{")) {
2375
+ this.advance();
2376
+ while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
2377
+ this.skipNewlines();
2378
+ if (this.check("punctuation", "}")) break;
2379
+ const t = this.currentToken();
2380
+ if (t?.type === "punctuation" && t.value === "@") {
2381
+ const dir = this.parseDirective();
2382
+ if (dir) directives.push(dir);
2383
+ } else {
2384
+ const prop = this.parseProperty();
2385
+ if (prop) {
2386
+ properties[prop.key] = prop.value;
2387
+ } else {
2388
+ this.advance();
2389
+ }
2390
+ }
2391
+ this.skipNewlines();
2392
+ }
2393
+ this.expect("punctuation", "}");
2394
+ }
2395
+ const spawnNode = {
2396
+ type: "game-spawn",
2397
+ name,
2398
+ properties,
2399
+ directives: directives.length > 0 ? directives : void 0,
2400
+ position: [0, 0, 0]
2401
+ };
2402
+ return spawnNode;
2403
+ }
2404
+ /**
2405
+ * Parse loot_table declaration.
2406
+ *
2407
+ * Syntax:
2408
+ * loot_table <name> {
2409
+ * item <item_name> { @drop_chance 0.15 }
2410
+ * gold { @amount 50..200 }
2411
+ * }
2412
+ *
2413
+ * Compiles to a generic `game-loot-table` AST node.
2414
+ */
2415
+ parseLootTable() {
2416
+ this.expect("keyword", "loot_table");
2417
+ const name = this.expectName() || `loot_${Date.now()}`;
2418
+ const entries = [];
2419
+ if (this.check("punctuation", "{")) {
2420
+ this.advance();
2421
+ while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
2422
+ this.skipNewlines();
2423
+ if (this.check("punctuation", "}")) break;
2424
+ const token = this.currentToken();
2425
+ if (!token) break;
2426
+ const kind = token.value;
2427
+ this.advance();
2428
+ let entryName = kind;
2429
+ const next = this.currentToken();
2430
+ if (next && (next.type === "identifier" || next.type === "keyword") && next.value !== "{") {
2431
+ entryName = next.value;
2432
+ this.advance();
2433
+ }
2434
+ const entryProps = {};
2435
+ const entryDirs = [];
2436
+ if (this.check("punctuation", "{")) {
2437
+ this.advance();
2438
+ while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
2439
+ this.skipNewlines();
2440
+ if (this.check("punctuation", "}")) break;
2441
+ const t = this.currentToken();
2442
+ if (t?.type === "punctuation" && t.value === "@") {
2443
+ const dir = this.parseDirective();
2444
+ if (dir) entryDirs.push(dir);
2445
+ } else {
2446
+ const prop = this.parseProperty();
2447
+ if (prop) {
2448
+ entryProps[prop.key] = prop.value;
2449
+ } else {
2450
+ this.advance();
2451
+ }
2452
+ }
2453
+ this.skipNewlines();
2454
+ }
2455
+ this.expect("punctuation", "}");
2456
+ }
2457
+ entries.push({ kind, name: entryName, properties: entryProps, directives: entryDirs });
2458
+ this.skipNewlines();
2459
+ }
2460
+ this.expect("punctuation", "}");
2461
+ }
2462
+ const lootNode = {
2463
+ type: "game-loot-table",
2464
+ name,
2465
+ entries,
2466
+ position: [0, 0, 0]
2467
+ };
2468
+ return lootNode;
2469
+ }
2470
+ /**
2471
+ * Parse authority declaration.
2472
+ *
2473
+ * Syntax:
2474
+ * authority <name> {
2475
+ * model: server_authoritative
2476
+ * sync_rate: 20hz
2477
+ * server_reconcile: true
2478
+ * }
2479
+ *
2480
+ * Compiles to a generic `game-authority` AST node. The networked compilation
2481
+ * pass maps this to the correct authority model per target runtime.
2482
+ */
2483
+ parseAuthorityBlock() {
2484
+ this.expect("keyword", "authority");
2485
+ const name = this.expectName() || `authority_${Date.now()}`;
2486
+ const properties = {};
2487
+ if (this.check("punctuation", "{")) {
2488
+ this.advance();
2489
+ while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
2490
+ this.skipNewlines();
2491
+ if (this.check("punctuation", "}")) break;
2492
+ const prop = this.parseProperty();
2493
+ if (prop) {
2494
+ properties[prop.key] = prop.value;
2495
+ } else {
2496
+ this.advance();
2497
+ }
2498
+ this.skipNewlines();
2499
+ }
2500
+ this.expect("punctuation", "}");
2501
+ }
2502
+ const authorityNode = {
2503
+ type: "game-authority",
2504
+ name,
2505
+ properties,
2506
+ position: [0, 0, 0]
2507
+ };
2508
+ return authorityNode;
2509
+ }
2510
+ /**
2511
+ * Parse top-level game event blocks: on_combat, on_death, on_spawn, on_cast.
2512
+ *
2513
+ * Syntax:
2514
+ * on_death { drop_loot: goblin_drops; trigger_event: "mob_killed" }
2515
+ * on_spawn { set_state: alive }
2516
+ *
2517
+ * These may appear as top-level declarations on entity/npc blocks or inside
2518
+ * ability blocks. Returns a generic `game-event-block` AST node.
2519
+ */
2520
+ parseGameEventBlock() {
2521
+ const token = this.currentToken();
2522
+ const eventName = token?.value || "on_unknown";
2523
+ this.advance();
2524
+ const params = [];
2525
+ if (this.check("punctuation", "(")) {
2526
+ this.advance();
2527
+ while (!this.check("punctuation", ")") && this.position < this.tokens.length) {
2528
+ const p = this.expectIdentifier();
2529
+ if (p) params.push(p);
2530
+ if (this.check("punctuation", ",")) this.advance();
2531
+ }
2532
+ this.expect("punctuation", ")");
2533
+ }
2534
+ const properties = {};
2535
+ let body = "";
2536
+ if (this.check("punctuation", "{")) {
2537
+ this.advance();
2538
+ let depth = 1;
2539
+ while (depth > 0 && this.position < this.tokens.length) {
2540
+ const t = this.currentToken();
2541
+ if (t.value === "{") depth++;
2542
+ else if (t.value === "}") {
2543
+ depth--;
2544
+ if (depth === 0) {
2545
+ this.advance();
2546
+ break;
2547
+ }
2548
+ }
2549
+ body += (t.type === "string" ? JSON.stringify(t.value) : t.value) + " ";
2550
+ this.advance();
2551
+ }
2552
+ }
2553
+ const eventNode = {
2554
+ type: "game-event-block",
2555
+ name: eventName,
2556
+ params,
2557
+ body: body.trim(),
2558
+ category: this.reactionCategory(eventName),
2559
+ properties,
2560
+ position: [0, 0, 0]
2561
+ };
2562
+ return eventNode;
2563
+ }
2564
+ /** Map a trigger keyword to its routing bucket (see ReactionCategory). */
2565
+ reactionCategory(trigger) {
2566
+ if (isLocomotionReactionTrigger(trigger)) return "movement";
2567
+ switch (trigger) {
2568
+ case "on_interact":
2569
+ case "on_grab":
2570
+ case "on_release":
2571
+ case "on_use":
2572
+ case "on_hover":
2573
+ return "interaction";
2574
+ case "on_collision":
2575
+ case "on_proximity":
2576
+ return "collision";
2577
+ case "on_spawn":
2578
+ case "on_death":
2579
+ case "on_enter":
2580
+ case "on_exit":
2581
+ case "on_tick":
2582
+ return "lifecycle";
2583
+ case "on_combat":
2584
+ case "on_cast":
2585
+ return "combat";
2586
+ case "on_signal":
2587
+ case "on_input":
2588
+ return "signal";
2589
+ default:
2590
+ return "custom";
2591
+ }
2592
+ }
2593
+ /**
2594
+ * Parse a movement statement:
2595
+ * move <target> to [x, y, z] // move to a position
2596
+ * move <target> to otherEntity // follow / seek an entity
2597
+ * move <target> to [..] over 2 via glide easing ease_in_out
2598
+ *
2599
+ * `target` is optional and defaults to `self`. Clause order after `to` is
2600
+ * free (`over` / `via` / `easing` may appear in any order).
2601
+ */
2602
+ parseMove() {
2603
+ this.expect("keyword", "move");
2604
+ let target = "self";
2605
+ if (!this.check("keyword", "to")) {
2606
+ const tt = this.currentToken();
2607
+ if (tt && (tt.type === "identifier" || tt.type === "keyword")) {
2608
+ target = tt.value;
2609
+ this.advance();
2610
+ }
2611
+ }
2612
+ if (!this.check("keyword", "to")) {
2613
+ this.errors.push(this.createError("HS001", "Expected 'to' in move statement", this.currentToken()));
2614
+ return null;
2615
+ }
2616
+ this.advance();
2617
+ let destination;
2618
+ if (this.check("punctuation", "[")) {
2619
+ destination = this.parseVector3OrZero();
2620
+ } else {
2621
+ destination = this.expectIdentifier() || "origin";
2622
+ }
2623
+ let duration;
2624
+ let mode;
2625
+ let easing;
2626
+ let guard = 0;
2627
+ while (this.position < this.tokens.length && guard++ < 8) {
2628
+ if (this.check("keyword", "over")) {
2629
+ this.advance();
2630
+ const n = this.currentToken();
2631
+ if (n && n.type === "number") {
2632
+ duration = parseFloat(n.value);
2633
+ this.advance();
2634
+ }
2635
+ } else if (this.check("keyword", "via")) {
2636
+ this.advance();
2637
+ mode = this.expectIdentifier() || void 0;
2638
+ } else if (this.check("keyword", "easing")) {
2639
+ this.advance();
2640
+ easing = this.expectIdentifier() || void 0;
2641
+ } else {
2642
+ break;
2643
+ }
2644
+ }
2645
+ const node = {
2646
+ type: "movement",
2647
+ target,
2648
+ destination,
2649
+ duration,
2650
+ mode,
2651
+ easing,
2652
+ properties: {},
2653
+ position: [0, 0, 0]
2654
+ };
2655
+ return node;
2656
+ }
2657
+ /** Parse a `[x, y, z]` literal, tolerating missing components as 0. */
2658
+ parseVector3OrZero() {
2659
+ const out = [];
2660
+ if (this.check("punctuation", "[")) {
2661
+ this.advance();
2662
+ while (!this.check("punctuation", "]") && this.position < this.tokens.length) {
2663
+ const t = this.currentToken();
2664
+ if (t && t.type === "number") out.push(parseFloat(t.value));
2665
+ this.advance();
2666
+ if (this.check("punctuation", ",")) this.advance();
2667
+ }
2668
+ if (this.check("punctuation", "]")) this.advance();
2669
+ }
2670
+ return [out[0] ?? 0, out[1] ?? 0, out[2] ?? 0];
2671
+ }
2672
+ /**
2673
+ * Parse a domain-neutral action declaration:
2674
+ * action open(target) {
2675
+ * @requires { distance < 2 }
2676
+ * @cooldown 1s
2677
+ * effect { state.open = true }
2678
+ * animation: door_swing
2679
+ * @server_side
2680
+ * }
2681
+ *
2682
+ * This is the general form of the MMO `ability`: any verb with preconditions,
2683
+ * cost, cooldown, effects, and an animation binding. `@server_side` /
2684
+ * `@client_side` / `@replicated` are collected as directive flags.
2685
+ */
2686
+ parseActionDecl() {
2687
+ this.expect("keyword", "action");
2688
+ const name = this.expectIdentifier();
2689
+ if (!name) return null;
2690
+ const params = [];
2691
+ if (this.check("punctuation", "(")) {
2692
+ this.advance();
2693
+ while (!this.check("punctuation", ")") && this.position < this.tokens.length) {
2694
+ const p = this.expectIdentifier();
2695
+ if (p) params.push(p);
2696
+ if (this.check("punctuation", ",")) this.advance();
2697
+ }
2698
+ this.expect("punctuation", ")");
2699
+ }
2700
+ const clauses = [];
2701
+ const flags = [];
2702
+ const properties = {};
2703
+ if (this.check("punctuation", "{")) {
2704
+ this.advance();
2705
+ while (!this.check("punctuation", "}") && this.position < this.tokens.length) {
2706
+ this.skipNewlines();
2707
+ if (this.check("punctuation", "}")) break;
2708
+ const t = this.currentToken();
2709
+ if (!t) break;
2710
+ if (t.value === "@") {
2711
+ this.advance();
2712
+ const dirName = this.expectIdentifier() || "";
2713
+ if (this.check("punctuation", "{")) {
2714
+ clauses.push({ kind: dirName, body: this.consumeBracedBody() });
2715
+ } else {
2716
+ let raw = "";
2717
+ while (this.position < this.tokens.length) {
2718
+ const n = this.currentToken();
2719
+ if (!n || n.type === "newline" || n.value === ";" || n.value === "{" || n.value === "}") break;
2720
+ if (n.type === "keyword" && this.keywordSet.has(n.value.toLowerCase())) break;
2721
+ raw += n.value;
2722
+ this.advance();
2723
+ }
2724
+ if (raw.trim()) {
2725
+ clauses.push({ kind: dirName, body: raw.trim() });
2726
+ } else {
2727
+ flags.push(dirName);
2728
+ }
2729
+ }
2730
+ continue;
2731
+ }
2732
+ if (t.type === "identifier" && this.tokens[this.position + 1]?.value === "{") {
2733
+ const clauseName = t.value;
2734
+ this.advance();
2735
+ clauses.push({ kind: clauseName, body: this.consumeBracedBody() });
2736
+ continue;
2737
+ }
2738
+ const prop = this.parseProperty();
2739
+ if (prop) {
2740
+ properties[prop.key] = prop.value;
2741
+ } else {
2742
+ this.advance();
2743
+ }
2744
+ this.skipNewlines();
2745
+ }
2746
+ this.expect("punctuation", "}");
2747
+ }
2748
+ const node = {
2749
+ type: "action-decl",
2750
+ name,
2751
+ params,
2752
+ clauses,
2753
+ flags,
2754
+ properties,
2755
+ position: [0, 0, 0]
2756
+ };
2757
+ return node;
2758
+ }
2759
+ /** Consume a `{ ... }` block (assumes the `{` is current) and return its raw inner text. */
2760
+ consumeBracedBody() {
2761
+ let body = "";
2762
+ if (this.check("punctuation", "{")) {
2763
+ this.advance();
2764
+ let depth = 1;
2765
+ while (depth > 0 && this.position < this.tokens.length) {
2766
+ const t = this.currentToken();
2767
+ if (t.value === "{") depth++;
2768
+ else if (t.value === "}") {
2769
+ depth--;
2770
+ if (depth === 0) {
2771
+ this.advance();
2772
+ break;
2773
+ }
2774
+ }
2775
+ body += (t.type === "string" ? JSON.stringify(t.value) : t.value) + " ";
2776
+ this.advance();
2777
+ }
2778
+ }
2779
+ return body.trim();
2780
+ }
2781
+ // ===========================================================================
2782
+ // END MMO / GAME-LOGIC PARSERS
2783
+ // ===========================================================================
2071
2784
  parseExpressionStatement() {
2072
2785
  let expression = "";
2073
2786
  let parenDepth = 0;
@@ -2513,5 +3226,5 @@ var HoloScriptCodeParser = class {
2513
3226
  };
2514
3227
 
2515
3228
  export { ERROR_CODES, HoloScriptCodeParser, ParserPools };
2516
- //# sourceMappingURL=chunk-MDR235RZ.js.map
2517
- //# sourceMappingURL=chunk-MDR235RZ.js.map
3229
+ //# sourceMappingURL=chunk-734OB5SK.js.map
3230
+ //# sourceMappingURL=chunk-734OB5SK.js.map