@holoscript/core 7.0.0 → 8.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +4 -4
  2. package/bin/holoscript.cjs +3 -0
  3. package/dist/GLTFPipeline-N6B6PJ6G.cjs +38 -0
  4. package/dist/GLTFPipeline-P3WMNYCN.js +17 -0
  5. package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
  6. package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
  7. package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
  8. package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
  9. package/dist/HoloScriptRuntime-CBYJX3LZ.js +10 -0
  10. package/dist/HoloScriptRuntime-VJ374RER.cjs +19 -0
  11. package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
  12. package/dist/USDZExporter-D2HQLQYK.js +1035 -0
  13. package/dist/agents/index.cjs +19 -0
  14. package/dist/agents/index.d.ts +100 -0
  15. package/dist/agents/index.js +17 -0
  16. package/dist/chunk-2BSMSUCE.js +1941 -0
  17. package/dist/chunk-2IWC4FP7.cjs +1189 -0
  18. package/dist/chunk-2M2DPHKB.js +762 -0
  19. package/dist/chunk-2X7NGX3M.js +2426 -0
  20. package/dist/chunk-2YSNA2F2.cjs +1274 -0
  21. package/dist/chunk-3FOKASKO.cjs +348 -0
  22. package/dist/chunk-3WZEJHUQ.cjs +116 -0
  23. package/dist/chunk-4C57PR42.js +468 -0
  24. package/dist/chunk-4GU5GCIY.js +1384 -0
  25. package/dist/chunk-4N4SXXWF.js +769 -0
  26. package/dist/chunk-4PDEPEQW.cjs +41 -0
  27. package/dist/chunk-4R6SBXDB.js +45 -0
  28. package/dist/chunk-4SDKXQ4C.js +811 -0
  29. package/dist/chunk-4V2E7U7Q.cjs +2015 -0
  30. package/dist/chunk-5FSKKMR7.cjs +2092 -0
  31. package/dist/chunk-5GLCTO44.js +161 -0
  32. package/dist/chunk-5H2G27PK.cjs +627 -0
  33. package/dist/chunk-5JEU52DW.js +382 -0
  34. package/dist/chunk-5NWINHR5.cjs +689 -0
  35. package/dist/chunk-5S7RKFGR.cjs +446 -0
  36. package/dist/chunk-5WUNN6ZN.cjs +428 -0
  37. package/dist/chunk-6CTRH7HT.cjs +1985 -0
  38. package/dist/chunk-6EX3I5P4.cjs +130 -0
  39. package/dist/chunk-6Q7RC2MK.cjs +1418 -0
  40. package/dist/chunk-7H33U5SM.cjs +413 -0
  41. package/dist/chunk-7M3PNU2M.cjs +672 -0
  42. package/dist/chunk-7T25IEZ2.js +449 -0
  43. package/dist/chunk-7V4JI5TB.cjs +6947 -0
  44. package/dist/chunk-A6KINLZJ.js +236 -0
  45. package/dist/chunk-ADADVMXY.js +404 -0
  46. package/dist/chunk-AIA52I7T.cjs +543 -0
  47. package/dist/chunk-ALC6K7GL.cjs +4402 -0
  48. package/dist/chunk-ANXZFVY2.js +113 -0
  49. package/dist/chunk-AOVGZ25K.cjs +56583 -0
  50. package/dist/chunk-AVJHHUC5.cjs +718 -0
  51. package/dist/chunk-BGY3SDG3.js +4396 -0
  52. package/dist/chunk-BOVPWH4H.js +3857 -0
  53. package/dist/chunk-BRQJKJGT.cjs +20 -0
  54. package/dist/chunk-C37BHB7N.cjs +636 -0
  55. package/dist/chunk-CBJY23VL.js +126 -0
  56. package/dist/chunk-CCATWPXM.js +778 -0
  57. package/dist/chunk-CIWWXYHZ.cjs +50 -0
  58. package/dist/chunk-CMT5NMMS.js +669 -0
  59. package/dist/chunk-CR4FMIWL.cjs +1049 -0
  60. package/dist/chunk-CR7XRXRN.cjs +639 -0
  61. package/dist/chunk-CSD27UNQ.js +2176 -0
  62. package/dist/chunk-D3STJ56J.js +714 -0
  63. package/dist/chunk-DAJXW4KX.js +725 -0
  64. package/dist/chunk-DHO2YRIM.js +756 -0
  65. package/dist/chunk-DTGBOSEM.cjs +319 -0
  66. package/dist/chunk-E6XXE66V.js +2252 -0
  67. package/dist/chunk-E7JP3BS3.cjs +61 -0
  68. package/dist/chunk-EKBKLK7P.js +1169 -0
  69. package/dist/chunk-EKYL4PE3.cjs +404 -0
  70. package/dist/chunk-EXKSFGSX.cjs +274 -0
  71. package/dist/chunk-EXUP2BUM.cjs +1173 -0
  72. package/dist/chunk-FDSGHPAK.js +130 -0
  73. package/dist/chunk-FEWUHQNM.cjs +144 -0
  74. package/dist/chunk-FFAOS5HQ.js +70 -0
  75. package/dist/chunk-FGGJQRLZ.js +270 -0
  76. package/dist/chunk-FHP6LXJS.js +415 -0
  77. package/dist/chunk-FJPADH77.cjs +666 -0
  78. package/dist/chunk-FL33V6U7.js +421 -0
  79. package/dist/chunk-FYSPZT4V.cjs +169 -0
  80. package/dist/chunk-GIOYPNTH.js +5575 -0
  81. package/dist/chunk-GJNCFRJU.cjs +125 -0
  82. package/dist/chunk-GMP623FG.cjs +1508 -0
  83. package/dist/chunk-GQHQOPXZ.cjs +5580 -0
  84. package/dist/chunk-GTU2Z2WW.cjs +262 -0
  85. package/dist/chunk-GYZE55MO.js +2007 -0
  86. package/dist/chunk-GZG4KA4E.js +529 -0
  87. package/dist/chunk-H652NHX5.js +600 -0
  88. package/dist/chunk-HCCQLAA4.cjs +74 -0
  89. package/dist/chunk-HKEXJUWS.cjs +4007 -0
  90. package/dist/chunk-HNDK4IQU.cjs +5737 -0
  91. package/dist/chunk-HR2OSYVQ.js +56165 -0
  92. package/dist/chunk-HYNTS5CP.js +422 -0
  93. package/dist/chunk-I6XZ5DZF.cjs +488 -0
  94. package/dist/chunk-ILRBGFVD.cjs +72 -0
  95. package/dist/chunk-IUDGEUDO.cjs +1409 -0
  96. package/dist/chunk-IUTY5WQ2.cjs +424 -0
  97. package/dist/chunk-IVY74O6C.js +247 -0
  98. package/dist/chunk-IWC5DM2M.cjs +611 -0
  99. package/dist/chunk-J32ZJZJH.js +554 -0
  100. package/dist/chunk-J52VSAQ7.js +6884 -0
  101. package/dist/chunk-J6M4FPK5.js +421 -0
  102. package/dist/chunk-J7XZV333.js +844 -0
  103. package/dist/chunk-JBNDTXXV.cjs +2433 -0
  104. package/dist/chunk-JC5YBPSF.cjs +984 -0
  105. package/dist/chunk-JD7CIZ33.js +1949 -0
  106. package/dist/chunk-JIBL5LRK.js +4287 -0
  107. package/dist/chunk-JIYN45TV.cjs +2525 -0
  108. package/dist/chunk-K574J76X.cjs +457 -0
  109. package/dist/chunk-KHDZJE5D.cjs +2196 -0
  110. package/dist/chunk-KKFZ3B6J.cjs +557 -0
  111. package/dist/chunk-KKP7JKN4.cjs +6002 -0
  112. package/dist/chunk-KPJL34Y7.cjs +186 -0
  113. package/dist/chunk-KQCN6AKJ.cjs +3042 -0
  114. package/dist/chunk-L5LKKENW.cjs +424 -0
  115. package/dist/chunk-LHAXPADA.js +882 -0
  116. package/dist/chunk-LM2VU56C.cjs +37 -0
  117. package/dist/chunk-M56JSP4A.js +400 -0
  118. package/dist/chunk-MBOOR7X4.js +18 -0
  119. package/dist/chunk-MQWAT42R.cjs +4310 -0
  120. package/dist/chunk-MXFUTKCO.js +56 -0
  121. package/dist/chunk-MYY4PMWX.cjs +264 -0
  122. package/dist/chunk-N75IH2HY.js +258 -0
  123. package/dist/chunk-NCWCUZNS.cjs +72 -0
  124. package/dist/chunk-NG77ATEW.cjs +778 -0
  125. package/dist/chunk-NW5G5FBQ.js +215 -0
  126. package/dist/chunk-OBIYPYYS.cjs +1993 -0
  127. package/dist/chunk-OH2FAIVU.js +608 -0
  128. package/dist/chunk-OIQYIIO3.cjs +473 -0
  129. package/dist/chunk-OL46QLBJ.js +61 -0
  130. package/dist/chunk-OMXII44L.js +5386 -0
  131. package/dist/chunk-OSYNRVOV.cjs +243 -0
  132. package/dist/chunk-PGANYCAG.cjs +220 -0
  133. package/dist/chunk-PHENW4MQ.js +65 -0
  134. package/dist/chunk-PY37LNDP.js +686 -0
  135. package/dist/chunk-Q56TT7IL.js +483 -0
  136. package/dist/chunk-QD32ADK6.js +1046 -0
  137. package/dist/chunk-QPOQ7VPI.js +1491 -0
  138. package/dist/chunk-QPSKHBJP.js +5963 -0
  139. package/dist/chunk-QXH7QDSZ.js +1989 -0
  140. package/dist/chunk-R24NNAEG.js +1399 -0
  141. package/dist/chunk-R75BSDH7.cjs +50 -0
  142. package/dist/chunk-RARB3MBR.js +207 -0
  143. package/dist/chunk-ROHLEP2W.cjs +847 -0
  144. package/dist/chunk-S3MDHNKB.cjs +490 -0
  145. package/dist/chunk-S6YWHCKV.cjs +410 -0
  146. package/dist/chunk-SIEXCILW.js +229 -0
  147. package/dist/chunk-SLU6UPJI.cjs +410 -0
  148. package/dist/chunk-SMIWS6DE.cjs +212 -0
  149. package/dist/chunk-T5J7ZKP3.cjs +4885 -0
  150. package/dist/chunk-TDCNJHWO.js +341 -0
  151. package/dist/chunk-TG7O4WBC.js +406 -0
  152. package/dist/chunk-THCK6ECW.js +2085 -0
  153. package/dist/chunk-TJHVSBP2.js +439 -0
  154. package/dist/chunk-TVHSPJ4N.cjs +606 -0
  155. package/dist/chunk-TWUXUCEW.cjs +781 -0
  156. package/dist/chunk-U44IKGG7.cjs +5390 -0
  157. package/dist/chunk-UFZZ7TSN.cjs +886 -0
  158. package/dist/chunk-UJXISJBN.js +487 -0
  159. package/dist/chunk-UOIGFQXC.cjs +9750 -0
  160. package/dist/chunk-URG2SJLK.js +2521 -0
  161. package/dist/chunk-UWJHCOH2.js +623 -0
  162. package/dist/chunk-V6MKC2FZ.js +979 -0
  163. package/dist/chunk-VJ3L7CHT.cjs +169 -0
  164. package/dist/chunk-VMLKSV26.js +1216 -0
  165. package/dist/chunk-VVKVQZI6.js +55 -0
  166. package/dist/chunk-W6RW64BB.cjs +1219 -0
  167. package/dist/chunk-WKX5AMOY.js +309 -0
  168. package/dist/chunk-WNNE3PO3.js +34 -0
  169. package/dist/chunk-WRKUDAZJ.js +3038 -0
  170. package/dist/chunk-WRLUBRKS.cjs +1943 -0
  171. package/dist/chunk-WRNEH5MO.js +3169 -0
  172. package/dist/chunk-WRWEX5ZF.js +658 -0
  173. package/dist/chunk-X3GJPRVK.cjs +3246 -0
  174. package/dist/chunk-X3UVCWNL.cjs +2257 -0
  175. package/dist/chunk-XB274MW5.cjs +814 -0
  176. package/dist/chunk-XHIV6326.cjs +793 -0
  177. package/dist/chunk-XIVIE43A.cjs +729 -0
  178. package/dist/chunk-XJAN7CZG.cjs +432 -0
  179. package/dist/chunk-XKTPFXGA.js +164 -0
  180. package/dist/chunk-XL6INWKT.js +121 -0
  181. package/dist/chunk-XSFNHP2E.js +632 -0
  182. package/dist/chunk-XT6JY5W5.js +9684 -0
  183. package/dist/chunk-XUILI4KB.cjs +430 -0
  184. package/dist/chunk-YF2I3MV3.js +46 -0
  185. package/dist/chunk-YIMN575O.js +4847 -0
  186. package/dist/chunk-YIVFJNYV.js +176 -0
  187. package/dist/chunk-YKGPCZEE.cjs +237 -0
  188. package/dist/chunk-YN2YWTXW.js +5731 -0
  189. package/dist/chunk-YN6V7R3L.cjs +327 -0
  190. package/dist/chunk-YQELFNJV.js +39 -0
  191. package/dist/chunk-YVD3CSO3.js +1183 -0
  192. package/dist/chunk-YVOAF4ML.js +623 -0
  193. package/dist/chunk-YWOBW2PV.cjs +759 -0
  194. package/dist/chunk-YYXH45E2.js +426 -0
  195. package/dist/chunk-ZDSYWBIE.cjs +69 -0
  196. package/dist/chunk-ZU7NIRT6.js +325 -0
  197. package/dist/chunk-ZZ7RO2UQ.js +1243 -0
  198. package/dist/cli/holoscript-runner.cjs +2255 -0
  199. package/dist/cli/holoscript-runner.js +2230 -0
  200. package/dist/codebase/index.cjs +336 -0
  201. package/dist/codebase/index.js +331 -0
  202. package/dist/compiler/agent-inference.cjs +31 -0
  203. package/dist/compiler/agent-inference.js +8 -0
  204. package/dist/compiler/android-xr.cjs +24 -0
  205. package/dist/compiler/android-xr.js +14 -0
  206. package/dist/compiler/android.cjs +24 -0
  207. package/dist/compiler/android.js +14 -0
  208. package/dist/compiler/ar.cjs +23 -0
  209. package/dist/compiler/ar.js +11 -0
  210. package/dist/compiler/babylon.cjs +21 -0
  211. package/dist/compiler/babylon.js +15 -0
  212. package/dist/compiler/business-quest.cjs +43 -0
  213. package/dist/compiler/business-quest.js +4 -0
  214. package/dist/compiler/coco.cjs +27 -0
  215. package/dist/compiler/coco.js +4 -0
  216. package/dist/compiler/context.cjs +25 -0
  217. package/dist/compiler/context.d.ts +28 -0
  218. package/dist/compiler/context.js +8 -0
  219. package/dist/compiler/domain-block-utils.cjs +609 -0
  220. package/dist/compiler/domain-block-utils.js +11 -0
  221. package/dist/compiler/dtdl.cjs +27 -0
  222. package/dist/compiler/dtdl.js +11 -0
  223. package/dist/compiler/gltf-pipeline.cjs +39 -0
  224. package/dist/compiler/gltf-pipeline.js +4 -0
  225. package/dist/compiler/godot.cjs +18 -0
  226. package/dist/compiler/godot.js +12 -0
  227. package/dist/compiler/incremental.cjs +34 -0
  228. package/dist/compiler/incremental.js +9 -0
  229. package/dist/compiler/index.cjs +5408 -0
  230. package/dist/compiler/index.d.ts +334 -21
  231. package/dist/compiler/index.js +5069 -0
  232. package/dist/compiler/ios.cjs +23 -0
  233. package/dist/compiler/ios.js +13 -0
  234. package/dist/compiler/llm-provider-capabilities.cjs +25 -0
  235. package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
  236. package/dist/compiler/llm-provider-capabilities.js +8 -0
  237. package/dist/compiler/multi-layer.cjs +24 -0
  238. package/dist/compiler/multi-layer.js +15 -0
  239. package/dist/compiler/nodetoy.cjs +23 -0
  240. package/dist/compiler/nodetoy.d.ts +69 -0
  241. package/dist/compiler/nodetoy.js +4 -0
  242. package/dist/compiler/openxr.cjs +19 -0
  243. package/dist/compiler/openxr.js +13 -0
  244. package/dist/compiler/playcanvas.cjs +19 -0
  245. package/dist/compiler/playcanvas.js +13 -0
  246. package/dist/compiler/r3f.cjs +39 -0
  247. package/dist/compiler/r3f.d.ts +22 -0
  248. package/dist/compiler/r3f.js +17 -0
  249. package/dist/compiler/remotion.cjs +23 -0
  250. package/dist/compiler/remotion.js +4 -0
  251. package/dist/compiler/reproducibility.cjs +39 -0
  252. package/dist/compiler/reproducibility.js +4 -0
  253. package/dist/compiler/sdf.cjs +24 -0
  254. package/dist/compiler/sdf.js +12 -0
  255. package/dist/compiler/semantic-scene.cjs +31 -0
  256. package/dist/compiler/semantic-scene.js +4 -0
  257. package/dist/compiler/state.cjs +21 -0
  258. package/dist/compiler/state.js +11 -0
  259. package/dist/compiler/trait-composition.cjs +30 -0
  260. package/dist/compiler/trait-composition.js +9 -0
  261. package/dist/compiler/unity.cjs +19 -0
  262. package/dist/compiler/unity.js +13 -0
  263. package/dist/compiler/unreal.cjs +23 -0
  264. package/dist/compiler/unreal.js +13 -0
  265. package/dist/compiler/urdf.cjs +52 -0
  266. package/dist/compiler/urdf.js +12 -0
  267. package/dist/compiler/usd-physics.cjs +26 -0
  268. package/dist/compiler/usd-physics.js +9 -0
  269. package/dist/compiler/visionos.cjs +19 -0
  270. package/dist/compiler/visionos.js +13 -0
  271. package/dist/compiler/vrchat.cjs +22 -0
  272. package/dist/compiler/vrchat.js +12 -0
  273. package/dist/compiler/vrr.cjs +24 -0
  274. package/dist/compiler/vrr.js +12 -0
  275. package/dist/compiler/wasm.cjs +36 -0
  276. package/dist/compiler/wasm.js +12 -0
  277. package/dist/compiler/webgpu.cjs +18 -0
  278. package/dist/compiler/webgpu.js +12 -0
  279. package/dist/coordinators/index.cjs +1266 -0
  280. package/dist/coordinators/index.d.ts +72 -1
  281. package/dist/coordinators/index.js +1259 -0
  282. package/dist/debugger.cjs +24 -0
  283. package/dist/debugger.js +11 -0
  284. package/dist/dist-ACXG6IH5.cjs +3113 -0
  285. package/dist/dist-VD4L6V7Q.js +3076 -0
  286. package/dist/entries/interop.cjs +64 -0
  287. package/dist/entries/interop.js +7 -0
  288. package/dist/entries/scripting.cjs +55 -0
  289. package/dist/entries/scripting.js +10 -0
  290. package/dist/hololand/index.cjs +146 -0
  291. package/dist/hololand/index.d.ts +70 -0
  292. package/dist/hololand/index.js +5 -0
  293. package/dist/index.cjs +44660 -0
  294. package/dist/index.d.ts +978 -21
  295. package/dist/index.js +41422 -0
  296. package/dist/math/tropical-spmv.cjs +45 -0
  297. package/dist/math/tropical-spmv.js +4 -0
  298. package/dist/math/vec3.cjs +57 -0
  299. package/dist/math/vec3.js +4 -0
  300. package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
  301. package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
  302. package/dist/paper-0c-spike/index.cjs +150 -0
  303. package/dist/paper-0c-spike/index.js +141 -0
  304. package/dist/parser.cjs +61 -0
  305. package/dist/parser.d.ts +11 -0
  306. package/dist/parser.js +12 -0
  307. package/dist/playwright-3AT3AKTV.cjs +98673 -0
  308. package/dist/playwright-VZPDVUEQ.js +98660 -0
  309. package/dist/reconstruction/index.cjs +153 -0
  310. package/dist/reconstruction/index.d.ts +29 -2
  311. package/dist/reconstruction/index.js +8 -0
  312. package/dist/runtime.cjs +316 -0
  313. package/dist/runtime.d.ts +61 -0
  314. package/dist/runtime.js +31 -0
  315. package/dist/self-improvement/index.cjs +563 -0
  316. package/dist/self-improvement/index.js +545 -0
  317. package/dist/src-4ROC227P.cjs +2094 -0
  318. package/dist/src-HCCCSYP7.js +2073 -0
  319. package/dist/storage/index.cjs +38 -0
  320. package/dist/storage/index.js +5 -0
  321. package/dist/testing.cjs +25 -0
  322. package/dist/testing.d.ts +70 -0
  323. package/dist/testing.js +4 -0
  324. package/dist/traitDocs/traitDocs.cjs +33 -0
  325. package/dist/traitDocs/traitDocs.js +7 -0
  326. package/dist/traits/botanical-lotus.cjs +177 -0
  327. package/dist/traits/botanical-lotus.d.ts +502 -0
  328. package/dist/traits/botanical-lotus.js +7 -0
  329. package/dist/traits/engines/index.cjs +520 -0
  330. package/dist/traits/engines/index.js +380 -0
  331. package/dist/traits/index.cjs +24548 -0
  332. package/dist/traits/index.d.ts +171 -35
  333. package/dist/traits/index.js +21638 -0
  334. package/dist/traits/simulation-solver-factory.cjs +13 -0
  335. package/dist/traits/simulation-solver-factory.d.ts +23 -0
  336. package/dist/traits/simulation-solver-factory.js +4 -0
  337. package/dist/traits/webcam-gaze.cjs +35 -0
  338. package/dist/traits/webcam-gaze.d.ts +17 -0
  339. package/dist/traits/webcam-gaze.js +4 -0
  340. package/dist/type-checker.cjs +19 -0
  341. package/dist/type-checker.js +6 -0
  342. package/dist/world/index.cjs +947 -0
  343. package/dist/world/index.d.ts +147 -0
  344. package/dist/world/index.js +939 -0
  345. package/dist/world-model/index.cjs +1446 -0
  346. package/dist/world-model/index.d.ts +119 -0
  347. package/dist/world-model/index.js +1414 -0
  348. package/dist/wot/index.cjs +29 -0
  349. package/dist/wot/index.js +4 -0
  350. package/package.json +93 -49
