@holoscript/core 8.0.8 → 8.0.10

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 (463) hide show
  1. package/LICENSE +21 -0
  2. package/bin/holoscript.cjs +5 -1
  3. package/dist/GLTFPipeline-L76YTXKA.js +15 -0
  4. package/dist/GLTFPipeline-ZWJN7GI6.cjs +36 -0
  5. package/dist/HoloCompositionParser-K76KTEEE.js +12 -0
  6. package/dist/HoloCompositionParser-UZH6Y4HO.cjs +45 -0
  7. package/dist/HoloScriptCodeParser-2D4ERFUZ.js +6 -0
  8. package/dist/HoloScriptCodeParser-UDRLDA7I.cjs +23 -0
  9. package/dist/HoloScriptPlusParser-FTMCGWXD.js +13 -0
  10. package/dist/HoloScriptPlusParser-LQR5GIKF.cjs +30 -0
  11. package/dist/HoloScriptRuntime-UTRLJI5L.js +12 -0
  12. package/dist/HoloScriptRuntime-YBYXJHJN.cjs +21 -0
  13. package/dist/SceneIRCompiler-63KA3M2F.js +17 -0
  14. package/dist/SceneIRCompiler-KWUFHZ4O.cjs +42 -0
  15. package/dist/{USDZExporter-AUHZODOF.cjs → USDZExporter-ML4UMIGC.cjs} +3 -3
  16. package/dist/{USDZExporter-GXB4AUSG.js → USDZExporter-ZFKLQ76G.js} +3 -3
  17. package/dist/agents/index.cjs +1 -1
  18. package/dist/agents/index.js +1 -1
  19. package/dist/audit/AuditLogger.d.ts +106 -0
  20. package/dist/audit/AuditQueryBuilder.d.ts +79 -0
  21. package/dist/audit/ComplianceReporter.d.ts +90 -0
  22. package/dist/audit/index.d.ts +13 -0
  23. package/dist/{chunk-FGMDMJM7.js → chunk-2BYAUHBO.js} +3 -3
  24. package/dist/{chunk-EDPYCLRC.cjs → chunk-2E6PP5UE.cjs} +83 -59
  25. package/dist/{chunk-GASCWJK5.js → chunk-2EGGAZT3.js} +65 -287
  26. package/dist/{chunk-SIEXCILW.js → chunk-2I3XAGMF.js} +3 -3
  27. package/dist/{chunk-OS533P33.cjs → chunk-2KKOYZYI.cjs} +1074 -1655
  28. package/dist/chunk-2MQKNDNH.js +51 -0
  29. package/dist/{chunk-7DMMMBCY.cjs → chunk-2X3IPCBK.cjs} +10 -10
  30. package/dist/chunk-2ZOTBO25.cjs +202 -0
  31. package/dist/chunk-356N4NPM.cjs +152 -0
  32. package/dist/{chunk-X3GJPRVK.cjs → chunk-36NPLOI4.cjs} +92 -81
  33. package/dist/{chunk-SLU6UPJI.cjs → chunk-37HHY7RH.cjs} +5 -5
  34. package/dist/{chunk-YDPEHCCI.cjs → chunk-3CDDRUER.cjs} +3 -118
  35. package/dist/chunk-3F7ZZWIN.js +1651 -0
  36. package/dist/chunk-3ILD7TKP.cjs +187 -0
  37. package/dist/{chunk-X27QRG4C.cjs → chunk-3IUHTGDD.cjs} +153 -41
  38. package/dist/{chunk-PXNZ6TME.js → chunk-4376VHNJ.js} +60 -36
  39. package/dist/{chunk-YKGPCZEE.cjs → chunk-4FIBOJW6.cjs} +10 -10
  40. package/dist/chunk-4Q7RKQQI.cjs +14195 -0
  41. package/dist/{chunk-YCM6QQRT.cjs → chunk-566ZB4LZ.cjs} +180 -8
  42. package/dist/{chunk-2Y3V22SG.js → chunk-5CURIYGT.js} +3 -3
  43. package/dist/{chunk-QBWNJXNR.js → chunk-5FYMCVBY.js} +5 -5
  44. package/dist/{chunk-ZA34AN3R.js → chunk-5LVFTGKH.js} +841 -12
  45. package/dist/{chunk-Z6PMDS4G.js → chunk-5OUOMBKK.js} +1090 -53
  46. package/dist/chunk-63AUAIL6.js +48 -0
  47. package/dist/chunk-655FATJU.js +110 -0
  48. package/dist/{chunk-TQ377OLB.cjs → chunk-65S62L4D.cjs} +28 -22
  49. package/dist/chunk-6NTAZN5Z.cjs +502 -0
  50. package/dist/chunk-6TRX6AR2.js +9376 -0
  51. package/dist/chunk-6ZCCLKS2.cjs +51 -0
  52. package/dist/{chunk-MDR235RZ.js → chunk-734OB5SK.js} +721 -8
  53. package/dist/{chunk-Q2Q34NF3.js → chunk-77QI552M.js} +6 -6
  54. package/dist/{chunk-WKX5AMOY.js → chunk-7I74JWPW.js} +3 -3
  55. package/dist/{chunk-5FSKKMR7.cjs → chunk-7IDJDMPU.cjs} +232 -4
  56. package/dist/chunk-7VBKRGIZ.cjs +847 -0
  57. package/dist/{chunk-KCPHASCO.js → chunk-AATYYLYK.js} +5 -5
  58. package/dist/{chunk-DTGBOSEM.cjs → chunk-AWXFEAQL.cjs} +12 -12
  59. package/dist/{chunk-THCK6ECW.js → chunk-B3CWTCK2.js} +231 -3
  60. package/dist/chunk-BCP4E7MD.cjs +997 -0
  61. package/dist/chunk-BG7RPYJP.js +91 -0
  62. package/dist/{chunk-VF257YKO.js → chunk-BP4KTMLY.js} +117 -5
  63. package/dist/{chunk-YN6IETRZ.js → chunk-BQJ3YBF3.js} +6424 -987
  64. package/dist/{chunk-7X5PNIQJ.js → chunk-BXSOEQI3.js} +27 -25
  65. package/dist/{chunk-WFKVS2K4.cjs → chunk-C65C5VED.cjs} +1101 -55
  66. package/dist/{chunk-KOUAQL2B.cjs → chunk-CANAL6CT.cjs} +1569 -168
  67. package/dist/{chunk-FDSGHPAK.js → chunk-CBSDJF3B.js} +3 -3
  68. package/dist/{chunk-FEWUHQNM.cjs → chunk-CFVK26P4.cjs} +4 -4
  69. package/dist/{chunk-M7K4LE66.cjs → chunk-CI33NINL.cjs} +4 -4
  70. package/dist/{chunk-2OWDB4FB.js → chunk-CKV5NYAE.js} +6 -6
  71. package/dist/{chunk-LPS5AMQD.cjs → chunk-CM4NHXVO.cjs} +24 -24
  72. package/dist/chunk-D3HSRXYB.js +115 -0
  73. package/dist/{chunk-FNHJRI32.js → chunk-DBH3D2MU.js} +1561 -160
  74. package/dist/{chunk-GW3LKD5C.js → chunk-DJNH4HFW.js} +3 -3
  75. package/dist/{chunk-2GCNOI2U.cjs → chunk-DN6F4DHH.cjs} +9 -3
  76. package/dist/chunk-DQRJ5RJG.js +432 -0
  77. package/dist/{chunk-C7ZBSV2Q.js → chunk-DUG3OQAS.js} +106 -43
  78. package/dist/chunk-ECUYJOJ2.cjs +199 -0
  79. package/dist/chunk-EEMTCAK7.js +182 -0
  80. package/dist/{chunk-3SKLAUDD.cjs → chunk-EI3J6LTW.cjs} +359 -581
  81. package/dist/{chunk-SSSN7VAM.js → chunk-EM2OGPYE.js} +4 -4
  82. package/dist/{chunk-56VOWURB.cjs → chunk-ENZCIQZC.cjs} +522 -453
  83. package/dist/chunk-ESBXUYOC.cjs +836 -0
  84. package/dist/{chunk-L5U4W6JC.js → chunk-ESSEF6U2.js} +4 -4
  85. package/dist/chunk-ET3AN4W3.js +824 -0
  86. package/dist/chunk-EXKSFGSX.cjs +14 -14
  87. package/dist/{chunk-I76GIKN7.cjs → chunk-F3YT6GUF.cjs} +17 -17
  88. package/dist/{chunk-WRWEX5ZF.js → chunk-F75DZBBI.js} +3 -3
  89. package/dist/{chunk-4JGRWHZJ.js → chunk-FG6PYGIZ.js} +12 -6
  90. package/dist/chunk-FGGJQRLZ.js +14 -14
  91. package/dist/{chunk-SXOSDZD6.js → chunk-FWCHPCD4.js} +128 -10
  92. package/dist/{chunk-XW6IXEQH.cjs → chunk-G35CAQ7I.cjs} +5 -5
  93. package/dist/{chunk-7VMGP2FW.js → chunk-G6KACNMO.js} +132 -188
  94. package/dist/{chunk-FJPADH77.cjs → chunk-GAWJJAGT.cjs} +6 -6
  95. package/dist/chunk-GGR7QUKK.cjs +4724 -0
  96. package/dist/chunk-GIBF4BHH.js +14098 -0
  97. package/dist/{chunk-AWB7QYY6.cjs → chunk-GILYQ5VH.cjs} +6 -6
  98. package/dist/{chunk-FWVYAMNW.cjs → chunk-GKFCHGCM.cjs} +4 -4
  99. package/dist/{chunk-Y3ZFVUUU.js → chunk-GLEJ2TLS.js} +3 -3
  100. package/dist/{chunk-3GWWJT7L.js → chunk-GP3OKSKT.js} +13 -13
  101. package/dist/chunk-GTIPOEHN.js +196 -0
  102. package/dist/{chunk-LMJ5EBV7.cjs → chunk-GZPUA2TL.cjs} +16 -15
  103. package/dist/{chunk-IELX2OKI.js → chunk-H4LJ4HEA.js} +3 -115
  104. package/dist/{chunk-ACVWFGBI.cjs → chunk-HCX4SMFK.cjs} +3 -3
  105. package/dist/{chunk-HYNTS5CP.js → chunk-HHRZ6STP.js} +24 -2
  106. package/dist/chunk-HIDEIEFG.js +48 -0
  107. package/dist/{chunk-W6RW64BB.cjs → chunk-HSWBIDZM.cjs} +228 -5
  108. package/dist/{chunk-GSOUNWEL.js → chunk-HVX7QQYK.js} +1035 -1616
  109. package/dist/{chunk-TRCGG42I.cjs → chunk-IFW5IW4L.cjs} +6502 -1019
  110. package/dist/{chunk-F5LKJ6F5.cjs → chunk-IJU6AS67.cjs} +32 -28
  111. package/dist/{chunk-TVANHNJ7.js → chunk-IK6Z2HNC.js} +173 -3
  112. package/dist/{chunk-QGMUTVVH.cjs → chunk-IS7NTKY5.cjs} +20 -20
  113. package/dist/{chunk-YFVQWSNJ.js → chunk-IXWGYWH6.js} +3 -3
  114. package/dist/chunk-J2DAS2PL.js +148 -0
  115. package/dist/chunk-JBQXZIWB.js +148 -0
  116. package/dist/chunk-JBYBMBMW.js +261 -0
  117. package/dist/{chunk-LWUOUCYL.js → chunk-JEJ7TT54.js} +5 -5
  118. package/dist/{chunk-DUCB6LGL.js → chunk-JOTCTHN5.js} +211 -5
  119. package/dist/{chunk-47RUFYKR.js → chunk-K56UVEXV.js} +3 -3
  120. package/dist/{chunk-XSFNHP2E.js → chunk-KB26H447.js} +3 -3
  121. package/dist/{chunk-3NGDZZR4.js → chunk-KEYG7HGY.js} +430 -37
  122. package/dist/{chunk-DY72BMU5.js → chunk-KFVNCW4Q.js} +4 -4
  123. package/dist/chunk-KPGC7SK2.js +192 -0
  124. package/dist/chunk-KROXXBK5.cjs +53 -0
  125. package/dist/{chunk-ZPZAVHXL.cjs → chunk-LB3ZZMKT.cjs} +137 -19
  126. package/dist/chunk-LDYZWNJW.cjs +1654 -0
  127. package/dist/{chunk-UGXHYIWT.cjs → chunk-LHNHO27U.cjs} +28 -28
  128. package/dist/{chunk-ULMSSHCJ.cjs → chunk-LMB555QB.cjs} +405 -38
  129. package/dist/{chunk-CBJY23VL.js → chunk-MD4IVS42.js} +3 -3
  130. package/dist/{chunk-VMLKSV26.js → chunk-MDDWEBCX.js} +226 -3
  131. package/dist/chunk-MUWH4QK5.cjs +94 -0
  132. package/dist/{chunk-T6W3Z3SH.cjs → chunk-N2ILK7BF.cjs} +4 -4
  133. package/dist/{chunk-6EX3I5P4.cjs → chunk-N74QRJGP.cjs} +6 -6
  134. package/dist/chunk-NFFHLX37.cjs +132 -0
  135. package/dist/chunk-NJSYWX7H.js +190 -0
  136. package/dist/{chunk-SH5PPVK7.cjs → chunk-NQN5LFN4.cjs} +165 -221
  137. package/dist/chunk-NTQRFOPP.cjs +56 -0
  138. package/dist/{chunk-YFWRJW4B.js → chunk-NWMJPTVL.js} +51 -55
  139. package/dist/{chunk-63ZGNR2T.cjs → chunk-OC6GV5QH.cjs} +42 -42
  140. package/dist/{chunk-7E7GCQCK.js → chunk-OG3MBHM3.js} +9 -3
  141. package/dist/chunk-OMNHTCS4.cjs +264 -0
  142. package/dist/chunk-OQXB6NNC.cjs +117 -0
  143. package/dist/{chunk-Y57W2CT5.cjs → chunk-OV46CCA2.cjs} +51 -55
  144. package/dist/{chunk-6PRZIHGL.cjs → chunk-OV6HHKLE.cjs} +21 -266
  145. package/dist/{chunk-C37BHB7N.cjs → chunk-P26YYPOO.cjs} +5 -5
  146. package/dist/{chunk-2BZHWUSR.cjs → chunk-P7JEKJTZ.cjs} +16 -16
  147. package/dist/{chunk-NGBXXZLL.cjs → chunk-PDXX5UI4.cjs} +45 -45
  148. package/dist/{chunk-FHQFPYV4.js → chunk-PJFTTSKE.js} +8 -7
  149. package/dist/{chunk-GVFJ6T4S.cjs → chunk-PVODJEJ7.cjs} +721 -8
  150. package/dist/{chunk-ZZ7RO2UQ.js → chunk-Q265VZJ4.js} +3 -3
  151. package/dist/{chunk-E7JP3BS3.cjs → chunk-Q47JEE2C.cjs} +4 -4
  152. package/dist/chunk-QBY7LRN2.js +281 -0
  153. package/dist/{chunk-GH6C2QGW.cjs → chunk-QEDMOGF3.cjs} +857 -16
  154. package/dist/{chunk-5WUNN6ZN.cjs → chunk-QHSAVOOL.cjs} +24 -2
  155. package/dist/chunk-QJNCDVYM.cjs +137 -0
  156. package/dist/chunk-QM7FJB5W.js +4717 -0
  157. package/dist/chunk-QQFB4RT2.cjs +448 -0
  158. package/dist/chunk-QSYBHQAD.cjs +196 -0
  159. package/dist/{chunk-2YSNA2F2.cjs → chunk-QVJMDVYZ.cjs} +5 -5
  160. package/dist/chunk-RAJMAX6D.js +131 -0
  161. package/dist/{chunk-VVKVQZI6.js → chunk-RAN3ECAS.js} +3 -3
  162. package/dist/chunk-RKGUZBOC.js +79 -0
  163. package/dist/{chunk-HLFDZ35S.cjs → chunk-RRQIAJLQ.cjs} +8 -8
  164. package/dist/{chunk-PABONWKI.js → chunk-RXQNRZ5F.js} +3 -3
  165. package/dist/{chunk-7ZHYEITD.cjs → chunk-S4O7CFHQ.cjs} +10 -11
  166. package/dist/chunk-SE7ANBGN.js +128 -0
  167. package/dist/{chunk-X2AVEAZM.cjs → chunk-SJIRCTIS.cjs} +176 -2
  168. package/dist/{chunk-WXQ57LAO.js → chunk-SQXAZHDG.js} +4 -4
  169. package/dist/chunk-SR73L5ZP.cjs +84 -0
  170. package/dist/{chunk-OABEO6HH.js → chunk-SZOLTWWD.js} +2349 -214
  171. package/dist/{chunk-5JEU52DW.js → chunk-TPZ3BN2D.js} +3 -3
  172. package/dist/{chunk-QFU53KRH.js → chunk-TSTFYGGX.js} +4 -5
  173. package/dist/{chunk-EBS32AJI.cjs → chunk-TZCFKZ6Z.cjs} +5 -5
  174. package/dist/chunk-UCVZXQ63.js +724 -0
  175. package/dist/chunk-UGQ3QNV6.js +992 -0
  176. package/dist/chunk-UNMVGZVW.js +142 -0
  177. package/dist/{chunk-TEVX443G.js → chunk-UTUD6GJI.js} +178 -6
  178. package/dist/chunk-UXBYA7DV.cjs +155 -0
  179. package/dist/chunk-V6GXFSK7.cjs +443 -0
  180. package/dist/chunk-VHORVGCG.cjs +761 -0
  181. package/dist/{chunk-B4EKV6HQ.js → chunk-VKCTYLDN.js} +500 -442
  182. package/dist/{chunk-O3MGZDCT.cjs → chunk-VTEXJOSD.cjs} +63 -63
  183. package/dist/chunk-VVAAZITA.cjs +287 -0
  184. package/dist/{chunk-V7AKE5VT.cjs → chunk-W2GA3EQB.cjs} +435 -42
  185. package/dist/chunk-W4GABFCR.js +37 -0
  186. package/dist/chunk-WKEK4NCA.js +490 -0
  187. package/dist/{chunk-5A4TCHOC.cjs → chunk-WNYXT4TE.cjs} +4 -4
  188. package/dist/{chunk-S762UEV5.js → chunk-WTH23ISI.js} +6 -6
  189. package/dist/{chunk-BTKZGHAV.js → chunk-WWNCM473.js} +10 -6
  190. package/dist/{chunk-4YNYPHH3.cjs → chunk-X75H75UY.cjs} +2351 -213
  191. package/dist/{chunk-LYJJI7ZK.cjs → chunk-XCUDDFKC.cjs} +216 -9
  192. package/dist/chunk-YAO4HPJL.cjs +120 -0
  193. package/dist/chunk-YKY2JBER.cjs +9443 -0
  194. package/dist/chunk-YP5CHEYU.cjs +154 -0
  195. package/dist/{chunk-WRNEH5MO.js → chunk-YW3I2FQL.js} +18 -7
  196. package/dist/{chunk-BRNUPDHJ.js → chunk-Z557DVYN.js} +386 -19
  197. package/dist/{chunk-VSACG2AR.js → chunk-Z6LZUYZF.js} +21 -264
  198. package/dist/chunk-ZHPMP447.cjs +43 -0
  199. package/dist/{chunk-LODTHGST.cjs → chunk-ZK7KX5CD.cjs} +133 -70
  200. package/dist/{chunk-CCPSNT6B.cjs → chunk-ZRPALBQB.cjs} +5 -5
  201. package/dist/chunk-ZVFHPMC5.js +824 -0
  202. package/dist/chunk-ZVQMKUGJ.js +443 -0
  203. package/dist/cli/holoscript-runner.cjs +86 -48
  204. package/dist/cli/holoscript-runner.js +54 -16
  205. package/dist/codebase/index.cjs +1 -1
  206. package/dist/codebase/index.js +1 -1
  207. package/dist/compiler/agent-inference.cjs +11 -11
  208. package/dist/compiler/agent-inference.js +9 -6
  209. package/dist/compiler/android-xr.cjs +13 -12
  210. package/dist/compiler/android-xr.js +11 -10
  211. package/dist/compiler/android.cjs +12 -12
  212. package/dist/compiler/android.js +10 -10
  213. package/dist/compiler/business-quest.cjs +10 -10
  214. package/dist/compiler/business-quest.js +2 -2
  215. package/dist/compiler/coco.cjs +1 -1
  216. package/dist/compiler/coco.js +1 -1
  217. package/dist/compiler/context.cjs +9 -9
  218. package/dist/compiler/context.js +6 -6
  219. package/dist/compiler/daimon-seed.cjs +36 -0
  220. package/dist/compiler/daimon-seed.js +12 -0
  221. package/dist/compiler/domain-block-utils.cjs +205 -156
  222. package/dist/compiler/domain-block-utils.js +8 -7
  223. package/dist/compiler/dtdl.cjs +10 -10
  224. package/dist/compiler/dtdl.js +7 -7
  225. package/dist/compiler/gltf-pipeline.cjs +9 -9
  226. package/dist/compiler/gltf-pipeline.js +2 -2
  227. package/dist/compiler/godot.cjs +10 -9
  228. package/dist/compiler/godot.js +9 -8
  229. package/dist/compiler/incremental.cjs +11 -11
  230. package/dist/compiler/incremental.js +6 -6
  231. package/dist/compiler/index.cjs +2585 -3273
  232. package/dist/compiler/index.d.ts +149 -35
  233. package/dist/compiler/index.js +2197 -3102
  234. package/dist/compiler/ios.cjs +11 -11
  235. package/dist/compiler/ios.js +9 -9
  236. package/dist/compiler/llm-provider-capabilities.cjs +9 -9
  237. package/dist/compiler/llm-provider-capabilities.js +6 -6
  238. package/dist/compiler/nodetoy.cjs +1 -1
  239. package/dist/compiler/nodetoy.js +1 -1
  240. package/dist/compiler/openxr.cjs +11 -10
  241. package/dist/compiler/openxr.js +10 -9
  242. package/dist/compiler/remotion.cjs +1 -1
  243. package/dist/compiler/remotion.js +1 -1
  244. package/dist/compiler/reproducibility.cjs +1 -1
  245. package/dist/compiler/reproducibility.js +1 -1
  246. package/dist/compiler/sdf.cjs +11 -10
  247. package/dist/compiler/sdf.js +9 -8
  248. package/dist/compiler/semantic-scene.cjs +7 -7
  249. package/dist/compiler/semantic-scene.js +2 -2
  250. package/dist/compiler/state.cjs +9 -9
  251. package/dist/compiler/state.js +7 -7
  252. package/dist/compiler/trait-composition.cjs +11 -11
  253. package/dist/compiler/trait-composition.js +7 -7
  254. package/dist/compiler/traits/ProvenanceSemiring.d.ts +167 -0
  255. package/dist/compiler/traits/Semiring.d.ts +26 -0
  256. package/dist/compiler/unity.cjs +11 -10
  257. package/dist/compiler/unity.js +10 -9
  258. package/dist/compiler/unreal.cjs +12 -11
  259. package/dist/compiler/unreal.js +10 -9
  260. package/dist/compiler/urdf.cjs +18 -17
  261. package/dist/compiler/urdf.js +9 -8
  262. package/dist/compiler/usd-physics.cjs +11 -10
  263. package/dist/compiler/usd-physics.js +8 -7
  264. package/dist/compiler/visionos.cjs +11 -10
  265. package/dist/compiler/visionos.js +10 -9
  266. package/dist/compiler/vrchat.cjs +11 -10
  267. package/dist/compiler/vrchat.js +9 -8
  268. package/dist/compiler/wasm.cjs +14 -13
  269. package/dist/compiler/wasm.js +9 -8
  270. package/dist/compiler/webgpu.cjs +10 -9
  271. package/dist/compiler/webgpu.js +9 -8
  272. package/dist/constants.cjs +398 -0
  273. package/dist/constants.js +9 -0
  274. package/dist/coordinators/index.cjs +4 -1
  275. package/dist/coordinators/index.js +4 -1
  276. package/dist/debugger.cjs +11 -9
  277. package/dist/debugger.js +9 -7
  278. package/dist/{dist-ACXG6IH5.cjs → dist-GRMOP2UL.cjs} +341 -65
  279. package/dist/{dist-VD4L6V7Q.js → dist-ZBUKU2JG.js} +333 -63
  280. package/dist/entries/interop.cjs +23 -23
  281. package/dist/entries/interop.js +3 -3
  282. package/dist/entries/scripting.cjs +12 -11
  283. package/dist/entries/scripting.js +8 -7
  284. package/dist/evolution/index.cjs +66 -0
  285. package/dist/evolution/index.d.ts +162 -0
  286. package/dist/evolution/index.js +17 -0
  287. package/dist/hololand/index.cjs +41 -37
  288. package/dist/hololand/index.js +3 -3
  289. package/dist/index.cjs +12394 -3224
  290. package/dist/index.d.ts +260 -18
  291. package/dist/index.js +10755 -2182
  292. package/dist/keyword-registry/PluginKeywordRegistry.d.ts +138 -0
  293. package/dist/keyword-registry/index.cjs +29 -0
  294. package/dist/keyword-registry/index.d.ts +1 -0
  295. package/dist/keyword-registry/index.js +4 -0
  296. package/dist/math/tropical-spmv.cjs +11 -11
  297. package/dist/math/tropical-spmv.d.ts +1 -0
  298. package/dist/math/tropical-spmv.js +2 -2
  299. package/dist/math/tropicalSpmv.d.ts +43 -0
  300. package/dist/math/vec3.cjs +1 -1
  301. package/dist/math/vec3.js +1 -1
  302. package/dist/matter/StagedMatter.d.ts +82 -0
  303. package/dist/matter/index.cjs +17 -0
  304. package/dist/matter/index.d.ts +1 -0
  305. package/dist/matter/index.js +4 -0
  306. package/dist/{ml-dsa-Z7JDKW4L.js → ml-dsa-J6VKVT4K.js} +3 -3
  307. package/dist/{ml-dsa-FSKBTE3W.cjs → ml-dsa-MTIK4ZUQ.cjs} +23 -23
  308. package/dist/paper-0c-spike/index.cjs +1 -1
  309. package/dist/paper-0c-spike/index.js +1 -1
  310. package/dist/parameter-envelope/ParameterEnvelope.d.ts +128 -0
  311. package/dist/parameter-envelope/index.cjs +17 -0
  312. package/dist/parameter-envelope/index.d.ts +2 -0
  313. package/dist/parameter-envelope/index.js +4 -0
  314. package/dist/parser/HoloCompositionTypes.d.ts +2013 -0
  315. package/dist/parser/PipelineParser.d.ts +162 -0
  316. package/dist/parser.cjs +36 -20
  317. package/dist/parser.js +13 -9
  318. package/dist/plugin-manifest/ManifestAutoLoader.d.ts +35 -0
  319. package/dist/plugin-manifest/PluginManifest.d.ts +156 -0
  320. package/dist/plugin-manifest/index.cjs +25 -0
  321. package/dist/plugin-manifest/index.d.ts +2 -0
  322. package/dist/plugin-manifest/index.js +4 -0
  323. package/dist/plugin-solver-contract/PluginSolverContract.d.ts +288 -0
  324. package/dist/plugin-solver-contract/index.cjs +41 -0
  325. package/dist/plugin-solver-contract/index.d.ts +1 -0
  326. package/dist/plugin-solver-contract/index.js +4 -0
  327. package/dist/policy/ContentPolicyGate.d.ts +51 -0
  328. package/dist/policy/PolicyPack.d.ts +120 -0
  329. package/dist/policy/blocklist.d.ts +32 -0
  330. package/dist/policy/defaults.d.ts +44 -0
  331. package/dist/policy/index.cjs +106 -0
  332. package/dist/policy/index.d.ts +17 -0
  333. package/dist/policy/index.js +5 -0
  334. package/dist/policy/jsonLogic.d.ts +31 -0
  335. package/dist/policy/types.d.ts +174 -0
  336. package/dist/proof-composition/ProofCompositionLaw.d.ts +93 -0
  337. package/dist/proof-composition/index.cjs +25 -0
  338. package/dist/proof-composition/index.d.ts +1 -0
  339. package/dist/proof-composition/index.js +4 -0
  340. package/dist/receipts/hash-policy.d.ts +85 -0
  341. package/dist/reconstruction/index.cjs +75 -47
  342. package/dist/reconstruction/index.js +5 -5
  343. package/dist/runtime/plugin-trait-registrar.d.ts +36 -0
  344. package/dist/runtime.cjs +81 -79
  345. package/dist/runtime.js +9 -7
  346. package/dist/scene-presets-EDKYZ5GW.js +4 -0
  347. package/dist/scene-presets-NCW2CFRS.cjs +17 -0
  348. package/dist/self-improvement/index.cjs +1 -1
  349. package/dist/self-improvement/index.js +1 -1
  350. package/dist/{src-PT2FERDV.cjs → src-G3D7ZATQ.cjs} +545 -21
  351. package/dist/{src-J6CM4AUR.js → src-UXYA7HM6.js} +539 -16
  352. package/dist/storage/index.cjs +10 -10
  353. package/dist/storage/index.js +3 -3
  354. package/dist/testing.cjs +1 -1
  355. package/dist/testing.js +1 -1
  356. package/dist/tools/index.cjs +3631 -0
  357. package/dist/tools/index.js +3581 -0
  358. package/dist/traitDocs/traitDocs.cjs +9 -9
  359. package/dist/traitDocs/traitDocs.d.ts +1 -0
  360. package/dist/traitDocs/traitDocs.js +3 -3
  361. package/dist/traits/ControlLoopTrait.d.ts +154 -0
  362. package/dist/traits/KinematicChainTrait.d.ts +116 -0
  363. package/dist/traits/SensorSamplingTrait.d.ts +154 -0
  364. package/dist/traits/TraitTypes.d.ts +270 -0
  365. package/dist/traits/TransactionTrait.d.ts +121 -0
  366. package/dist/traits/botanical-lotus.cjs +54 -50
  367. package/dist/traits/botanical-lotus.js +2 -5
  368. package/dist/traits/control-loop.cjs +21 -0
  369. package/dist/traits/control-loop.d.ts +1 -0
  370. package/dist/traits/control-loop.js +4 -0
  371. package/dist/traits/engines/cloth-verlet.d.ts +65 -0
  372. package/dist/traits/engines/index.cjs +19 -19
  373. package/dist/traits/engines/index.d.ts +15 -275
  374. package/dist/traits/engines/index.js +3 -3
  375. package/dist/traits/engines/motion-data-schema.d.ts +119 -0
  376. package/dist/traits/engines/motion-matching.d.ts +102 -0
  377. package/dist/traits/engines/noise.d.ts +25 -0
  378. package/dist/traits/engines/onnx-adapter.d.ts +173 -0
  379. package/dist/traits/engines/onnx-motion-matching.d.ts +163 -0
  380. package/dist/traits/engines/pfnn-network.d.ts +92 -0
  381. package/dist/traits/engines/synthetic-walk-cycle.d.ts +38 -0
  382. package/dist/traits/engines/tensor-ops.d.ts +15 -0
  383. package/dist/traits/index.cjs +2789 -1259
  384. package/dist/traits/index.d.ts +35 -0
  385. package/dist/traits/index.js +1692 -411
  386. package/dist/traits/kinematic-chain.cjs +25 -0
  387. package/dist/traits/kinematic-chain.d.ts +1 -0
  388. package/dist/traits/kinematic-chain.js +4 -0
  389. package/dist/traits/sensor-sampling.cjs +33 -0
  390. package/dist/traits/sensor-sampling.d.ts +1 -0
  391. package/dist/traits/sensor-sampling.js +4 -0
  392. package/dist/traits/simulation-solver-factory.cjs +1 -1
  393. package/dist/traits/simulation-solver-factory.js +1 -1
  394. package/dist/traits/transaction.cjs +29 -0
  395. package/dist/traits/transaction.d.ts +1 -0
  396. package/dist/traits/transaction.js +4 -0
  397. package/dist/traits/webcam-gaze.cjs +1 -1
  398. package/dist/traits/webcam-gaze.js +1 -1
  399. package/dist/type-checker.cjs +7 -6
  400. package/dist/type-checker.js +5 -4
  401. package/dist/types/AdvancedTypeSystem.d.ts +489 -0
  402. package/dist/types/HoloScriptPlus.d.ts +810 -0
  403. package/dist/types/base.d.ts +248 -0
  404. package/dist/types.d.ts +799 -0
  405. package/dist/world/index.cjs +3 -4
  406. package/dist/world/index.js +3 -4
  407. package/dist/world-model/index.cjs +1 -1
  408. package/dist/world-model/index.js +1 -1
  409. package/dist/wot/index.cjs +1 -1
  410. package/dist/wot/index.js +1 -1
  411. package/package.json +135 -69
  412. package/dist/GLTFPipeline-3EJLL3TS.cjs +0 -38
  413. package/dist/GLTFPipeline-3OWJV2VK.js +0 -17
  414. package/dist/HoloScriptPlusParser-ADWRY5OS.cjs +0 -698
  415. package/dist/HoloScriptPlusParser-JLJDXHSC.js +0 -693
  416. package/dist/HoloScriptPlusParser-QCGFPWIL.cjs +0 -27
  417. package/dist/HoloScriptPlusParser-WENAFEFV.js +0 -10
  418. package/dist/HoloScriptRuntime-GGRVEU4T.cjs +0 -19
  419. package/dist/HoloScriptRuntime-GJK6VJPH.js +0 -10
  420. package/dist/chunk-22Q5A6RV.js +0 -979
  421. package/dist/chunk-4C57PR42.js +0 -468
  422. package/dist/chunk-4W5G5QVL.cjs +0 -847
  423. package/dist/chunk-5ET6L4NS.js +0 -487
  424. package/dist/chunk-C4GSLCHE.cjs +0 -7153
  425. package/dist/chunk-F2G6CWFT.js +0 -7089
  426. package/dist/chunk-G6PNEASF.cjs +0 -814
  427. package/dist/chunk-GTA4Q3A3.js +0 -1491
  428. package/dist/chunk-HCCQLAA4.cjs +0 -74
  429. package/dist/chunk-HFSVMKM3.cjs +0 -72
  430. package/dist/chunk-KAIVDEIG.cjs +0 -4539
  431. package/dist/chunk-KQU64CIX.cjs +0 -1508
  432. package/dist/chunk-MSYSQ2AJ.js +0 -4533
  433. package/dist/chunk-NHJLP37F.js +0 -70
  434. package/dist/chunk-NHYRRAGI.cjs +0 -490
  435. package/dist/chunk-OIQYIIO3.cjs +0 -473
  436. package/dist/chunk-OL46QLBJ.js +0 -61
  437. package/dist/chunk-SKZPC5AG.cjs +0 -984
  438. package/dist/chunk-SLHLXUMO.js +0 -445
  439. package/dist/chunk-UOIGFQXC.cjs +0 -9750
  440. package/dist/chunk-UOL6Y5TD.cjs +0 -759
  441. package/dist/chunk-UVFI7XIR.cjs +0 -452
  442. package/dist/chunk-VEPGBETF.js +0 -844
  443. package/dist/chunk-XQ5MWMP2.js +0 -756
  444. package/dist/chunk-XT6JY5W5.js +0 -9684
  445. package/dist/chunk-YRRAUB35.js +0 -811
  446. package/dist/compiler/GasOptimizationAnalyzer.d.ts +0 -73
  447. package/dist/compiler/NFTMarketplaceCompiler.d.ts +0 -23
  448. package/dist/compiler/ar.cjs +0 -23
  449. package/dist/compiler/ar.js +0 -11
  450. package/dist/compiler/babylon.cjs +0 -21
  451. package/dist/compiler/babylon.js +0 -15
  452. package/dist/compiler/multi-layer.cjs +0 -24
  453. package/dist/compiler/multi-layer.js +0 -15
  454. package/dist/compiler/playcanvas.cjs +0 -19
  455. package/dist/compiler/playcanvas.js +0 -13
  456. package/dist/compiler/r3f.cjs +0 -39
  457. package/dist/compiler/r3f.d.ts +0 -22
  458. package/dist/compiler/r3f.js +0 -17
  459. package/dist/compiler/vrr.cjs +0 -24
  460. package/dist/compiler/vrr.js +0 -12
  461. package/dist/parser/NFTMarketplaceTypes.d.ts +0 -191
  462. package/dist/playwright-3AT3AKTV.cjs +0 -98673
  463. 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