@@ -0,0 +1,243 @@
1
+ 'use strict';
2
+
3
+ // src/resilience/ResiliencePatterns.ts
4
+ var CircuitBreakerState = /* @__PURE__ */ ((CircuitBreakerState2) => {
5
+ CircuitBreakerState2["CLOSED"] = "CLOSED";
6
+ CircuitBreakerState2["OPEN"] = "OPEN";
7
+ CircuitBreakerState2["HALF_OPEN"] = "HALF_OPEN";
8
+ return CircuitBreakerState2;
9
+ })(CircuitBreakerState || {});
10
+ var CircuitBreaker = class {
11
+ constructor(config = {}) {
12
+ this.state = "CLOSED" /* CLOSED */;
13
+ this.failureCount = 0;
14
+ this.successCount = 0;
15
+ this.lastFailureTime = null;
16
+ this.failures = [];
17
+ this.config = {
18
+ failureThreshold: 5,
19
+ successThreshold: 2,
20
+ resetTimeoutMs: 6e4,
21
+ // 1 minute
22
+ windowMs: 3e4,
23
+ // 30 seconds
24
+ isRetryable: (err) => err instanceof Error,
25
+ ...config
26
+ };
27
+ }
28
+ /**
29
+ * Execute function with circuit breaker protection
30
+ */
31
+ async execute(fn) {
32
+ if (this.state === "OPEN" /* OPEN */) {
33
+ if (Date.now() - (this.lastFailureTime || 0) > this.config.resetTimeoutMs) {
34
+ this.state = "HALF_OPEN" /* HALF_OPEN */;
35
+ this.successCount = 0;
36
+ } else {
37
+ throw new Error(`Circuit breaker is OPEN. Retry after ${this.config.resetTimeoutMs}ms`);
38
+ }
39
+ }
40
+ try {
41
+ const result = await fn();
42
+ this.onSuccess();
43
+ return result;
44
+ } catch (error) {
45
+ this.onFailure(error);
46
+ throw error;
47
+ }
48
+ }
49
+ onSuccess() {
50
+ this.failureCount = 0;
51
+ this.failures = this.failures.filter((f) => Date.now() - f.timestamp < this.config.windowMs);
52
+ if (this.state === "HALF_OPEN" /* HALF_OPEN */) {
53
+ this.successCount++;
54
+ if (this.successCount >= this.config.successThreshold) {
55
+ this.state = "CLOSED" /* CLOSED */;
56
+ }
57
+ }
58
+ }
59
+ onFailure(error) {
60
+ this.lastFailureTime = Date.now();
61
+ this.failureCount++;
62
+ this.failures.push({ timestamp: Date.now(), error });
63
+ this.failures = this.failures.filter((f) => Date.now() - f.timestamp < this.config.windowMs);
64
+ if (this.state === "HALF_OPEN" /* HALF_OPEN */) {
65
+ this.state = "OPEN" /* OPEN */;
66
+ } else if (this.failureCount >= this.config.failureThreshold) {
67
+ this.state = "OPEN" /* OPEN */;
68
+ console.error(`Circuit breaker OPEN after ${this.failureCount} failures: ${error.message}`);
69
+ }
70
+ }
71
+ get currentState() {
72
+ return this.state;
73
+ }
74
+ /**
75
+ * Get current circuit breaker state (accessor method)
76
+ */
77
+ getState() {
78
+ if (this.state === "OPEN" /* OPEN */ && Date.now() - (this.lastFailureTime || 0) > this.config.resetTimeoutMs) {
79
+ return "HALF_OPEN" /* HALF_OPEN */;
80
+ }
81
+ return this.state;
82
+ }
83
+ /**
84
+ * Get circuit breaker metrics
85
+ */
86
+ getMetrics() {
87
+ return {
88
+ state: this.state,
89
+ totalFailures: this.failureCount,
90
+ totalSuccesses: this.successCount,
91
+ lastFailureTime: this.lastFailureTime,
92
+ totalRequests: this.failureCount + this.successCount
93
+ };
94
+ }
95
+ };
96
+ async function retryWithBackoff(fn, config = {}) {
97
+ const cfg = {
98
+ maxAttempts: 3,
99
+ initialBackoffMs: 100,
100
+ maxBackoffMs: 1e4,
101
+ multiplier: 2,
102
+ jitter: true,
103
+ isRetryable: (err, attempt) => attempt < cfg.maxAttempts,
104
+ ...config
105
+ };
106
+ let lastError = null;
107
+ for (let attempt = 1; attempt <= cfg.maxAttempts; attempt++) {
108
+ try {
109
+ return await fn();
110
+ } catch (error) {
111
+ lastError = error;
112
+ if (!cfg.isRetryable(lastError, attempt)) {
113
+ throw lastError;
114
+ }
115
+ if (attempt < cfg.maxAttempts) {
116
+ const backoff = Math.min(
117
+ cfg.initialBackoffMs * Math.pow(cfg.multiplier, attempt - 1),
118
+ cfg.maxBackoffMs
119
+ );
120
+ const jitteredBackoff = cfg.jitter ? backoff * (0.5 + Math.random() * 0.5) : backoff;
121
+ console.warn(
122
+ `Attempt ${attempt} failed: ${lastError.message}. Retrying in ${Math.round(jitteredBackoff)}ms`
123
+ );
124
+ await sleep(jitteredBackoff);
125
+ }
126
+ }
127
+ }
128
+ throw lastError || new Error("Max retry attempts exceeded");
129
+ }
130
+ var Bulkhead = class {
131
+ constructor(config = {}) {
132
+ this.running = 0;
133
+ this.queue = [];
134
+ this.config = {
135
+ maxConcurrent: 10,
136
+ queueSize: 100,
137
+ timeoutMs: 3e4,
138
+ ...config
139
+ };
140
+ }
141
+ /**
142
+ * Execute function within bulkhead
143
+ */
144
+ async execute(fn) {
145
+ if (this.queue.length >= this.config.queueSize) {
146
+ throw new Error("Bulkhead queue full - too many pending operations");
147
+ }
148
+ return new Promise((resolve, reject) => {
149
+ const timeoutId = setTimeout(() => {
150
+ const idx = this.queue.findIndex((item) => item.resolve === resolve);
151
+ if (idx !== -1) {
152
+ this.queue.splice(idx, 1);
153
+ }
154
+ reject(new Error("Bulkhead operation timeout"));
155
+ }, this.config.timeoutMs);
156
+ this.queue.push({
157
+ fn,
158
+ // @ts-expect-error
159
+ resolve,
160
+ reject,
161
+ timeoutId
162
+ });
163
+ this.processQueue();
164
+ });
165
+ }
166
+ processQueue() {
167
+ while (this.running < this.config.maxConcurrent && this.queue.length > 0) {
168
+ const item = this.queue.shift();
169
+ if (!item) break;
170
+ this.running++;
171
+ item.fn().then((result) => {
172
+ clearTimeout(item.timeoutId);
173
+ item.resolve(result);
174
+ }).catch((error) => {
175
+ clearTimeout(item.timeoutId);
176
+ item.reject(error);
177
+ }).finally(() => {
178
+ this.running--;
179
+ this.processQueue();
180
+ });
181
+ }
182
+ }
183
+ get stats() {
184
+ return {
185
+ running: this.running,
186
+ queued: this.queue.length
187
+ };
188
+ }
189
+ /**
190
+ * Get bulkhead state (accessor method)
191
+ */
192
+ getState() {
193
+ return {
194
+ running: this.running,
195
+ queued: this.queue.length,
196
+ maxConcurrent: this.config.maxConcurrent
197
+ };
198
+ }
199
+ /**
200
+ * Get bulkhead metrics
201
+ */
202
+ getMetrics() {
203
+ return {
204
+ running: this.running,
205
+ queued: this.queue.length,
206
+ utilizationPercent: this.running / this.config.maxConcurrent * 100,
207
+ queueUtilizationPercent: this.queue.length / this.config.queueSize * 100
208
+ };
209
+ }
210
+ };
211
+ async function fallbackChain(strategies) {
212
+ let lastError = null;
213
+ for (let i = 0; i < strategies.length; i++) {
214
+ try {
215
+ const result = await strategies[i]();
216
+ return result;
217
+ } catch (error) {
218
+ lastError = error;
219
+ console.warn(`Strategy ${i + 1} failed: ${lastError.message}`);
220
+ }
221
+ }
222
+ throw lastError || new Error("All fallback strategies failed");
223
+ }
224
+ function sleep(ms) {
225
+ return new Promise((resolve) => setTimeout(resolve, ms));
226
+ }
227
+ async function withTimeout(promise, timeoutMs) {
228
+ return Promise.race([
229
+ promise,
230
+ new Promise(
231
+ (_, reject) => setTimeout(() => reject(new Error(`Operation timeout after ${timeoutMs}ms`)), timeoutMs)
232
+ )
233
+ ]);
234
+ }
235
+
236
+ exports.Bulkhead = Bulkhead;
237
+ exports.CircuitBreaker = CircuitBreaker;
238
+ exports.CircuitBreakerState = CircuitBreakerState;
239
+ exports.fallbackChain = fallbackChain;
240
+ exports.retryWithBackoff = retryWithBackoff;
241
+ exports.withTimeout = withTimeout;
242
+ //# sourceMappingURL=chunk-OSYNRVOV.cjs.map
243
+ //# sourceMappingURL=chunk-OSYNRVOV.cjs.map
@@ -0,0 +1,220 @@
1
+ 'use strict';
2
+
3
+ // src/testing/DeterminismHarness.ts
4
+ function getGlobal() {
5
+ return globalThis ?? {};
6
+ }
7
+ function detectRuntime() {
8
+ const g = getGlobal();
9
+ if (typeof g.window !== "undefined" && typeof g.document !== "undefined") {
10
+ return "browser";
11
+ }
12
+ if (typeof g.process !== "undefined" && g.process.versions?.node) {
13
+ return "node";
14
+ }
15
+ return "unknown";
16
+ }
17
+ function detectBrowserFromUserAgent(ua) {
18
+ if (!ua) return {};
19
+ let browser;
20
+ let os;
21
+ if (/Firefox\//.test(ua)) browser = "firefox";
22
+ else if (/Edg\//.test(ua)) browser = "edge";
23
+ else if (/Chrome\//.test(ua)) browser = "chromium";
24
+ else if (/Safari\//.test(ua)) browser = "safari";
25
+ if (/Windows NT/.test(ua)) os = "windows";
26
+ else if (/Mac OS X/.test(ua)) os = "macos";
27
+ else if (/Linux/.test(ua)) os = "linux";
28
+ else if (/Android/.test(ua)) os = "android";
29
+ else if (/iPhone|iPad/.test(ua)) os = "ios";
30
+ return { browser, os };
31
+ }
32
+ async function captureEnvironment(annotations = {}) {
33
+ const runtime = detectRuntime();
34
+ const g = getGlobal();
35
+ const info = { runtime };
36
+ if (Object.keys(annotations).length > 0) info.annotations = { ...annotations };
37
+ if (runtime === "browser") {
38
+ const nav = g.navigator;
39
+ const ua = nav?.userAgent;
40
+ info.browser = { userAgent: ua, ...detectBrowserFromUserAgent(ua) };
41
+ if (nav?.gpu?.requestAdapter) {
42
+ try {
43
+ const adapter = await nav.gpu.requestAdapter();
44
+ let gpuInfo = adapter?.info;
45
+ if (!gpuInfo && adapter?.requestAdapterInfo) {
46
+ gpuInfo = await adapter.requestAdapterInfo();
47
+ }
48
+ if (gpuInfo) {
49
+ info.gpu = {
50
+ vendor: gpuInfo.vendor,
51
+ architecture: gpuInfo.architecture,
52
+ device: gpuInfo.device,
53
+ description: gpuInfo.description,
54
+ backend: "webgpu"
55
+ };
56
+ }
57
+ } catch {
58
+ }
59
+ }
60
+ } else if (runtime === "node") {
61
+ const proc = g.process;
62
+ if (proc) {
63
+ info.node = {
64
+ version: proc.versions?.node ?? "unknown",
65
+ arch: proc.arch ?? "unknown",
66
+ platform: proc.platform ?? "unknown"
67
+ };
68
+ }
69
+ }
70
+ return info;
71
+ }
72
+ function toUint8Array(input) {
73
+ if (input instanceof Uint8Array) return input;
74
+ if (typeof TextEncoder !== "undefined") {
75
+ return new TextEncoder().encode(input);
76
+ }
77
+ const bytes = new Uint8Array(input.length);
78
+ for (let i = 0; i < input.length; i++) bytes[i] = input.charCodeAt(i) & 255;
79
+ return bytes;
80
+ }
81
+ function fnv1a64Hex(bytes) {
82
+ let hash = 0xcbf29ce484222325n;
83
+ const prime = 0x100000001b3n;
84
+ const mask = 0xffffffffffffffffn;
85
+ for (let i = 0; i < bytes.length; i++) {
86
+ hash = (hash ^ BigInt(bytes[i])) & mask;
87
+ hash = hash * prime & mask;
88
+ }
89
+ return hash.toString(16).padStart(16, "0");
90
+ }
91
+ async function hashBytes(input, algo = "sha256") {
92
+ const bytes = toUint8Array(input);
93
+ if (algo === "sha256") {
94
+ const g = getGlobal();
95
+ const subtle = g.crypto?.subtle;
96
+ if (subtle && typeof subtle.digest === "function") {
97
+ try {
98
+ const digest = await subtle.digest("SHA-256", bytes);
99
+ const view = new Uint8Array(digest);
100
+ let hex = "";
101
+ for (let i = 0; i < view.length; i++) hex += view[i].toString(16).padStart(2, "0");
102
+ return `sha256:${hex}`;
103
+ } catch {
104
+ }
105
+ }
106
+ }
107
+ return `fnv1a-64:${fnv1a64Hex(bytes)}`;
108
+ }
109
+ var DeterminismHarness = class {
110
+ constructor(options = {}) {
111
+ this.options = {
112
+ captureOutput: options.captureOutput ?? false,
113
+ hashAlgorithm: options.hashAlgorithm ?? "sha256",
114
+ annotations: options.annotations ?? {}
115
+ };
116
+ }
117
+ /**
118
+ * Run a probe function, capture environment, hash the output,
119
+ * return a structured ProbeResult. Never throws — errors are
120
+ * caught and reported on the result's `error` field with a
121
+ * sentinel outputHash of `error:<message>`.
122
+ */
123
+ async probe(name, fn, annotations = {}) {
124
+ const timestamp = Date.now();
125
+ const mergedAnnotations = { ...this.options.annotations, ...annotations };
126
+ const environment = await captureEnvironment(mergedAnnotations);
127
+ const started = typeof performance !== "undefined" ? performance.now() : timestamp;
128
+ let output;
129
+ let error;
130
+ try {
131
+ output = await fn();
132
+ } catch (err) {
133
+ error = err instanceof Error ? err.message : String(err);
134
+ }
135
+ const ended = typeof performance !== "undefined" ? performance.now() : Date.now();
136
+ const durationMs = Math.max(0, ended - started);
137
+ if (error !== void 0 || output === void 0) {
138
+ return {
139
+ name,
140
+ timestamp,
141
+ environment,
142
+ durationMs,
143
+ outputHash: `error:${error ?? "no-output"}`,
144
+ outputSize: 0,
145
+ error
146
+ };
147
+ }
148
+ const outputHash = await hashBytes(output, this.options.hashAlgorithm);
149
+ const outputSize = output instanceof Uint8Array ? output.byteLength : toUint8Array(output).byteLength;
150
+ const result = {
151
+ name,
152
+ timestamp,
153
+ environment,
154
+ durationMs,
155
+ outputHash,
156
+ outputSize
157
+ };
158
+ if (this.options.captureOutput) result.output = output;
159
+ return result;
160
+ }
161
+ /**
162
+ * Compare a collection of probe results and report whether they
163
+ * agree. Groups results by hash so the caller can see which
164
+ * environments produced which outputs.
165
+ */
166
+ static compareResults(results) {
167
+ if (results.length === 0) {
168
+ return {
169
+ probeName: "(empty)",
170
+ totalResults: 0,
171
+ uniqueHashes: 0,
172
+ divergent: false,
173
+ groups: [],
174
+ summary: "No results supplied to compare."
175
+ };
176
+ }
177
+ const probeName = results[0].name;
178
+ const byHash = /* @__PURE__ */ new Map();
179
+ for (const r of results) {
180
+ const existing = byHash.get(r.outputHash);
181
+ if (existing) existing.push(r);
182
+ else byHash.set(r.outputHash, [r]);
183
+ }
184
+ const groups = Array.from(byHash.entries()).map(([hash, rs]) => ({
185
+ hash,
186
+ results: rs,
187
+ environments: rs.map((r) => describeEnvironment(r.environment))
188
+ }));
189
+ const divergent = groups.length > 1;
190
+ const summary = divergent ? `DIVERGENT: ${groups.length} distinct hashes across ${results.length} runs of "${probeName}".` : `CONVERGENT: all ${results.length} runs of "${probeName}" produced hash ${groups[0].hash}.`;
191
+ return {
192
+ probeName,
193
+ totalResults: results.length,
194
+ uniqueHashes: groups.length,
195
+ divergent,
196
+ groups,
197
+ summary
198
+ };
199
+ }
200
+ };
201
+ function describeEnvironment(env) {
202
+ const parts = [env.runtime];
203
+ if (env.browser?.browser) parts.push(env.browser.browser);
204
+ if (env.browser?.os) parts.push(env.browser.os);
205
+ if (env.node) parts.push(`node ${env.node.version} ${env.node.platform}/${env.node.arch}`);
206
+ if (env.gpu?.vendor) parts.push(`gpu:${env.gpu.vendor}${env.gpu.architecture ? "/" + env.gpu.architecture : ""}`);
207
+ if (env.annotations) {
208
+ for (const [k, v] of Object.entries(env.annotations)) {
209
+ parts.push(`${k}=${v}`);
210
+ }
211
+ }
212
+ return parts.join(" | ");
213
+ }
214
+
215
+ exports.DeterminismHarness = DeterminismHarness;
216
+ exports.captureEnvironment = captureEnvironment;
217
+ exports.describeEnvironment = describeEnvironment;
218
+ exports.hashBytes = hashBytes;
219
+ //# sourceMappingURL=chunk-PGANYCAG.cjs.map
220
+ //# sourceMappingURL=chunk-PGANYCAG.cjs.map
@@ -0,0 +1,65 @@
1
+ // src/logger.ts
2
+ var NoOpLogger = class {
3
+ /**
4
+ * Debug-level logging (no-op implementation).
5
+ * @param message - Debug message to discard
6
+ * @param meta - Optional metadata to discard
7
+ */
8
+ debug(message, meta) {
9
+ }
10
+ /**
11
+ * Info-level logging (no-op implementation).
12
+ * @param message - Info message to discard
13
+ * @param meta - Optional metadata to discard
14
+ */
15
+ info(message, meta) {
16
+ }
17
+ /**
18
+ * Warning-level logging (no-op implementation).
19
+ * @param message - Warning message to discard
20
+ * @param meta - Optional metadata to discard
21
+ */
22
+ warn(message, meta) {
23
+ }
24
+ /**
25
+ * Error-level logging (no-op implementation).
26
+ * @param message - Error message to discard
27
+ * @param meta - Optional metadata to discard
28
+ */
29
+ error(message, meta) {
30
+ }
31
+ };
32
+ var ConsoleLogger = class {
33
+ debug(message, meta) {
34
+ console.debug(`[HoloScript:DEBUG] ${message}`, meta ?? "");
35
+ }
36
+ info(message, meta) {
37
+ console.info(`[HoloScript:INFO] ${message}`, meta ?? "");
38
+ }
39
+ warn(message, meta) {
40
+ console.warn(`[HoloScript:WARN] ${message}`, meta ?? "");
41
+ }
42
+ error(message, meta) {
43
+ console.error(`[HoloScript:ERROR] ${message}`, meta ?? "");
44
+ }
45
+ };
46
+ var currentLogger = new NoOpLogger();
47
+ function setHoloScriptLogger(logger2) {
48
+ currentLogger = logger2;
49
+ }
50
+ function enableConsoleLogging() {
51
+ currentLogger = new ConsoleLogger();
52
+ }
53
+ function resetLogger() {
54
+ currentLogger = new NoOpLogger();
55
+ }
56
+ var logger = {
57
+ debug: (msg, meta) => currentLogger.debug(msg, meta),
58
+ info: (msg, meta) => currentLogger.info(msg, meta),
59
+ warn: (msg, meta) => currentLogger.warn(msg, meta),
60
+ error: (msg, meta) => currentLogger.error(msg, meta)
61
+ };
62
+
63
+ export { ConsoleLogger, NoOpLogger, enableConsoleLogging, logger, resetLogger, setHoloScriptLogger };
64
+ //# sourceMappingURL=chunk-PHENW4MQ.js.map
65
+ //# sourceMappingURL=chunk-PHENW4MQ.js.map