@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.
- package/LICENSE +21 -0
- package/bin/holoscript.cjs +5 -1
- package/dist/GLTFPipeline-L76YTXKA.js +15 -0
- package/dist/GLTFPipeline-ZWJN7GI6.cjs +36 -0
- package/dist/HoloCompositionParser-K76KTEEE.js +12 -0
- package/dist/HoloCompositionParser-UZH6Y4HO.cjs +45 -0
- package/dist/HoloScriptCodeParser-2D4ERFUZ.js +6 -0
- package/dist/HoloScriptCodeParser-UDRLDA7I.cjs +23 -0
- package/dist/HoloScriptPlusParser-FTMCGWXD.js +13 -0
- package/dist/HoloScriptPlusParser-LQR5GIKF.cjs +30 -0
- package/dist/HoloScriptRuntime-UTRLJI5L.js +12 -0
- package/dist/HoloScriptRuntime-YBYXJHJN.cjs +21 -0
- package/dist/SceneIRCompiler-63KA3M2F.js +17 -0
- package/dist/SceneIRCompiler-KWUFHZ4O.cjs +42 -0
- package/dist/{USDZExporter-AUHZODOF.cjs → USDZExporter-ML4UMIGC.cjs} +3 -3
- package/dist/{USDZExporter-GXB4AUSG.js → USDZExporter-ZFKLQ76G.js} +3 -3
- package/dist/agents/index.cjs +1 -1
- package/dist/agents/index.js +1 -1
- package/dist/audit/AuditLogger.d.ts +106 -0
- package/dist/audit/AuditQueryBuilder.d.ts +79 -0
- package/dist/audit/ComplianceReporter.d.ts +90 -0
- package/dist/audit/index.d.ts +13 -0
- package/dist/{chunk-FGMDMJM7.js → chunk-2BYAUHBO.js} +3 -3
- package/dist/{chunk-EDPYCLRC.cjs → chunk-2E6PP5UE.cjs} +83 -59
- package/dist/{chunk-GASCWJK5.js → chunk-2EGGAZT3.js} +65 -287
- package/dist/{chunk-SIEXCILW.js → chunk-2I3XAGMF.js} +3 -3
- package/dist/{chunk-OS533P33.cjs → chunk-2KKOYZYI.cjs} +1074 -1655
- package/dist/chunk-2MQKNDNH.js +51 -0
- package/dist/{chunk-7DMMMBCY.cjs → chunk-2X3IPCBK.cjs} +10 -10
- package/dist/chunk-2ZOTBO25.cjs +202 -0
- package/dist/chunk-356N4NPM.cjs +152 -0
- package/dist/{chunk-X3GJPRVK.cjs → chunk-36NPLOI4.cjs} +92 -81
- package/dist/{chunk-SLU6UPJI.cjs → chunk-37HHY7RH.cjs} +5 -5
- package/dist/{chunk-YDPEHCCI.cjs → chunk-3CDDRUER.cjs} +3 -118
- package/dist/chunk-3F7ZZWIN.js +1651 -0
- package/dist/chunk-3ILD7TKP.cjs +187 -0
- package/dist/{chunk-X27QRG4C.cjs → chunk-3IUHTGDD.cjs} +153 -41
- package/dist/{chunk-PXNZ6TME.js → chunk-4376VHNJ.js} +60 -36
- package/dist/{chunk-YKGPCZEE.cjs → chunk-4FIBOJW6.cjs} +10 -10
- package/dist/chunk-4Q7RKQQI.cjs +14195 -0
- package/dist/{chunk-YCM6QQRT.cjs → chunk-566ZB4LZ.cjs} +180 -8
- package/dist/{chunk-2Y3V22SG.js → chunk-5CURIYGT.js} +3 -3
- package/dist/{chunk-QBWNJXNR.js → chunk-5FYMCVBY.js} +5 -5
- package/dist/{chunk-ZA34AN3R.js → chunk-5LVFTGKH.js} +841 -12
- package/dist/{chunk-Z6PMDS4G.js → chunk-5OUOMBKK.js} +1090 -53
- package/dist/chunk-63AUAIL6.js +48 -0
- package/dist/chunk-655FATJU.js +110 -0
- package/dist/{chunk-TQ377OLB.cjs → chunk-65S62L4D.cjs} +28 -22
- package/dist/chunk-6NTAZN5Z.cjs +502 -0
- package/dist/chunk-6TRX6AR2.js +9376 -0
- package/dist/chunk-6ZCCLKS2.cjs +51 -0
- package/dist/{chunk-MDR235RZ.js → chunk-734OB5SK.js} +721 -8
- package/dist/{chunk-Q2Q34NF3.js → chunk-77QI552M.js} +6 -6
- package/dist/{chunk-WKX5AMOY.js → chunk-7I74JWPW.js} +3 -3
- package/dist/{chunk-5FSKKMR7.cjs → chunk-7IDJDMPU.cjs} +232 -4
- package/dist/chunk-7VBKRGIZ.cjs +847 -0
- package/dist/{chunk-KCPHASCO.js → chunk-AATYYLYK.js} +5 -5
- package/dist/{chunk-DTGBOSEM.cjs → chunk-AWXFEAQL.cjs} +12 -12
- package/dist/{chunk-THCK6ECW.js → chunk-B3CWTCK2.js} +231 -3
- package/dist/chunk-BCP4E7MD.cjs +997 -0
- package/dist/chunk-BG7RPYJP.js +91 -0
- package/dist/{chunk-VF257YKO.js → chunk-BP4KTMLY.js} +117 -5
- package/dist/{chunk-YN6IETRZ.js → chunk-BQJ3YBF3.js} +6424 -987
- package/dist/{chunk-7X5PNIQJ.js → chunk-BXSOEQI3.js} +27 -25
- package/dist/{chunk-WFKVS2K4.cjs → chunk-C65C5VED.cjs} +1101 -55
- package/dist/{chunk-KOUAQL2B.cjs → chunk-CANAL6CT.cjs} +1569 -168
- package/dist/{chunk-FDSGHPAK.js → chunk-CBSDJF3B.js} +3 -3
- package/dist/{chunk-FEWUHQNM.cjs → chunk-CFVK26P4.cjs} +4 -4
- package/dist/{chunk-M7K4LE66.cjs → chunk-CI33NINL.cjs} +4 -4
- package/dist/{chunk-2OWDB4FB.js → chunk-CKV5NYAE.js} +6 -6
- package/dist/{chunk-LPS5AMQD.cjs → chunk-CM4NHXVO.cjs} +24 -24
- package/dist/chunk-D3HSRXYB.js +115 -0
- package/dist/{chunk-FNHJRI32.js → chunk-DBH3D2MU.js} +1561 -160
- package/dist/{chunk-GW3LKD5C.js → chunk-DJNH4HFW.js} +3 -3
- package/dist/{chunk-2GCNOI2U.cjs → chunk-DN6F4DHH.cjs} +9 -3
- package/dist/chunk-DQRJ5RJG.js +432 -0
- package/dist/{chunk-C7ZBSV2Q.js → chunk-DUG3OQAS.js} +106 -43
- package/dist/chunk-ECUYJOJ2.cjs +199 -0
- package/dist/chunk-EEMTCAK7.js +182 -0
- package/dist/{chunk-3SKLAUDD.cjs → chunk-EI3J6LTW.cjs} +359 -581
- package/dist/{chunk-SSSN7VAM.js → chunk-EM2OGPYE.js} +4 -4
- package/dist/{chunk-56VOWURB.cjs → chunk-ENZCIQZC.cjs} +522 -453
- package/dist/chunk-ESBXUYOC.cjs +836 -0
- package/dist/{chunk-L5U4W6JC.js → chunk-ESSEF6U2.js} +4 -4
- package/dist/chunk-ET3AN4W3.js +824 -0
- package/dist/chunk-EXKSFGSX.cjs +14 -14
- package/dist/{chunk-I76GIKN7.cjs → chunk-F3YT6GUF.cjs} +17 -17
- package/dist/{chunk-WRWEX5ZF.js → chunk-F75DZBBI.js} +3 -3
- package/dist/{chunk-4JGRWHZJ.js → chunk-FG6PYGIZ.js} +12 -6
- package/dist/chunk-FGGJQRLZ.js +14 -14
- package/dist/{chunk-SXOSDZD6.js → chunk-FWCHPCD4.js} +128 -10
- package/dist/{chunk-XW6IXEQH.cjs → chunk-G35CAQ7I.cjs} +5 -5
- package/dist/{chunk-7VMGP2FW.js → chunk-G6KACNMO.js} +132 -188
- package/dist/{chunk-FJPADH77.cjs → chunk-GAWJJAGT.cjs} +6 -6
- package/dist/chunk-GGR7QUKK.cjs +4724 -0
- package/dist/chunk-GIBF4BHH.js +14098 -0
- package/dist/{chunk-AWB7QYY6.cjs → chunk-GILYQ5VH.cjs} +6 -6
- package/dist/{chunk-FWVYAMNW.cjs → chunk-GKFCHGCM.cjs} +4 -4
- package/dist/{chunk-Y3ZFVUUU.js → chunk-GLEJ2TLS.js} +3 -3
- package/dist/{chunk-3GWWJT7L.js → chunk-GP3OKSKT.js} +13 -13
- package/dist/chunk-GTIPOEHN.js +196 -0
- package/dist/{chunk-LMJ5EBV7.cjs → chunk-GZPUA2TL.cjs} +16 -15
- package/dist/{chunk-IELX2OKI.js → chunk-H4LJ4HEA.js} +3 -115
- package/dist/{chunk-ACVWFGBI.cjs → chunk-HCX4SMFK.cjs} +3 -3
- package/dist/{chunk-HYNTS5CP.js → chunk-HHRZ6STP.js} +24 -2
- package/dist/chunk-HIDEIEFG.js +48 -0
- package/dist/{chunk-W6RW64BB.cjs → chunk-HSWBIDZM.cjs} +228 -5
- package/dist/{chunk-GSOUNWEL.js → chunk-HVX7QQYK.js} +1035 -1616
- package/dist/{chunk-TRCGG42I.cjs → chunk-IFW5IW4L.cjs} +6502 -1019
- package/dist/{chunk-F5LKJ6F5.cjs → chunk-IJU6AS67.cjs} +32 -28
- package/dist/{chunk-TVANHNJ7.js → chunk-IK6Z2HNC.js} +173 -3
- package/dist/{chunk-QGMUTVVH.cjs → chunk-IS7NTKY5.cjs} +20 -20
- package/dist/{chunk-YFVQWSNJ.js → chunk-IXWGYWH6.js} +3 -3
- package/dist/chunk-J2DAS2PL.js +148 -0
- package/dist/chunk-JBQXZIWB.js +148 -0
- package/dist/chunk-JBYBMBMW.js +261 -0
- package/dist/{chunk-LWUOUCYL.js → chunk-JEJ7TT54.js} +5 -5
- package/dist/{chunk-DUCB6LGL.js → chunk-JOTCTHN5.js} +211 -5
- package/dist/{chunk-47RUFYKR.js → chunk-K56UVEXV.js} +3 -3
- package/dist/{chunk-XSFNHP2E.js → chunk-KB26H447.js} +3 -3
- package/dist/{chunk-3NGDZZR4.js → chunk-KEYG7HGY.js} +430 -37
- package/dist/{chunk-DY72BMU5.js → chunk-KFVNCW4Q.js} +4 -4
- package/dist/chunk-KPGC7SK2.js +192 -0
- package/dist/chunk-KROXXBK5.cjs +53 -0
- package/dist/{chunk-ZPZAVHXL.cjs → chunk-LB3ZZMKT.cjs} +137 -19
- package/dist/chunk-LDYZWNJW.cjs +1654 -0
- package/dist/{chunk-UGXHYIWT.cjs → chunk-LHNHO27U.cjs} +28 -28
- package/dist/{chunk-ULMSSHCJ.cjs → chunk-LMB555QB.cjs} +405 -38
- package/dist/{chunk-CBJY23VL.js → chunk-MD4IVS42.js} +3 -3
- package/dist/{chunk-VMLKSV26.js → chunk-MDDWEBCX.js} +226 -3
- package/dist/chunk-MUWH4QK5.cjs +94 -0
- package/dist/{chunk-T6W3Z3SH.cjs → chunk-N2ILK7BF.cjs} +4 -4
- package/dist/{chunk-6EX3I5P4.cjs → chunk-N74QRJGP.cjs} +6 -6
- package/dist/chunk-NFFHLX37.cjs +132 -0
- package/dist/chunk-NJSYWX7H.js +190 -0
- package/dist/{chunk-SH5PPVK7.cjs → chunk-NQN5LFN4.cjs} +165 -221
- package/dist/chunk-NTQRFOPP.cjs +56 -0
- package/dist/{chunk-YFWRJW4B.js → chunk-NWMJPTVL.js} +51 -55
- package/dist/{chunk-63ZGNR2T.cjs → chunk-OC6GV5QH.cjs} +42 -42
- package/dist/{chunk-7E7GCQCK.js → chunk-OG3MBHM3.js} +9 -3
- package/dist/chunk-OMNHTCS4.cjs +264 -0
- package/dist/chunk-OQXB6NNC.cjs +117 -0
- package/dist/{chunk-Y57W2CT5.cjs → chunk-OV46CCA2.cjs} +51 -55
- package/dist/{chunk-6PRZIHGL.cjs → chunk-OV6HHKLE.cjs} +21 -266
- package/dist/{chunk-C37BHB7N.cjs → chunk-P26YYPOO.cjs} +5 -5
- package/dist/{chunk-2BZHWUSR.cjs → chunk-P7JEKJTZ.cjs} +16 -16
- package/dist/{chunk-NGBXXZLL.cjs → chunk-PDXX5UI4.cjs} +45 -45
- package/dist/{chunk-FHQFPYV4.js → chunk-PJFTTSKE.js} +8 -7
- package/dist/{chunk-GVFJ6T4S.cjs → chunk-PVODJEJ7.cjs} +721 -8
- package/dist/{chunk-ZZ7RO2UQ.js → chunk-Q265VZJ4.js} +3 -3
- package/dist/{chunk-E7JP3BS3.cjs → chunk-Q47JEE2C.cjs} +4 -4
- package/dist/chunk-QBY7LRN2.js +281 -0
- package/dist/{chunk-GH6C2QGW.cjs → chunk-QEDMOGF3.cjs} +857 -16
- package/dist/{chunk-5WUNN6ZN.cjs → chunk-QHSAVOOL.cjs} +24 -2
- package/dist/chunk-QJNCDVYM.cjs +137 -0
- package/dist/chunk-QM7FJB5W.js +4717 -0
- package/dist/chunk-QQFB4RT2.cjs +448 -0
- package/dist/chunk-QSYBHQAD.cjs +196 -0
- package/dist/{chunk-2YSNA2F2.cjs → chunk-QVJMDVYZ.cjs} +5 -5
- package/dist/chunk-RAJMAX6D.js +131 -0
- package/dist/{chunk-VVKVQZI6.js → chunk-RAN3ECAS.js} +3 -3
- package/dist/chunk-RKGUZBOC.js +79 -0
- package/dist/{chunk-HLFDZ35S.cjs → chunk-RRQIAJLQ.cjs} +8 -8
- package/dist/{chunk-PABONWKI.js → chunk-RXQNRZ5F.js} +3 -3
- package/dist/{chunk-7ZHYEITD.cjs → chunk-S4O7CFHQ.cjs} +10 -11
- package/dist/chunk-SE7ANBGN.js +128 -0
- package/dist/{chunk-X2AVEAZM.cjs → chunk-SJIRCTIS.cjs} +176 -2
- package/dist/{chunk-WXQ57LAO.js → chunk-SQXAZHDG.js} +4 -4
- package/dist/chunk-SR73L5ZP.cjs +84 -0
- package/dist/{chunk-OABEO6HH.js → chunk-SZOLTWWD.js} +2349 -214
- package/dist/{chunk-5JEU52DW.js → chunk-TPZ3BN2D.js} +3 -3
- package/dist/{chunk-QFU53KRH.js → chunk-TSTFYGGX.js} +4 -5
- package/dist/{chunk-EBS32AJI.cjs → chunk-TZCFKZ6Z.cjs} +5 -5
- package/dist/chunk-UCVZXQ63.js +724 -0
- package/dist/chunk-UGQ3QNV6.js +992 -0
- package/dist/chunk-UNMVGZVW.js +142 -0
- package/dist/{chunk-TEVX443G.js → chunk-UTUD6GJI.js} +178 -6
- package/dist/chunk-UXBYA7DV.cjs +155 -0
- package/dist/chunk-V6GXFSK7.cjs +443 -0
- package/dist/chunk-VHORVGCG.cjs +761 -0
- package/dist/{chunk-B4EKV6HQ.js → chunk-VKCTYLDN.js} +500 -442
- package/dist/{chunk-O3MGZDCT.cjs → chunk-VTEXJOSD.cjs} +63 -63
- package/dist/chunk-VVAAZITA.cjs +287 -0
- package/dist/{chunk-V7AKE5VT.cjs → chunk-W2GA3EQB.cjs} +435 -42
- package/dist/chunk-W4GABFCR.js +37 -0
- package/dist/chunk-WKEK4NCA.js +490 -0
- package/dist/{chunk-5A4TCHOC.cjs → chunk-WNYXT4TE.cjs} +4 -4
- package/dist/{chunk-S762UEV5.js → chunk-WTH23ISI.js} +6 -6
- package/dist/{chunk-BTKZGHAV.js → chunk-WWNCM473.js} +10 -6
- package/dist/{chunk-4YNYPHH3.cjs → chunk-X75H75UY.cjs} +2351 -213
- package/dist/{chunk-LYJJI7ZK.cjs → chunk-XCUDDFKC.cjs} +216 -9
- package/dist/chunk-YAO4HPJL.cjs +120 -0
- package/dist/chunk-YKY2JBER.cjs +9443 -0
- package/dist/chunk-YP5CHEYU.cjs +154 -0
- package/dist/{chunk-WRNEH5MO.js → chunk-YW3I2FQL.js} +18 -7
- package/dist/{chunk-BRNUPDHJ.js → chunk-Z557DVYN.js} +386 -19
- package/dist/{chunk-VSACG2AR.js → chunk-Z6LZUYZF.js} +21 -264
- package/dist/chunk-ZHPMP447.cjs +43 -0
- package/dist/{chunk-LODTHGST.cjs → chunk-ZK7KX5CD.cjs} +133 -70
- package/dist/{chunk-CCPSNT6B.cjs → chunk-ZRPALBQB.cjs} +5 -5
- package/dist/chunk-ZVFHPMC5.js +824 -0
- package/dist/chunk-ZVQMKUGJ.js +443 -0
- package/dist/cli/holoscript-runner.cjs +86 -48
- package/dist/cli/holoscript-runner.js +54 -16
- package/dist/codebase/index.cjs +1 -1
- package/dist/codebase/index.js +1 -1
- package/dist/compiler/agent-inference.cjs +11 -11
- package/dist/compiler/agent-inference.js +9 -6
- package/dist/compiler/android-xr.cjs +13 -12
- package/dist/compiler/android-xr.js +11 -10
- package/dist/compiler/android.cjs +12 -12
- package/dist/compiler/android.js +10 -10
- package/dist/compiler/business-quest.cjs +10 -10
- package/dist/compiler/business-quest.js +2 -2
- package/dist/compiler/coco.cjs +1 -1
- package/dist/compiler/coco.js +1 -1
- package/dist/compiler/context.cjs +9 -9
- package/dist/compiler/context.js +6 -6
- package/dist/compiler/daimon-seed.cjs +36 -0
- package/dist/compiler/daimon-seed.js +12 -0
- package/dist/compiler/domain-block-utils.cjs +205 -156
- package/dist/compiler/domain-block-utils.js +8 -7
- package/dist/compiler/dtdl.cjs +10 -10
- package/dist/compiler/dtdl.js +7 -7
- package/dist/compiler/gltf-pipeline.cjs +9 -9
- package/dist/compiler/gltf-pipeline.js +2 -2
- package/dist/compiler/godot.cjs +10 -9
- package/dist/compiler/godot.js +9 -8
- package/dist/compiler/incremental.cjs +11 -11
- package/dist/compiler/incremental.js +6 -6
- package/dist/compiler/index.cjs +2585 -3273
- package/dist/compiler/index.d.ts +149 -35
- package/dist/compiler/index.js +2197 -3102
- package/dist/compiler/ios.cjs +11 -11
- package/dist/compiler/ios.js +9 -9
- package/dist/compiler/llm-provider-capabilities.cjs +9 -9
- package/dist/compiler/llm-provider-capabilities.js +6 -6
- package/dist/compiler/nodetoy.cjs +1 -1
- package/dist/compiler/nodetoy.js +1 -1
- package/dist/compiler/openxr.cjs +11 -10
- package/dist/compiler/openxr.js +10 -9
- package/dist/compiler/remotion.cjs +1 -1
- package/dist/compiler/remotion.js +1 -1
- package/dist/compiler/reproducibility.cjs +1 -1
- package/dist/compiler/reproducibility.js +1 -1
- package/dist/compiler/sdf.cjs +11 -10
- package/dist/compiler/sdf.js +9 -8
- package/dist/compiler/semantic-scene.cjs +7 -7
- package/dist/compiler/semantic-scene.js +2 -2
- package/dist/compiler/state.cjs +9 -9
- package/dist/compiler/state.js +7 -7
- package/dist/compiler/trait-composition.cjs +11 -11
- package/dist/compiler/trait-composition.js +7 -7
- package/dist/compiler/traits/ProvenanceSemiring.d.ts +167 -0
- package/dist/compiler/traits/Semiring.d.ts +26 -0
- package/dist/compiler/unity.cjs +11 -10
- package/dist/compiler/unity.js +10 -9
- package/dist/compiler/unreal.cjs +12 -11
- package/dist/compiler/unreal.js +10 -9
- package/dist/compiler/urdf.cjs +18 -17
- package/dist/compiler/urdf.js +9 -8
- package/dist/compiler/usd-physics.cjs +11 -10
- package/dist/compiler/usd-physics.js +8 -7
- package/dist/compiler/visionos.cjs +11 -10
- package/dist/compiler/visionos.js +10 -9
- package/dist/compiler/vrchat.cjs +11 -10
- package/dist/compiler/vrchat.js +9 -8
- package/dist/compiler/wasm.cjs +14 -13
- package/dist/compiler/wasm.js +9 -8
- package/dist/compiler/webgpu.cjs +10 -9
- package/dist/compiler/webgpu.js +9 -8
- package/dist/constants.cjs +398 -0
- package/dist/constants.js +9 -0
- package/dist/coordinators/index.cjs +4 -1
- package/dist/coordinators/index.js +4 -1
- package/dist/debugger.cjs +11 -9
- package/dist/debugger.js +9 -7
- package/dist/{dist-ACXG6IH5.cjs → dist-GRMOP2UL.cjs} +341 -65
- package/dist/{dist-VD4L6V7Q.js → dist-ZBUKU2JG.js} +333 -63
- package/dist/entries/interop.cjs +23 -23
- package/dist/entries/interop.js +3 -3
- package/dist/entries/scripting.cjs +12 -11
- package/dist/entries/scripting.js +8 -7
- package/dist/evolution/index.cjs +66 -0
- package/dist/evolution/index.d.ts +162 -0
- package/dist/evolution/index.js +17 -0
- package/dist/hololand/index.cjs +41 -37
- package/dist/hololand/index.js +3 -3
- package/dist/index.cjs +12394 -3224
- package/dist/index.d.ts +260 -18
- package/dist/index.js +10755 -2182
- package/dist/keyword-registry/PluginKeywordRegistry.d.ts +138 -0
- package/dist/keyword-registry/index.cjs +29 -0
- package/dist/keyword-registry/index.d.ts +1 -0
- package/dist/keyword-registry/index.js +4 -0
- package/dist/math/tropical-spmv.cjs +11 -11
- package/dist/math/tropical-spmv.d.ts +1 -0
- package/dist/math/tropical-spmv.js +2 -2
- package/dist/math/tropicalSpmv.d.ts +43 -0
- package/dist/math/vec3.cjs +1 -1
- package/dist/math/vec3.js +1 -1
- package/dist/matter/StagedMatter.d.ts +82 -0
- package/dist/matter/index.cjs +17 -0
- package/dist/matter/index.d.ts +1 -0
- package/dist/matter/index.js +4 -0
- package/dist/{ml-dsa-Z7JDKW4L.js → ml-dsa-J6VKVT4K.js} +3 -3
- package/dist/{ml-dsa-FSKBTE3W.cjs → ml-dsa-MTIK4ZUQ.cjs} +23 -23
- package/dist/paper-0c-spike/index.cjs +1 -1
- package/dist/paper-0c-spike/index.js +1 -1
- package/dist/parameter-envelope/ParameterEnvelope.d.ts +128 -0
- package/dist/parameter-envelope/index.cjs +17 -0
- package/dist/parameter-envelope/index.d.ts +2 -0
- package/dist/parameter-envelope/index.js +4 -0
- package/dist/parser/HoloCompositionTypes.d.ts +2013 -0
- package/dist/parser/PipelineParser.d.ts +162 -0
- package/dist/parser.cjs +36 -20
- package/dist/parser.js +13 -9
- package/dist/plugin-manifest/ManifestAutoLoader.d.ts +35 -0
- package/dist/plugin-manifest/PluginManifest.d.ts +156 -0
- package/dist/plugin-manifest/index.cjs +25 -0
- package/dist/plugin-manifest/index.d.ts +2 -0
- package/dist/plugin-manifest/index.js +4 -0
- package/dist/plugin-solver-contract/PluginSolverContract.d.ts +288 -0
- package/dist/plugin-solver-contract/index.cjs +41 -0
- package/dist/plugin-solver-contract/index.d.ts +1 -0
- package/dist/plugin-solver-contract/index.js +4 -0
- package/dist/policy/ContentPolicyGate.d.ts +51 -0
- package/dist/policy/PolicyPack.d.ts +120 -0
- package/dist/policy/blocklist.d.ts +32 -0
- package/dist/policy/defaults.d.ts +44 -0
- package/dist/policy/index.cjs +106 -0
- package/dist/policy/index.d.ts +17 -0
- package/dist/policy/index.js +5 -0
- package/dist/policy/jsonLogic.d.ts +31 -0
- package/dist/policy/types.d.ts +174 -0
- package/dist/proof-composition/ProofCompositionLaw.d.ts +93 -0
- package/dist/proof-composition/index.cjs +25 -0
- package/dist/proof-composition/index.d.ts +1 -0
- package/dist/proof-composition/index.js +4 -0
- package/dist/receipts/hash-policy.d.ts +85 -0
- package/dist/reconstruction/index.cjs +75 -47
- package/dist/reconstruction/index.js +5 -5
- package/dist/runtime/plugin-trait-registrar.d.ts +36 -0
- package/dist/runtime.cjs +81 -79
- package/dist/runtime.js +9 -7
- package/dist/scene-presets-EDKYZ5GW.js +4 -0
- package/dist/scene-presets-NCW2CFRS.cjs +17 -0
- package/dist/self-improvement/index.cjs +1 -1
- package/dist/self-improvement/index.js +1 -1
- package/dist/{src-PT2FERDV.cjs → src-G3D7ZATQ.cjs} +545 -21
- package/dist/{src-J6CM4AUR.js → src-UXYA7HM6.js} +539 -16
- package/dist/storage/index.cjs +10 -10
- package/dist/storage/index.js +3 -3
- package/dist/testing.cjs +1 -1
- package/dist/testing.js +1 -1
- package/dist/tools/index.cjs +3631 -0
- package/dist/tools/index.js +3581 -0
- package/dist/traitDocs/traitDocs.cjs +9 -9
- package/dist/traitDocs/traitDocs.d.ts +1 -0
- package/dist/traitDocs/traitDocs.js +3 -3
- package/dist/traits/ControlLoopTrait.d.ts +154 -0
- package/dist/traits/KinematicChainTrait.d.ts +116 -0
- package/dist/traits/SensorSamplingTrait.d.ts +154 -0
- package/dist/traits/TraitTypes.d.ts +270 -0
- package/dist/traits/TransactionTrait.d.ts +121 -0
- package/dist/traits/botanical-lotus.cjs +54 -50
- package/dist/traits/botanical-lotus.js +2 -5
- package/dist/traits/control-loop.cjs +21 -0
- package/dist/traits/control-loop.d.ts +1 -0
- package/dist/traits/control-loop.js +4 -0
- package/dist/traits/engines/cloth-verlet.d.ts +65 -0
- package/dist/traits/engines/index.cjs +19 -19
- package/dist/traits/engines/index.d.ts +15 -275
- package/dist/traits/engines/index.js +3 -3
- package/dist/traits/engines/motion-data-schema.d.ts +119 -0
- package/dist/traits/engines/motion-matching.d.ts +102 -0
- package/dist/traits/engines/noise.d.ts +25 -0
- package/dist/traits/engines/onnx-adapter.d.ts +173 -0
- package/dist/traits/engines/onnx-motion-matching.d.ts +163 -0
- package/dist/traits/engines/pfnn-network.d.ts +92 -0
- package/dist/traits/engines/synthetic-walk-cycle.d.ts +38 -0
- package/dist/traits/engines/tensor-ops.d.ts +15 -0
- package/dist/traits/index.cjs +2789 -1259
- package/dist/traits/index.d.ts +35 -0
- package/dist/traits/index.js +1692 -411
- package/dist/traits/kinematic-chain.cjs +25 -0
- package/dist/traits/kinematic-chain.d.ts +1 -0
- package/dist/traits/kinematic-chain.js +4 -0
- package/dist/traits/sensor-sampling.cjs +33 -0
- package/dist/traits/sensor-sampling.d.ts +1 -0
- package/dist/traits/sensor-sampling.js +4 -0
- package/dist/traits/simulation-solver-factory.cjs +1 -1
- package/dist/traits/simulation-solver-factory.js +1 -1
- package/dist/traits/transaction.cjs +29 -0
- package/dist/traits/transaction.d.ts +1 -0
- package/dist/traits/transaction.js +4 -0
- package/dist/traits/webcam-gaze.cjs +1 -1
- package/dist/traits/webcam-gaze.js +1 -1
- package/dist/type-checker.cjs +7 -6
- package/dist/type-checker.js +5 -4
- package/dist/types/AdvancedTypeSystem.d.ts +489 -0
- package/dist/types/HoloScriptPlus.d.ts +810 -0
- package/dist/types/base.d.ts +248 -0
- package/dist/types.d.ts +799 -0
- package/dist/world/index.cjs +3 -4
- package/dist/world/index.js +3 -4
- package/dist/world-model/index.cjs +1 -1
- package/dist/world-model/index.js +1 -1
- package/dist/wot/index.cjs +1 -1
- package/dist/wot/index.js +1 -1
- package/package.json +135 -69
- package/dist/GLTFPipeline-3EJLL3TS.cjs +0 -38
- package/dist/GLTFPipeline-3OWJV2VK.js +0 -17
- package/dist/HoloScriptPlusParser-ADWRY5OS.cjs +0 -698
- package/dist/HoloScriptPlusParser-JLJDXHSC.js +0 -693
- package/dist/HoloScriptPlusParser-QCGFPWIL.cjs +0 -27
- package/dist/HoloScriptPlusParser-WENAFEFV.js +0 -10
- package/dist/HoloScriptRuntime-GGRVEU4T.cjs +0 -19
- package/dist/HoloScriptRuntime-GJK6VJPH.js +0 -10
- package/dist/chunk-22Q5A6RV.js +0 -979
- package/dist/chunk-4C57PR42.js +0 -468
- package/dist/chunk-4W5G5QVL.cjs +0 -847
- package/dist/chunk-5ET6L4NS.js +0 -487
- package/dist/chunk-C4GSLCHE.cjs +0 -7153
- package/dist/chunk-F2G6CWFT.js +0 -7089
- package/dist/chunk-G6PNEASF.cjs +0 -814
- package/dist/chunk-GTA4Q3A3.js +0 -1491
- package/dist/chunk-HCCQLAA4.cjs +0 -74
- package/dist/chunk-HFSVMKM3.cjs +0 -72
- package/dist/chunk-KAIVDEIG.cjs +0 -4539
- package/dist/chunk-KQU64CIX.cjs +0 -1508
- package/dist/chunk-MSYSQ2AJ.js +0 -4533
- package/dist/chunk-NHJLP37F.js +0 -70
- package/dist/chunk-NHYRRAGI.cjs +0 -490
- package/dist/chunk-OIQYIIO3.cjs +0 -473
- package/dist/chunk-OL46QLBJ.js +0 -61
- package/dist/chunk-SKZPC5AG.cjs +0 -984
- package/dist/chunk-SLHLXUMO.js +0 -445
- package/dist/chunk-UOIGFQXC.cjs +0 -9750
- package/dist/chunk-UOL6Y5TD.cjs +0 -759
- package/dist/chunk-UVFI7XIR.cjs +0 -452
- package/dist/chunk-VEPGBETF.js +0 -844
- package/dist/chunk-XQ5MWMP2.js +0 -756
- package/dist/chunk-XT6JY5W5.js +0 -9684
- package/dist/chunk-YRRAUB35.js +0 -811
- package/dist/compiler/GasOptimizationAnalyzer.d.ts +0 -73
- package/dist/compiler/NFTMarketplaceCompiler.d.ts +0 -23
- package/dist/compiler/ar.cjs +0 -23
- package/dist/compiler/ar.js +0 -11
- package/dist/compiler/babylon.cjs +0 -21
- package/dist/compiler/babylon.js +0 -15
- package/dist/compiler/multi-layer.cjs +0 -24
- package/dist/compiler/multi-layer.js +0 -15
- package/dist/compiler/playcanvas.cjs +0 -19
- package/dist/compiler/playcanvas.js +0 -13
- package/dist/compiler/r3f.cjs +0 -39
- package/dist/compiler/r3f.d.ts +0 -22
- package/dist/compiler/r3f.js +0 -17
- package/dist/compiler/vrr.cjs +0 -24
- package/dist/compiler/vrr.js +0 -12
- package/dist/parser/NFTMarketplaceTypes.d.ts +0 -191
- package/dist/playwright-3AT3AKTV.cjs +0 -98673
- package/dist/playwright-VZPDVUEQ.js +0 -98660
|
@@ -0,0 +1,2013 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* .holo Composition AST Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for the declarative .holo format.
|
|
5
|
+
* This is a scene-centric language designed for AI agents and visual tools.
|
|
6
|
+
*
|
|
7
|
+
* @version 1.0.0
|
|
8
|
+
*/
|
|
9
|
+
import type { ProvenanceContext } from '../compiler/traits/ProvenanceSemiring';
|
|
10
|
+
export interface SourceLocation {
|
|
11
|
+
line: number;
|
|
12
|
+
column: number;
|
|
13
|
+
offset?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface SourceRange {
|
|
16
|
+
start: SourceLocation;
|
|
17
|
+
end: SourceLocation;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Platform constraint parsed from `@platform(...)` decorators.
|
|
21
|
+
*
|
|
22
|
+
* Syntax forms:
|
|
23
|
+
* ```holoscript
|
|
24
|
+
* @platform(quest3) → include: ['quest3'], exclude: []
|
|
25
|
+
* @platform(phone, desktop) → include: ['phone', 'desktop'], exclude: []
|
|
26
|
+
* @platform(not: car, wearable) → include: [], exclude: ['car', 'wearable']
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export interface PlatformConstraint {
|
|
30
|
+
/** Target platforms this block applies to (empty = all) */
|
|
31
|
+
include: string[];
|
|
32
|
+
/** Platforms to exclude */
|
|
33
|
+
exclude: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface HoloNode {
|
|
36
|
+
type: string;
|
|
37
|
+
loc?: SourceRange;
|
|
38
|
+
provenance?: {
|
|
39
|
+
author: string;
|
|
40
|
+
timestamp: number;
|
|
41
|
+
provenanceHash: string;
|
|
42
|
+
context?: ProvenanceContext;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export type HoloValue = string | number | boolean | null | HoloValue[] | HoloObject | HoloBindValue;
|
|
46
|
+
export interface HoloBindValue {
|
|
47
|
+
__bind: true;
|
|
48
|
+
source: string;
|
|
49
|
+
transform?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface HoloObject {
|
|
52
|
+
[key: string]: HoloValue;
|
|
53
|
+
}
|
|
54
|
+
export interface HoloPosition {
|
|
55
|
+
x: number;
|
|
56
|
+
y: number;
|
|
57
|
+
z: number;
|
|
58
|
+
}
|
|
59
|
+
export interface HoloComposition extends HoloNode {
|
|
60
|
+
type: 'Composition';
|
|
61
|
+
name: string;
|
|
62
|
+
theme?: HoloTheme;
|
|
63
|
+
environment?: HoloEnvironment;
|
|
64
|
+
scenes?: HoloScene[];
|
|
65
|
+
state?: HoloState;
|
|
66
|
+
templates: HoloTemplate[];
|
|
67
|
+
objects: HoloObjectDecl[];
|
|
68
|
+
spatialGroups: HoloSpatialGroup[];
|
|
69
|
+
lights: HoloLight[];
|
|
70
|
+
effects?: HoloEffects;
|
|
71
|
+
camera?: HoloCamera;
|
|
72
|
+
logic?: HoloLogic;
|
|
73
|
+
imports: HoloImport[];
|
|
74
|
+
timelines: HoloTimeline[];
|
|
75
|
+
audio: HoloAudio[];
|
|
76
|
+
zones: HoloZone[];
|
|
77
|
+
/** Declarative world blocks (environment / physics container). */
|
|
78
|
+
worlds?: HoloWorld[];
|
|
79
|
+
ui?: HoloUI;
|
|
80
|
+
transitions: HoloTransition[];
|
|
81
|
+
conditionals: HoloConditionalBlock[];
|
|
82
|
+
iterators: HoloForEachBlock[];
|
|
83
|
+
npcs: HoloNPC[];
|
|
84
|
+
quests: HoloQuest[];
|
|
85
|
+
spawnPoints?: HoloSpawnPoint[];
|
|
86
|
+
triggers?: HoloGameTrigger[];
|
|
87
|
+
lootTables?: HoloLootTable[];
|
|
88
|
+
worldChunks?: HoloWorldChunk[];
|
|
89
|
+
/** World-layer phasing: same coords, different content gated by a quest predicate (P2.4) */
|
|
90
|
+
worldLayers?: HoloWorldLayer[];
|
|
91
|
+
/** Instanced dungeon/raid content spun up per party with receipt-sealed completion (P2.6) */
|
|
92
|
+
dungeonInstances?: HoloDungeonInstance[];
|
|
93
|
+
/** World sharding: AABB partitions of a single world across rooms, receipt-sealed handoff (P2.5) */
|
|
94
|
+
worldShards?: HoloWorldShard[];
|
|
95
|
+
/** Named locomotion routes (patrol/path/orbit) declared at scene level */
|
|
96
|
+
movementPaths?: HoloMovementPath[];
|
|
97
|
+
/** Scene-level declarative reaction triggers (on_<trigger> -> action wiring) */
|
|
98
|
+
reactionTriggers?: HoloReactionTrigger[];
|
|
99
|
+
abilities: HoloAbility[];
|
|
100
|
+
dialogues: HoloDialogue[];
|
|
101
|
+
stateMachines: HoloStateMachine[];
|
|
102
|
+
achievements: HoloAchievement[];
|
|
103
|
+
talentTrees: HoloTalentTree[];
|
|
104
|
+
shapes: HoloShape[];
|
|
105
|
+
/** User-defined trait definitions (trait Name [extends Base] { ... }) */
|
|
106
|
+
traitDefinitions?: HoloTraitDefinition[];
|
|
107
|
+
/** Root-level trait attachments (e.g. @page, @metadata) */
|
|
108
|
+
traits?: HoloObjectTrait[];
|
|
109
|
+
/** Event handlers attached at the composition level (e.g. on(Target, "event") {}) */
|
|
110
|
+
eventHandlers?: HoloEventHandler[];
|
|
111
|
+
/** Actions available at the composition level */
|
|
112
|
+
actions?: HoloAction[];
|
|
113
|
+
/** Raw metadata key-value properties */
|
|
114
|
+
metadata?: Record<string, HoloValue>;
|
|
115
|
+
/** Named regulatory bundles that gate deploy/compile evidence. */
|
|
116
|
+
policyPacks?: HoloPolicyPackBlock[];
|
|
117
|
+
spawnGroups?: HoloSpawnGroup[];
|
|
118
|
+
waypointSets?: HoloWaypoints[];
|
|
119
|
+
constraints?: HoloConstraintBlock[];
|
|
120
|
+
terrains?: HoloTerrainBlock[];
|
|
121
|
+
domainBlocks?: HoloDomainBlock[];
|
|
122
|
+
norms?: HoloNormBlock[];
|
|
123
|
+
metanorms?: HoloMetanorm[];
|
|
124
|
+
/** SimulationContract block (v6.3) — preconditions → invariants → receipt */
|
|
125
|
+
contract?: HoloContract;
|
|
126
|
+
/** Named pub/sub topic declarations (v6.4) */
|
|
127
|
+
topics?: HoloTopic[];
|
|
128
|
+
/** Typed directional channels between nodes (v6.4) */
|
|
129
|
+
channels?: HoloChannel[];
|
|
130
|
+
/** Declarative natural-language graph connections (v6.4) */
|
|
131
|
+
connections?: HoloConnection[];
|
|
132
|
+
}
|
|
133
|
+
export interface HoloTheme extends HoloNode {
|
|
134
|
+
type: 'Theme';
|
|
135
|
+
properties: HoloThemeProperty[];
|
|
136
|
+
}
|
|
137
|
+
export interface HoloThemeProperty extends HoloNode {
|
|
138
|
+
type: 'ThemeProperty';
|
|
139
|
+
key: string;
|
|
140
|
+
value: HoloValue;
|
|
141
|
+
}
|
|
142
|
+
export interface HoloEnvironment extends HoloNode {
|
|
143
|
+
type: 'Environment';
|
|
144
|
+
properties: HoloEnvironmentProperty[];
|
|
145
|
+
}
|
|
146
|
+
export interface HoloScene extends HoloNode {
|
|
147
|
+
type: 'Scene';
|
|
148
|
+
name: string;
|
|
149
|
+
environment?: HoloEnvironment;
|
|
150
|
+
objects: HoloObjectDecl[];
|
|
151
|
+
}
|
|
152
|
+
export interface HoloEnvironmentProperty extends HoloNode {
|
|
153
|
+
type: 'EnvironmentProperty';
|
|
154
|
+
key: string;
|
|
155
|
+
value: HoloValue | HoloParticleSystem | HoloLighting;
|
|
156
|
+
}
|
|
157
|
+
export interface HoloParticleSystem extends HoloNode {
|
|
158
|
+
type: 'ParticleSystem';
|
|
159
|
+
name: string;
|
|
160
|
+
properties: Record<string, HoloValue>;
|
|
161
|
+
}
|
|
162
|
+
export interface HoloLighting extends HoloNode {
|
|
163
|
+
type: 'Lighting';
|
|
164
|
+
properties: Record<string, HoloValue>;
|
|
165
|
+
}
|
|
166
|
+
export interface HoloLight extends HoloNode {
|
|
167
|
+
type: 'Light';
|
|
168
|
+
id?: string;
|
|
169
|
+
name: string;
|
|
170
|
+
lightType: 'directional' | 'point' | 'spot' | 'hemisphere' | 'ambient' | 'area';
|
|
171
|
+
properties: HoloLightProperty[];
|
|
172
|
+
/** @platform() conditional compilation constraint */
|
|
173
|
+
platformConstraint?: PlatformConstraint;
|
|
174
|
+
}
|
|
175
|
+
export interface HoloLightProperty extends HoloNode {
|
|
176
|
+
type: 'LightProperty';
|
|
177
|
+
key: string;
|
|
178
|
+
value: HoloValue;
|
|
179
|
+
}
|
|
180
|
+
export interface HoloEffects extends HoloNode {
|
|
181
|
+
type: 'Effects';
|
|
182
|
+
effects: HoloEffect[];
|
|
183
|
+
}
|
|
184
|
+
export interface HoloEffect extends HoloNode {
|
|
185
|
+
type: 'Effect';
|
|
186
|
+
effectType: string;
|
|
187
|
+
properties: Record<string, HoloValue>;
|
|
188
|
+
}
|
|
189
|
+
export interface HoloCamera extends HoloNode {
|
|
190
|
+
type: 'Camera';
|
|
191
|
+
cameraType: 'perspective' | 'orthographic' | 'cinematic';
|
|
192
|
+
position?: HoloPosition;
|
|
193
|
+
target?: HoloPosition;
|
|
194
|
+
fov?: number;
|
|
195
|
+
near?: number;
|
|
196
|
+
far?: number;
|
|
197
|
+
properties: HoloCameraProperty[];
|
|
198
|
+
}
|
|
199
|
+
export interface HoloCameraProperty extends HoloNode {
|
|
200
|
+
type: 'CameraProperty';
|
|
201
|
+
key: string;
|
|
202
|
+
value: HoloValue;
|
|
203
|
+
}
|
|
204
|
+
export interface HoloTimeline extends HoloNode {
|
|
205
|
+
type: 'Timeline';
|
|
206
|
+
name: string;
|
|
207
|
+
autoplay?: boolean;
|
|
208
|
+
loop?: boolean;
|
|
209
|
+
entries: HoloTimelineEntry[];
|
|
210
|
+
}
|
|
211
|
+
export interface HoloTimelineEntry extends HoloNode {
|
|
212
|
+
type: 'TimelineEntry';
|
|
213
|
+
time: number;
|
|
214
|
+
action: HoloTimelineAction;
|
|
215
|
+
}
|
|
216
|
+
export type HoloTimelineAction = {
|
|
217
|
+
kind: 'animate';
|
|
218
|
+
target: string;
|
|
219
|
+
properties: Record<string, HoloValue>;
|
|
220
|
+
} | {
|
|
221
|
+
kind: 'emit';
|
|
222
|
+
event: string;
|
|
223
|
+
data?: HoloValue;
|
|
224
|
+
} | {
|
|
225
|
+
kind: 'call';
|
|
226
|
+
method: string;
|
|
227
|
+
args?: HoloValue[];
|
|
228
|
+
};
|
|
229
|
+
export interface HoloAudio extends HoloNode {
|
|
230
|
+
type: 'Audio';
|
|
231
|
+
name: string;
|
|
232
|
+
properties: HoloAudioProperty[];
|
|
233
|
+
}
|
|
234
|
+
export interface HoloAudioProperty extends HoloNode {
|
|
235
|
+
type: 'AudioProperty';
|
|
236
|
+
key: string;
|
|
237
|
+
value: HoloValue;
|
|
238
|
+
}
|
|
239
|
+
export interface HoloZone extends HoloNode {
|
|
240
|
+
type: 'Zone';
|
|
241
|
+
name: string;
|
|
242
|
+
properties: HoloZoneProperty[];
|
|
243
|
+
handlers: HoloEventHandler[];
|
|
244
|
+
}
|
|
245
|
+
export interface HoloZoneProperty extends HoloNode {
|
|
246
|
+
type: 'ZoneProperty';
|
|
247
|
+
key: string;
|
|
248
|
+
value: HoloValue;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Spawn point for players or NPCs with optional faction filtering.
|
|
252
|
+
*
|
|
253
|
+
* Grammar:
|
|
254
|
+
* ```holoscript
|
|
255
|
+
* spawn_point village_entry {
|
|
256
|
+
* faction: "neutral"
|
|
257
|
+
* max_count: 10
|
|
258
|
+
* respawn_radius: 5
|
|
259
|
+
* position: (10, 0, 10)
|
|
260
|
+
* }
|
|
261
|
+
* ```
|
|
262
|
+
*/
|
|
263
|
+
export interface HoloSpawnPoint extends HoloNode {
|
|
264
|
+
type: 'SpawnPoint';
|
|
265
|
+
name: string;
|
|
266
|
+
/** faction tag (e.g. 'horde', 'alliance', 'neutral', custom string) */
|
|
267
|
+
faction?: string;
|
|
268
|
+
/** Maximum concurrent entities at this spawn point */
|
|
269
|
+
maxCount?: number;
|
|
270
|
+
/** Radius (metres) within which respawn positions are randomised */
|
|
271
|
+
respawnRadius?: number;
|
|
272
|
+
position?: HoloPosition;
|
|
273
|
+
/** Raw key-value properties not mapped to typed fields */
|
|
274
|
+
properties: Record<string, HoloValue>;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Game trigger volume — fires enter/exit actions for nearby entities.
|
|
278
|
+
*
|
|
279
|
+
* Grammar:
|
|
280
|
+
* ```holoscript
|
|
281
|
+
* trigger dungeon_entrance {
|
|
282
|
+
* radius: 3
|
|
283
|
+
* faction_filter: ["alliance", "neutral"]
|
|
284
|
+
* on_enter { emit("dungeon_enter") }
|
|
285
|
+
* on_exit { emit("dungeon_exit") }
|
|
286
|
+
* }
|
|
287
|
+
* ```
|
|
288
|
+
*/
|
|
289
|
+
export interface HoloGameTrigger extends HoloNode {
|
|
290
|
+
type: 'GameTrigger';
|
|
291
|
+
name: string;
|
|
292
|
+
/** Detection sphere radius in metres */
|
|
293
|
+
radius: number;
|
|
294
|
+
/** Only fire for entities belonging to these factions (empty = all) */
|
|
295
|
+
factionFilter?: string[];
|
|
296
|
+
onEnter?: HoloEventHandler[];
|
|
297
|
+
onExit?: HoloEventHandler[];
|
|
298
|
+
position?: HoloPosition;
|
|
299
|
+
/** Raw key-value properties not mapped to typed fields */
|
|
300
|
+
properties: Record<string, HoloValue>;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Named movement path — a scene-level locomotion route for patrol/path/orbit.
|
|
304
|
+
*
|
|
305
|
+
* Grammar:
|
|
306
|
+
* ```holoscript
|
|
307
|
+
* movement_path patrol_route {
|
|
308
|
+
* mode: "patrol" // patrol | follow | path | orbit
|
|
309
|
+
* loop: true
|
|
310
|
+
* speed: 2.5
|
|
311
|
+
* waypoints: [[0,0,0], [10,0,0], [10,0,10], [0,0,10]]
|
|
312
|
+
* easing: "linear"
|
|
313
|
+
* }
|
|
314
|
+
* ```
|
|
315
|
+
*
|
|
316
|
+
* The IR node is the scene-level declaration; the imperative `.hs` `move`
|
|
317
|
+
* statement (MovementStatementNode, types/base.ts) references it by name and the
|
|
318
|
+
* runtime LocomotionTrait drives it. Locomotion logic is NOT duplicated here.
|
|
319
|
+
*/
|
|
320
|
+
export interface HoloMovementPath extends HoloNode {
|
|
321
|
+
type: 'MovementPath';
|
|
322
|
+
name: string;
|
|
323
|
+
/** Locomotion mode: patrol | follow | path | orbit | snap */
|
|
324
|
+
mode?: string;
|
|
325
|
+
/** Whether the path loops when the end is reached */
|
|
326
|
+
loop?: boolean;
|
|
327
|
+
/** Movement speed in metres/second */
|
|
328
|
+
speed?: number;
|
|
329
|
+
/** Waypoint array — each element is [x, y, z] */
|
|
330
|
+
waypoints?: HoloValue;
|
|
331
|
+
/** Easing function name (linear | ease_in | ease_out | ease_in_out | spring) */
|
|
332
|
+
easing?: string;
|
|
333
|
+
/** Raw key-value properties for extensibility */
|
|
334
|
+
properties: Record<string, HoloValue>;
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Scene-level reaction trigger — declarative on_<trigger> -> action wiring.
|
|
338
|
+
*
|
|
339
|
+
* Grammar:
|
|
340
|
+
* ```holoscript
|
|
341
|
+
* reaction_trigger on_player_enter {
|
|
342
|
+
* target: "player"
|
|
343
|
+
* condition: "player.level >= 5"
|
|
344
|
+
* on_activate { emit("zone_entered") }
|
|
345
|
+
* on_deactivate { emit("zone_exited") }
|
|
346
|
+
* cooldown: 2.0
|
|
347
|
+
* }
|
|
348
|
+
* ```
|
|
349
|
+
*
|
|
350
|
+
* The handler bodies are `HoloEventHandler`s (same shape used by GameTrigger's
|
|
351
|
+
* onEnter/onExit). Cognitive verbs inside a body (llm_call/recall/…) are resolved
|
|
352
|
+
* at compile time by BehaviorTreeTrait via CognitiveActions.ts — not re-parsed
|
|
353
|
+
* here. Maps to GameEventBlockNode.category (types/base.ts) for routing.
|
|
354
|
+
*/
|
|
355
|
+
export interface HoloReactionTrigger extends HoloNode {
|
|
356
|
+
type: 'ReactionTrigger';
|
|
357
|
+
/** Trigger event name, e.g. "on_player_enter", "on_collision", "on_proximity" */
|
|
358
|
+
name: string;
|
|
359
|
+
/** Entity type or id to react to (e.g. "player", "enemy", "@npc_guard") */
|
|
360
|
+
target?: string;
|
|
361
|
+
/** Optional guard expression — trigger only fires when truthy */
|
|
362
|
+
condition?: string;
|
|
363
|
+
/** Cooldown in seconds before this trigger can fire again */
|
|
364
|
+
cooldown?: number;
|
|
365
|
+
/** Handlers fired when the trigger activates */
|
|
366
|
+
onActivate?: HoloEventHandler[];
|
|
367
|
+
/** Handlers fired when the trigger deactivates (e.g. entity leaves radius) */
|
|
368
|
+
onDeactivate?: HoloEventHandler[];
|
|
369
|
+
/** Raw key-value properties for extensibility */
|
|
370
|
+
properties: Record<string, HoloValue>;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Named loot table with weighted entries.
|
|
374
|
+
*
|
|
375
|
+
* Grammar:
|
|
376
|
+
* ```holoscript
|
|
377
|
+
* loot_table goblin_drops {
|
|
378
|
+
* entry common_coin { item: "gold_coin" qty: "1..5" weight: 60 }
|
|
379
|
+
* entry iron_shard { item: "iron_shard" qty: "1..2" weight: 25 rarity: "uncommon" }
|
|
380
|
+
* entry rare_amulet { item: "shadow_amulet" qty: "1" weight: 5 rarity: "rare" condition: "player_level >= 10" }
|
|
381
|
+
* entry nothing { weight: 10 }
|
|
382
|
+
* guaranteed { item: "goblin_ear" qty: 1 }
|
|
383
|
+
* multiplier_on_faction_hostile: "ironveil * 1.5"
|
|
384
|
+
* }
|
|
385
|
+
* ```
|
|
386
|
+
*/
|
|
387
|
+
export interface HoloLootEntry extends HoloNode {
|
|
388
|
+
type: 'LootEntry';
|
|
389
|
+
/** Entry identifier (bare name after 'entry') */
|
|
390
|
+
id: string;
|
|
391
|
+
/** Item reference id */
|
|
392
|
+
itemId?: string;
|
|
393
|
+
/** Relative drop weight (higher = more common) */
|
|
394
|
+
weight: number;
|
|
395
|
+
/** Quantity range, e.g. "1..5" or a number */
|
|
396
|
+
qty?: string | number;
|
|
397
|
+
/** Rarity tier */
|
|
398
|
+
rarity?: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary';
|
|
399
|
+
/** Optional condition expression string */
|
|
400
|
+
condition?: string;
|
|
401
|
+
/** Raw key-value properties for extensibility */
|
|
402
|
+
properties: Record<string, HoloValue>;
|
|
403
|
+
}
|
|
404
|
+
export interface HoloLootTable extends HoloNode {
|
|
405
|
+
type: 'LootTable';
|
|
406
|
+
name: string;
|
|
407
|
+
entries: HoloLootEntry[];
|
|
408
|
+
/** Items guaranteed to drop regardless of roll */
|
|
409
|
+
guaranteed?: Record<string, HoloValue>;
|
|
410
|
+
/** Raw key-value properties (multipliers, global modifiers) */
|
|
411
|
+
properties: Record<string, HoloValue>;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* World chunk for large open-world streaming.
|
|
415
|
+
*
|
|
416
|
+
* Grammar:
|
|
417
|
+
* ```holoscript
|
|
418
|
+
* world_chunk dockside {
|
|
419
|
+
* bounds: ((-200, 0, -200), (200, 100, 200))
|
|
420
|
+
* priority: "high"
|
|
421
|
+
* lod_distances: [50, 150, 400]
|
|
422
|
+
* biome: "coastal_urban"
|
|
423
|
+
* npc_roster: ["merchant_alva", "harbor_guard_01"]
|
|
424
|
+
* streaming {
|
|
425
|
+
* load_radius: 300
|
|
426
|
+
* unload_radius: 500
|
|
427
|
+
* budget_kb: 32768
|
|
428
|
+
* }
|
|
429
|
+
* }
|
|
430
|
+
* ```
|
|
431
|
+
*/
|
|
432
|
+
export interface HoloWorldChunk extends HoloNode {
|
|
433
|
+
type: 'WorldChunk';
|
|
434
|
+
name: string;
|
|
435
|
+
/** Streaming priority hint ('high' | 'medium' | 'low' | number) */
|
|
436
|
+
priority?: string | number;
|
|
437
|
+
/** Biome identifier string */
|
|
438
|
+
biome?: string;
|
|
439
|
+
/** LOD switch distances in metres */
|
|
440
|
+
lodDistances?: number[];
|
|
441
|
+
/** Asset paths declared in the chunk manifest */
|
|
442
|
+
assetManifest?: string[];
|
|
443
|
+
/** NPC names present in this chunk (references to npc declarations) */
|
|
444
|
+
npcRoster?: string[];
|
|
445
|
+
/** Spawn point positions */
|
|
446
|
+
spawnPoints?: HoloPosition[];
|
|
447
|
+
/** Streaming sub-block properties */
|
|
448
|
+
streaming?: Record<string, HoloValue>;
|
|
449
|
+
/** Raw key-value properties for extensibility */
|
|
450
|
+
properties: Record<string, HoloValue>;
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* A typed phasing predicate: a player is "in" the layer iff their completion of
|
|
454
|
+
* `questId` matches `mustBeCompleted`. The questId is compile-validated against
|
|
455
|
+
* the composition's declared quests — an unknown quest is a compile error, not a
|
|
456
|
+
* runtime surprise (the "phasing as a typed verifiable predicate" claim).
|
|
457
|
+
*/
|
|
458
|
+
export interface HoloPhasePredicate {
|
|
459
|
+
type: 'PhasePredicate';
|
|
460
|
+
kind: 'quest_flag';
|
|
461
|
+
questId: string;
|
|
462
|
+
/** true = visible AFTER the quest is completed; false = visible BEFORE. */
|
|
463
|
+
mustBeCompleted: boolean;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* A world_layer block: content (NPCs/objects, referenced by name) that exists in
|
|
467
|
+
* the same world coordinates but is gated to players whose phase predicate holds.
|
|
468
|
+
*
|
|
469
|
+
* Syntax:
|
|
470
|
+
* world_layer post_awakening {
|
|
471
|
+
* requires_quest: "main_chapter_1" // forbids_quest for the inverse
|
|
472
|
+
* npcs: ["restored_keeper", "vigilant_guard"]
|
|
473
|
+
* objects: ["healed_shrine"]
|
|
474
|
+
* }
|
|
475
|
+
*/
|
|
476
|
+
export interface HoloWorldLayer extends HoloNode {
|
|
477
|
+
type: 'WorldLayer';
|
|
478
|
+
name: string;
|
|
479
|
+
predicate: HoloPhasePredicate;
|
|
480
|
+
/** NPC names gated to this layer (references to npc declarations). */
|
|
481
|
+
npcs: string[];
|
|
482
|
+
/** Object names gated to this layer. */
|
|
483
|
+
objects: string[];
|
|
484
|
+
/** Raw key-value properties for extensibility. */
|
|
485
|
+
properties: Record<string, HoloValue>;
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* A dungeon_instance block: instanced content (a dungeon/raid) spun up on demand,
|
|
489
|
+
* one live instance per party, capped at `maxInstances`. Completion emits a
|
|
490
|
+
* receipt sealed against the party + instance, and (optionally) sets a quest flag.
|
|
491
|
+
*
|
|
492
|
+
* Syntax:
|
|
493
|
+
* dungeon_instance shadowfen_keep {
|
|
494
|
+
* max_instances: 10
|
|
495
|
+
* party_size: 5
|
|
496
|
+
* reset_timer: 3600 // seconds an empty instance lingers before release
|
|
497
|
+
* completion_quest: "shadowfen_cleared" // compile-validated against declared quests
|
|
498
|
+
* npcs: ["dungeon_boss", "shadow_acolyte"]
|
|
499
|
+
* }
|
|
500
|
+
*/
|
|
501
|
+
export interface HoloDungeonInstance extends HoloNode {
|
|
502
|
+
type: 'DungeonInstance';
|
|
503
|
+
name: string;
|
|
504
|
+
/** Max concurrent live instances (pool cap). */
|
|
505
|
+
maxInstances: number;
|
|
506
|
+
/** Players per instance. */
|
|
507
|
+
partySize: number;
|
|
508
|
+
/** Seconds an empty instance lingers before release (0 = release immediately). */
|
|
509
|
+
resetTimer: number;
|
|
510
|
+
/** Quest id set on completion (compile-validated). Empty = no quest flag. */
|
|
511
|
+
completionQuest: string;
|
|
512
|
+
/** NPC names that populate the instance. */
|
|
513
|
+
npcs: string[];
|
|
514
|
+
/** Object names that populate the instance. */
|
|
515
|
+
objects: string[];
|
|
516
|
+
/** Raw key-value properties for extensibility. */
|
|
517
|
+
properties: Record<string, HoloValue>;
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* A world_shard block: an axis-aligned partition of a single world, hosted as its
|
|
521
|
+
* own room. A player crossing into a neighbor shard is handed off; the handoff is
|
|
522
|
+
* receipt-sealed and validated (the target must be a declared NEIGHBOR and the
|
|
523
|
+
* position must be inside its bounds — anti-teleport).
|
|
524
|
+
*
|
|
525
|
+
* Syntax:
|
|
526
|
+
* world_shard north_province {
|
|
527
|
+
* min: [-1000, 0, -1000]
|
|
528
|
+
* max: [0, 256, 1000]
|
|
529
|
+
* neighbors: ["south_province", "east_province"]
|
|
530
|
+
* max_players: 200
|
|
531
|
+
* handoff: "seamless" // or "loading"
|
|
532
|
+
* }
|
|
533
|
+
*/
|
|
534
|
+
export interface HoloWorldShard extends HoloNode {
|
|
535
|
+
type: 'WorldShard';
|
|
536
|
+
name: string;
|
|
537
|
+
/** AABB minimum corner [x, y, z]. */
|
|
538
|
+
min: [number, number, number];
|
|
539
|
+
/** AABB maximum corner [x, y, z]. */
|
|
540
|
+
max: [number, number, number];
|
|
541
|
+
/** Names of adjacent shards a player may be handed off to (compile-validated). */
|
|
542
|
+
neighbors: string[];
|
|
543
|
+
/** Max players hosted in this shard's room. */
|
|
544
|
+
maxPlayers: number;
|
|
545
|
+
/** Handoff style on a border crossing ('seamless' | 'loading'). */
|
|
546
|
+
handoff: string;
|
|
547
|
+
/** Raw key-value properties for extensibility. */
|
|
548
|
+
properties: Record<string, HoloValue>;
|
|
549
|
+
}
|
|
550
|
+
export interface HoloWorld extends HoloNode {
|
|
551
|
+
type: 'World';
|
|
552
|
+
id?: string;
|
|
553
|
+
name?: string;
|
|
554
|
+
bounds?: HoloObject;
|
|
555
|
+
properties?: HoloWorldProperty[];
|
|
556
|
+
children?: HoloObjectDecl[];
|
|
557
|
+
}
|
|
558
|
+
export interface HoloWorldProperty extends HoloNode {
|
|
559
|
+
type: 'WorldProperty';
|
|
560
|
+
key: string;
|
|
561
|
+
value: HoloValue;
|
|
562
|
+
}
|
|
563
|
+
export interface HoloUI extends HoloNode {
|
|
564
|
+
type: 'UI';
|
|
565
|
+
elements: HoloUIElement[];
|
|
566
|
+
}
|
|
567
|
+
export interface HoloUIElement extends HoloNode {
|
|
568
|
+
type: 'UIElement';
|
|
569
|
+
name: string;
|
|
570
|
+
properties: HoloUIProperty[];
|
|
571
|
+
}
|
|
572
|
+
export interface HoloUIProperty extends HoloNode {
|
|
573
|
+
type: 'UIProperty';
|
|
574
|
+
key: string;
|
|
575
|
+
value: HoloValue;
|
|
576
|
+
}
|
|
577
|
+
export interface HoloTransition extends HoloNode {
|
|
578
|
+
type: 'Transition';
|
|
579
|
+
name: string;
|
|
580
|
+
properties: HoloTransitionProperty[];
|
|
581
|
+
}
|
|
582
|
+
export interface HoloTransitionProperty extends HoloNode {
|
|
583
|
+
type: 'TransitionProperty';
|
|
584
|
+
key: string;
|
|
585
|
+
value: HoloValue;
|
|
586
|
+
}
|
|
587
|
+
export interface HoloConditionalBlock extends HoloNode {
|
|
588
|
+
type: 'ConditionalBlock';
|
|
589
|
+
condition: string;
|
|
590
|
+
objects: HoloObjectDecl[];
|
|
591
|
+
spatialGroups?: HoloSpatialGroup[];
|
|
592
|
+
elseObjects?: HoloObjectDecl[];
|
|
593
|
+
elseSpatialGroups?: HoloSpatialGroup[];
|
|
594
|
+
}
|
|
595
|
+
export interface HoloForEachBlock extends HoloNode {
|
|
596
|
+
type: 'ForEachBlock';
|
|
597
|
+
variable: string;
|
|
598
|
+
iterable: string;
|
|
599
|
+
objects: HoloObjectDecl[];
|
|
600
|
+
spatialGroups?: HoloSpatialGroup[];
|
|
601
|
+
}
|
|
602
|
+
export interface HoloState extends HoloNode {
|
|
603
|
+
type: 'State';
|
|
604
|
+
properties: HoloStateProperty[];
|
|
605
|
+
}
|
|
606
|
+
export interface HoloStateProperty extends HoloNode {
|
|
607
|
+
type: 'StateProperty';
|
|
608
|
+
key: string;
|
|
609
|
+
value: HoloValue;
|
|
610
|
+
reactive?: boolean;
|
|
611
|
+
}
|
|
612
|
+
export interface HoloTemplate extends HoloNode {
|
|
613
|
+
type: 'Template';
|
|
614
|
+
name: string;
|
|
615
|
+
version?: number;
|
|
616
|
+
migrations?: HoloMigration[];
|
|
617
|
+
properties: HoloTemplateProperty[];
|
|
618
|
+
state?: HoloState;
|
|
619
|
+
actions: HoloAction[];
|
|
620
|
+
traits: HoloObjectTrait[];
|
|
621
|
+
directives?: unknown[];
|
|
622
|
+
/** @platform() conditional compilation constraint */
|
|
623
|
+
platformConstraint?: PlatformConstraint;
|
|
624
|
+
}
|
|
625
|
+
export interface HoloMigration extends HoloNode {
|
|
626
|
+
type: 'Migration';
|
|
627
|
+
fromVersion: number;
|
|
628
|
+
body: unknown;
|
|
629
|
+
}
|
|
630
|
+
export interface HoloTemplateProperty extends HoloNode {
|
|
631
|
+
type: 'TemplateProperty';
|
|
632
|
+
key: string;
|
|
633
|
+
value: HoloValue;
|
|
634
|
+
}
|
|
635
|
+
/**
|
|
636
|
+
* Scene object declaration in a `.holo` composition.
|
|
637
|
+
*
|
|
638
|
+
* **Asset maturity (draft → mesh → final)** — optional `ObjectProperty` keys
|
|
639
|
+
* consumed by `R3FCompiler.compileObjectDecl`:
|
|
640
|
+
* - `maturity`: `"draft"` | `"mesh"` | `"final"` — sets `R3FNode.assetMaturity`
|
|
641
|
+
* - `promoteUrl` / `promote_url`: string — GLB/URL for draft→mesh promotion (passed to `R3FNode.props`)
|
|
642
|
+
* - `collisionShape` / `collision_shape`: string — collision proxy hint (passed to `R3FNode.props`)
|
|
643
|
+
* The `@draft` trait also forces `assetMaturity: 'draft'` and draft rendering props.
|
|
644
|
+
*/
|
|
645
|
+
export interface HoloObjectDecl extends HoloNode {
|
|
646
|
+
type: 'Object' | 'ObjectDecl';
|
|
647
|
+
id?: string;
|
|
648
|
+
name: string;
|
|
649
|
+
position?: HoloPosition;
|
|
650
|
+
scale?: HoloPosition;
|
|
651
|
+
rotation?: HoloPosition;
|
|
652
|
+
declarationKind?: 'object' | 'instanced_object' | string;
|
|
653
|
+
instanceMetadata?: HoloInstancedObjectMetadata;
|
|
654
|
+
__holo_id?: string;
|
|
655
|
+
template?: string;
|
|
656
|
+
properties: HoloObjectProperty[];
|
|
657
|
+
state?: HoloState;
|
|
658
|
+
traits: HoloObjectTrait[];
|
|
659
|
+
directives?: unknown[];
|
|
660
|
+
children?: HoloObjectDecl[];
|
|
661
|
+
subOrbs?: HoloSubOrb[];
|
|
662
|
+
/** @platform() conditional compilation constraint */
|
|
663
|
+
platformConstraint?: PlatformConstraint;
|
|
664
|
+
}
|
|
665
|
+
export interface HoloInstancedObjectMetadata extends HoloNode {
|
|
666
|
+
type: 'InstancedObjectMetadata';
|
|
667
|
+
sourceTrait?: string;
|
|
668
|
+
instanceTraits: string[];
|
|
669
|
+
count?: number;
|
|
670
|
+
anchor?: string;
|
|
671
|
+
seed?: HoloValue;
|
|
672
|
+
generator?: HoloValue;
|
|
673
|
+
properties: Record<string, HoloValue>;
|
|
674
|
+
traits: HoloObjectTrait[];
|
|
675
|
+
}
|
|
676
|
+
export interface HoloSubOrb extends HoloNode {
|
|
677
|
+
type: 'SubOrb';
|
|
678
|
+
name: string;
|
|
679
|
+
source: string;
|
|
680
|
+
properties: HoloObjectProperty[];
|
|
681
|
+
}
|
|
682
|
+
export interface HoloObjectTrait extends HoloNode {
|
|
683
|
+
type: 'ObjectTrait';
|
|
684
|
+
name: string;
|
|
685
|
+
config: Record<string, HoloValue>;
|
|
686
|
+
params?: Record<string, HoloValue>;
|
|
687
|
+
/** Positional arguments for traits (e.g. @trait(arg1, arg2)) */
|
|
688
|
+
args?: HoloValue[];
|
|
689
|
+
/** @platform() conditional compilation constraint for trait-level variants */
|
|
690
|
+
platformConstraint?: PlatformConstraint;
|
|
691
|
+
}
|
|
692
|
+
/**
|
|
693
|
+
* A user-defined trait declaration in HoloScript.
|
|
694
|
+
*
|
|
695
|
+
* Grammar (tree-sitter-holoscript grammar.js line 214-222):
|
|
696
|
+
* ```
|
|
697
|
+
* trait Clickable extends Interactable {
|
|
698
|
+
* cursor: "pointer"
|
|
699
|
+
* highlight: true
|
|
700
|
+
* }
|
|
701
|
+
* ```
|
|
702
|
+
*
|
|
703
|
+
* When `extends` is present, the trait inherits all properties, event handlers,
|
|
704
|
+
* and actions from the parent trait. Child properties override parent properties
|
|
705
|
+
* with the same key.
|
|
706
|
+
*/
|
|
707
|
+
export interface HoloTraitDefinition extends HoloNode {
|
|
708
|
+
type: 'TraitDefinition';
|
|
709
|
+
/** Name of the trait being defined */
|
|
710
|
+
name: string;
|
|
711
|
+
/** Parent trait name (from `extends` clause), or undefined if no inheritance */
|
|
712
|
+
base?: string;
|
|
713
|
+
/** Properties declared directly in this trait (not including inherited) */
|
|
714
|
+
properties: HoloTraitProperty[];
|
|
715
|
+
/** Event handlers declared in this trait */
|
|
716
|
+
eventHandlers?: HoloEventHandler[];
|
|
717
|
+
/** Actions declared in this trait */
|
|
718
|
+
actions?: HoloAction[];
|
|
719
|
+
}
|
|
720
|
+
export interface HoloTraitProperty extends HoloNode {
|
|
721
|
+
type: 'TraitProperty';
|
|
722
|
+
key: string;
|
|
723
|
+
value: HoloValue;
|
|
724
|
+
}
|
|
725
|
+
export interface HoloObjectProperty extends HoloNode {
|
|
726
|
+
type: 'ObjectProperty';
|
|
727
|
+
key: string;
|
|
728
|
+
value: HoloValue;
|
|
729
|
+
}
|
|
730
|
+
export interface HoloShape extends HoloNode {
|
|
731
|
+
type: 'Shape';
|
|
732
|
+
name: string;
|
|
733
|
+
shapeType: string;
|
|
734
|
+
properties: HoloShapeProperty[];
|
|
735
|
+
}
|
|
736
|
+
export interface HoloShapeProperty extends HoloNode {
|
|
737
|
+
type: 'ShapeProperty';
|
|
738
|
+
key: string;
|
|
739
|
+
value: HoloValue;
|
|
740
|
+
}
|
|
741
|
+
export interface HoloSpatialGroup extends HoloNode {
|
|
742
|
+
type: 'SpatialGroup';
|
|
743
|
+
id?: string;
|
|
744
|
+
name: string;
|
|
745
|
+
properties: HoloGroupProperty[];
|
|
746
|
+
objects: HoloObjectDecl[];
|
|
747
|
+
lights?: HoloLight[];
|
|
748
|
+
groups?: HoloSpatialGroup[];
|
|
749
|
+
body?: HoloStatement[];
|
|
750
|
+
/** @platform() conditional compilation constraint */
|
|
751
|
+
platformConstraint?: PlatformConstraint;
|
|
752
|
+
}
|
|
753
|
+
export interface HoloGroupProperty extends HoloNode {
|
|
754
|
+
type: 'GroupProperty';
|
|
755
|
+
key: string;
|
|
756
|
+
value: HoloValue;
|
|
757
|
+
}
|
|
758
|
+
export interface HoloLogic extends HoloNode {
|
|
759
|
+
type: 'Logic';
|
|
760
|
+
handlers: HoloEventHandler[];
|
|
761
|
+
actions: HoloAction[];
|
|
762
|
+
}
|
|
763
|
+
export interface HoloEventHandler extends HoloNode {
|
|
764
|
+
type: 'EventHandler';
|
|
765
|
+
event: string;
|
|
766
|
+
parameters: HoloParameter[];
|
|
767
|
+
body: HoloStatement[];
|
|
768
|
+
}
|
|
769
|
+
export interface HoloAction extends HoloNode {
|
|
770
|
+
type: 'Action';
|
|
771
|
+
name: string;
|
|
772
|
+
parameters: HoloParameter[];
|
|
773
|
+
body: HoloStatement[];
|
|
774
|
+
async?: boolean;
|
|
775
|
+
}
|
|
776
|
+
export interface HoloParameter extends HoloNode {
|
|
777
|
+
type: 'Parameter';
|
|
778
|
+
name: string;
|
|
779
|
+
paramType?: string;
|
|
780
|
+
defaultValue?: HoloValue;
|
|
781
|
+
}
|
|
782
|
+
export type HoloStatement = HoloAssignment | HoloMethodCall | HoloIfStatement | HoloForStatement | HoloWhileStatement | HoloClassicForStatement | HoloVariableDeclaration | HoloAwaitStatement | HoloReturnStatement | HoloEmitStatement | HoloAnimateStatement | HoloOnErrorStatement | HoloExpressionStatement;
|
|
783
|
+
export interface HoloWhileStatement extends HoloNode {
|
|
784
|
+
type: 'WhileStatement';
|
|
785
|
+
condition: HoloExpression;
|
|
786
|
+
body: HoloStatement[];
|
|
787
|
+
}
|
|
788
|
+
export interface HoloOnErrorStatement extends HoloNode {
|
|
789
|
+
type: 'OnErrorStatement';
|
|
790
|
+
body: HoloStatement[];
|
|
791
|
+
}
|
|
792
|
+
export interface HoloAssignment extends HoloNode {
|
|
793
|
+
type: 'Assignment';
|
|
794
|
+
target: string;
|
|
795
|
+
operator: '=' | '+=' | '-=' | '*=' | '/=';
|
|
796
|
+
value: HoloExpression;
|
|
797
|
+
}
|
|
798
|
+
export interface HoloMethodCall extends HoloNode {
|
|
799
|
+
type: 'MethodCall';
|
|
800
|
+
object?: string;
|
|
801
|
+
method: string;
|
|
802
|
+
arguments: HoloExpression[];
|
|
803
|
+
}
|
|
804
|
+
export interface HoloIfStatement extends HoloNode {
|
|
805
|
+
type: 'IfStatement';
|
|
806
|
+
condition: HoloExpression;
|
|
807
|
+
consequent: HoloStatement[];
|
|
808
|
+
alternate?: HoloStatement[];
|
|
809
|
+
}
|
|
810
|
+
export interface HoloClassicForStatement extends HoloNode {
|
|
811
|
+
type: 'ClassicForStatement';
|
|
812
|
+
init?: HoloStatement;
|
|
813
|
+
test?: HoloExpression;
|
|
814
|
+
update?: HoloStatement;
|
|
815
|
+
body: HoloStatement[];
|
|
816
|
+
}
|
|
817
|
+
export interface HoloVariableDeclaration extends HoloNode {
|
|
818
|
+
type: 'VariableDeclaration';
|
|
819
|
+
kind: 'let' | 'var' | 'const';
|
|
820
|
+
name: string;
|
|
821
|
+
value?: HoloExpression;
|
|
822
|
+
}
|
|
823
|
+
export interface HoloForStatement extends HoloNode {
|
|
824
|
+
type: 'ForStatement';
|
|
825
|
+
variable: string;
|
|
826
|
+
iterable: HoloExpression;
|
|
827
|
+
body: HoloStatement[];
|
|
828
|
+
}
|
|
829
|
+
export interface HoloAwaitStatement extends HoloNode {
|
|
830
|
+
type: 'AwaitStatement';
|
|
831
|
+
expression: HoloExpression;
|
|
832
|
+
}
|
|
833
|
+
export interface HoloReturnStatement extends HoloNode {
|
|
834
|
+
type: 'ReturnStatement';
|
|
835
|
+
value?: HoloExpression;
|
|
836
|
+
}
|
|
837
|
+
export interface HoloEmitStatement extends HoloNode {
|
|
838
|
+
type: 'EmitStatement';
|
|
839
|
+
event: string;
|
|
840
|
+
data?: HoloExpression;
|
|
841
|
+
}
|
|
842
|
+
export interface HoloAnimateStatement extends HoloNode {
|
|
843
|
+
type: 'AnimateStatement';
|
|
844
|
+
target: string;
|
|
845
|
+
properties: Record<string, HoloValue>;
|
|
846
|
+
}
|
|
847
|
+
export interface HoloExpressionStatement extends HoloNode {
|
|
848
|
+
type: 'ExpressionStatement';
|
|
849
|
+
expression: HoloExpression;
|
|
850
|
+
}
|
|
851
|
+
export type HoloExpression = HoloLiteral | HoloIdentifier | HoloBinaryExpression | HoloUnaryExpression | HoloMemberExpression | HoloCallExpression | HoloArrayExpression | HoloObjectExpression | HoloConditionalExpression | HoloUpdateExpression | HoloBindExpression;
|
|
852
|
+
export interface HoloLiteral extends HoloNode {
|
|
853
|
+
type: 'Literal';
|
|
854
|
+
value: string | number | boolean | null;
|
|
855
|
+
}
|
|
856
|
+
export interface HoloIdentifier extends HoloNode {
|
|
857
|
+
type: 'Identifier';
|
|
858
|
+
name: string;
|
|
859
|
+
}
|
|
860
|
+
export interface HoloBinaryExpression extends HoloNode {
|
|
861
|
+
type: 'BinaryExpression';
|
|
862
|
+
operator: string;
|
|
863
|
+
left: HoloExpression;
|
|
864
|
+
right: HoloExpression;
|
|
865
|
+
}
|
|
866
|
+
export interface HoloUnaryExpression extends HoloNode {
|
|
867
|
+
type: 'UnaryExpression';
|
|
868
|
+
operator: '!' | '-';
|
|
869
|
+
argument: HoloExpression;
|
|
870
|
+
}
|
|
871
|
+
export interface HoloMemberExpression extends HoloNode {
|
|
872
|
+
type: 'MemberExpression';
|
|
873
|
+
object: HoloExpression;
|
|
874
|
+
property: string;
|
|
875
|
+
computed: boolean;
|
|
876
|
+
}
|
|
877
|
+
export interface HoloCallExpression extends HoloNode {
|
|
878
|
+
type: 'CallExpression';
|
|
879
|
+
callee: HoloExpression;
|
|
880
|
+
arguments: HoloExpression[];
|
|
881
|
+
}
|
|
882
|
+
export interface HoloArrayExpression extends HoloNode {
|
|
883
|
+
type: 'ArrayExpression';
|
|
884
|
+
elements: HoloExpression[];
|
|
885
|
+
}
|
|
886
|
+
export interface HoloObjectExpression extends HoloNode {
|
|
887
|
+
type: 'ObjectExpression';
|
|
888
|
+
properties: {
|
|
889
|
+
key: string;
|
|
890
|
+
value: HoloExpression;
|
|
891
|
+
}[];
|
|
892
|
+
}
|
|
893
|
+
export interface HoloConditionalExpression extends HoloNode {
|
|
894
|
+
type: 'ConditionalExpression';
|
|
895
|
+
test: HoloExpression;
|
|
896
|
+
consequent: HoloExpression;
|
|
897
|
+
alternate: HoloExpression;
|
|
898
|
+
}
|
|
899
|
+
export interface HoloUpdateExpression extends HoloNode {
|
|
900
|
+
type: 'UpdateExpression';
|
|
901
|
+
operator: '++' | '--';
|
|
902
|
+
argument: HoloExpression;
|
|
903
|
+
prefix: boolean;
|
|
904
|
+
}
|
|
905
|
+
export interface HoloBindExpression extends HoloNode {
|
|
906
|
+
type: 'BindExpression';
|
|
907
|
+
source: string;
|
|
908
|
+
transform?: string;
|
|
909
|
+
}
|
|
910
|
+
/** Legacy import node type used by HoloCompositionParser */
|
|
911
|
+
export interface HoloImport extends HoloNode {
|
|
912
|
+
type: 'Import';
|
|
913
|
+
specifiers: HoloImportSpecifier[];
|
|
914
|
+
source: string;
|
|
915
|
+
}
|
|
916
|
+
export interface HoloImportSpecifier extends HoloNode {
|
|
917
|
+
type: 'ImportSpecifier';
|
|
918
|
+
imported: string;
|
|
919
|
+
local?: string;
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* AST node for @import directives produced by HoloScriptPlusParser.
|
|
923
|
+
*
|
|
924
|
+
* Supported syntax forms:
|
|
925
|
+
* @import "./path.hs"
|
|
926
|
+
* @import "./path.hs" as Alias
|
|
927
|
+
* @import { A, B } from "./path.hs"
|
|
928
|
+
* @import * as NS from "./path.hs"
|
|
929
|
+
*/
|
|
930
|
+
export interface ImportDirective extends HoloNode {
|
|
931
|
+
type: 'import';
|
|
932
|
+
/** Raw import path string as written in source */
|
|
933
|
+
path: string;
|
|
934
|
+
/** Derived or explicit alias (filename stem if not specified) */
|
|
935
|
+
alias: string;
|
|
936
|
+
/** Named exports to import. Undefined means "all under alias namespace". */
|
|
937
|
+
namedImports?: string[];
|
|
938
|
+
/** True for `@import * as NS from "./f.hs"` form */
|
|
939
|
+
isWildcard?: boolean;
|
|
940
|
+
}
|
|
941
|
+
/**
|
|
942
|
+
* AST node for @export directives produced by HoloScriptPlusParser.
|
|
943
|
+
*
|
|
944
|
+
* Supported syntax forms:
|
|
945
|
+
* @export template "MyTemplate"
|
|
946
|
+
* @export object "MyObject"
|
|
947
|
+
* @export "NamedThing"
|
|
948
|
+
* @export (anonymous — exports the next node)
|
|
949
|
+
*/
|
|
950
|
+
export interface ExportDirective extends HoloNode {
|
|
951
|
+
type: 'export';
|
|
952
|
+
/** The kind of thing being exported: 'template' | 'object' | 'composition' | 'trait' | 'any' */
|
|
953
|
+
exportKind: 'template' | 'object' | 'composition' | 'trait' | 'group' | 'scene' | 'any';
|
|
954
|
+
/** The exported name, if specified explicitly */
|
|
955
|
+
exportName?: string;
|
|
956
|
+
}
|
|
957
|
+
export interface HoloParseResult {
|
|
958
|
+
success: boolean;
|
|
959
|
+
ast?: HoloComposition;
|
|
960
|
+
errors: HoloParseError[];
|
|
961
|
+
warnings: HoloParseWarning[];
|
|
962
|
+
}
|
|
963
|
+
export interface HoloParseError {
|
|
964
|
+
message: string;
|
|
965
|
+
loc?: SourceLocation;
|
|
966
|
+
code?: string;
|
|
967
|
+
suggestion?: string;
|
|
968
|
+
severity?: 'error' | 'warning';
|
|
969
|
+
}
|
|
970
|
+
export interface HoloParseWarning {
|
|
971
|
+
message: string;
|
|
972
|
+
loc?: SourceLocation;
|
|
973
|
+
code?: string;
|
|
974
|
+
}
|
|
975
|
+
/**
|
|
976
|
+
* Typed AI-agency attachment for a scene object (currently NPCs).
|
|
977
|
+
*
|
|
978
|
+
* Makes "this object has AI agency" a first-class IR node a compiler/analyzer
|
|
979
|
+
* can reason about WITHOUT running the trait runtime — brain kind, autonomy
|
|
980
|
+
* envelope, tool permissions, and model binding are all statically inspectable.
|
|
981
|
+
*/
|
|
982
|
+
export interface AgentBrainAttachment extends HoloNode {
|
|
983
|
+
type: 'AgentBrainAttachment';
|
|
984
|
+
/** Kind of agent brain driving this object. */
|
|
985
|
+
brainType: 'llm' | 'behavior-tree' | 'state-machine' | 'scripted' | 'hybrid' | 'remote';
|
|
986
|
+
/** How much independent action the agent is permitted. */
|
|
987
|
+
autonomy?: 'reactive' | 'deliberative' | 'autonomous' | 'supervised';
|
|
988
|
+
/** Reference to a brain/skill definition by id (e.g. a .hsplus brain skill). */
|
|
989
|
+
brainRef?: string;
|
|
990
|
+
/** Names of tools/abilities this brain is permitted to invoke. */
|
|
991
|
+
toolPermissions?: string[];
|
|
992
|
+
/** Model binding for llm/hybrid brains. Provider aligns with ModelProvider. */
|
|
993
|
+
model?: {
|
|
994
|
+
provider?: 'anthropic' | 'openai' | 'local' | 'ollama' | 'custom';
|
|
995
|
+
name?: string;
|
|
996
|
+
temperature?: number;
|
|
997
|
+
maxTokens?: number;
|
|
998
|
+
};
|
|
999
|
+
/** Raw additional brain config not captured by typed fields. */
|
|
1000
|
+
config?: Record<string, HoloValue>;
|
|
1001
|
+
}
|
|
1002
|
+
export interface HoloNPC extends HoloNode {
|
|
1003
|
+
type: 'NPC';
|
|
1004
|
+
name: string;
|
|
1005
|
+
npcType?: string;
|
|
1006
|
+
model?: string;
|
|
1007
|
+
/** Spatial anchor for the agent (same canonical position type as objects). */
|
|
1008
|
+
position?: HoloPosition;
|
|
1009
|
+
/** First-class AI-agency attachment — replaces the opaque config bag for agency reasoning. */
|
|
1010
|
+
brain?: AgentBrainAttachment;
|
|
1011
|
+
properties: HoloNPCProperty[];
|
|
1012
|
+
behaviors: HoloBehavior[];
|
|
1013
|
+
state?: HoloState;
|
|
1014
|
+
dialogueTree?: string;
|
|
1015
|
+
/** @decorator { config } trait blocks attached to the NPC body (e.g. @verbalFingerprint, @reputationLedger). */
|
|
1016
|
+
traits?: HoloObjectTrait[];
|
|
1017
|
+
/** action name(...) { ... } and on eventName(...) { ... } members declared in the NPC body. */
|
|
1018
|
+
directives?: Array<Record<string, unknown>>;
|
|
1019
|
+
}
|
|
1020
|
+
export interface HoloNPCProperty extends HoloNode {
|
|
1021
|
+
type: 'NPCProperty';
|
|
1022
|
+
key: string;
|
|
1023
|
+
value: HoloValue;
|
|
1024
|
+
}
|
|
1025
|
+
export interface HoloBehavior extends HoloNode {
|
|
1026
|
+
type: 'Behavior';
|
|
1027
|
+
name: string;
|
|
1028
|
+
trigger: string;
|
|
1029
|
+
condition?: HoloExpression;
|
|
1030
|
+
actions: HoloBehaviorAction[];
|
|
1031
|
+
timeout?: number;
|
|
1032
|
+
priority?: number;
|
|
1033
|
+
}
|
|
1034
|
+
export interface HoloBehaviorAction extends HoloNode {
|
|
1035
|
+
type: 'BehaviorAction';
|
|
1036
|
+
actionType: 'move' | 'animate' | 'face' | 'damage' | 'heal' | 'spawn' | 'emit' | 'wait' | 'call';
|
|
1037
|
+
config: Record<string, HoloValue>;
|
|
1038
|
+
}
|
|
1039
|
+
export interface HoloQuest extends HoloNode {
|
|
1040
|
+
type: 'Quest';
|
|
1041
|
+
name: string;
|
|
1042
|
+
giver?: string;
|
|
1043
|
+
level?: number;
|
|
1044
|
+
questType?: 'fetch' | 'defeat' | 'discover' | 'escort' | 'deliver' | 'custom';
|
|
1045
|
+
objectives: HoloQuestObjective[];
|
|
1046
|
+
rewards: HoloQuestRewards;
|
|
1047
|
+
branches?: HoloQuestBranch[];
|
|
1048
|
+
prerequisites?: string[];
|
|
1049
|
+
}
|
|
1050
|
+
export interface HoloQuestObjective extends HoloNode {
|
|
1051
|
+
type: 'QuestObjective';
|
|
1052
|
+
id: string;
|
|
1053
|
+
description: string;
|
|
1054
|
+
objectiveType: 'discover' | 'defeat' | 'collect' | 'deliver' | 'interact' | 'survive';
|
|
1055
|
+
target: string | HoloExpression;
|
|
1056
|
+
count?: number;
|
|
1057
|
+
optional?: boolean;
|
|
1058
|
+
}
|
|
1059
|
+
export interface HoloQuestRewards extends HoloNode {
|
|
1060
|
+
type: 'QuestRewards';
|
|
1061
|
+
experience?: number;
|
|
1062
|
+
gold?: number;
|
|
1063
|
+
items?: HoloQuestRewardItem[];
|
|
1064
|
+
reputation?: Record<string, number>;
|
|
1065
|
+
unlocks?: string[];
|
|
1066
|
+
}
|
|
1067
|
+
export interface HoloQuestRewardItem extends HoloNode {
|
|
1068
|
+
type: 'QuestRewardItem';
|
|
1069
|
+
id: string;
|
|
1070
|
+
count?: number;
|
|
1071
|
+
rarity?: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary';
|
|
1072
|
+
}
|
|
1073
|
+
export interface HoloQuestBranch extends HoloNode {
|
|
1074
|
+
type: 'QuestBranch';
|
|
1075
|
+
condition: HoloExpression;
|
|
1076
|
+
text?: string;
|
|
1077
|
+
rewardMultiplier?: number;
|
|
1078
|
+
nextQuest?: string;
|
|
1079
|
+
}
|
|
1080
|
+
export interface HoloAbility extends HoloNode {
|
|
1081
|
+
type: 'Ability';
|
|
1082
|
+
name: string;
|
|
1083
|
+
abilityType: 'spell' | 'skill' | 'passive' | 'ultimate';
|
|
1084
|
+
class?: string;
|
|
1085
|
+
level?: number;
|
|
1086
|
+
stats: HoloAbilityStats;
|
|
1087
|
+
scaling?: HoloAbilityScaling;
|
|
1088
|
+
effects: HoloAbilityEffects;
|
|
1089
|
+
projectile?: HoloAbilityProjectile;
|
|
1090
|
+
}
|
|
1091
|
+
export interface HoloAbilityStats extends HoloNode {
|
|
1092
|
+
type: 'AbilityStats';
|
|
1093
|
+
manaCost?: number;
|
|
1094
|
+
staminaCost?: number;
|
|
1095
|
+
cooldown?: number;
|
|
1096
|
+
castTime?: number;
|
|
1097
|
+
range?: number;
|
|
1098
|
+
radius?: number;
|
|
1099
|
+
duration?: number;
|
|
1100
|
+
}
|
|
1101
|
+
export interface HoloAbilityScaling extends HoloNode {
|
|
1102
|
+
type: 'AbilityScaling';
|
|
1103
|
+
baseDamage?: number;
|
|
1104
|
+
spellPower?: number;
|
|
1105
|
+
attackPower?: number;
|
|
1106
|
+
levelScale?: number;
|
|
1107
|
+
}
|
|
1108
|
+
export interface HoloAbilityEffects extends HoloNode {
|
|
1109
|
+
type: 'AbilityEffects';
|
|
1110
|
+
impact?: HoloAbilityImpact;
|
|
1111
|
+
damage?: HoloAbilityDamage;
|
|
1112
|
+
buff?: HoloAbilityBuff;
|
|
1113
|
+
debuff?: HoloAbilityDebuff;
|
|
1114
|
+
}
|
|
1115
|
+
export interface HoloAbilityImpact extends HoloNode {
|
|
1116
|
+
type: 'AbilityImpact';
|
|
1117
|
+
animation?: string;
|
|
1118
|
+
particle?: string;
|
|
1119
|
+
sound?: string;
|
|
1120
|
+
shake?: {
|
|
1121
|
+
intensity: number;
|
|
1122
|
+
duration: number;
|
|
1123
|
+
};
|
|
1124
|
+
}
|
|
1125
|
+
export interface HoloAbilityDamage extends HoloNode {
|
|
1126
|
+
type: 'AbilityDamage';
|
|
1127
|
+
damageType: 'physical' | 'fire' | 'ice' | 'lightning' | 'arcane' | 'holy' | 'shadow';
|
|
1128
|
+
canCrit?: boolean;
|
|
1129
|
+
critMultiplier?: number;
|
|
1130
|
+
}
|
|
1131
|
+
export interface HoloAbilityBuff extends HoloNode {
|
|
1132
|
+
type: 'AbilityBuff';
|
|
1133
|
+
stat: string;
|
|
1134
|
+
amount: number;
|
|
1135
|
+
duration: number;
|
|
1136
|
+
stacks?: number;
|
|
1137
|
+
}
|
|
1138
|
+
export interface HoloAbilityDebuff extends HoloNode {
|
|
1139
|
+
type: 'AbilityDebuff';
|
|
1140
|
+
effect: 'slow' | 'stun' | 'silence' | 'root' | 'burn' | 'freeze' | 'poison';
|
|
1141
|
+
duration: number;
|
|
1142
|
+
magnitude?: number;
|
|
1143
|
+
}
|
|
1144
|
+
export interface HoloAbilityProjectile extends HoloNode {
|
|
1145
|
+
type: 'AbilityProjectile';
|
|
1146
|
+
model?: string;
|
|
1147
|
+
speed?: number;
|
|
1148
|
+
lifetime?: number;
|
|
1149
|
+
trail?: string;
|
|
1150
|
+
homing?: boolean;
|
|
1151
|
+
}
|
|
1152
|
+
export interface HoloDialogue extends HoloNode {
|
|
1153
|
+
type: 'Dialogue';
|
|
1154
|
+
id: string;
|
|
1155
|
+
character?: string;
|
|
1156
|
+
emotion?: 'friendly' | 'angry' | 'sad' | 'neutral' | 'excited' | 'mysterious';
|
|
1157
|
+
content: string | HoloLocalizedText;
|
|
1158
|
+
options: HoloDialogueOption[];
|
|
1159
|
+
condition?: HoloExpression;
|
|
1160
|
+
nextDialogue?: string;
|
|
1161
|
+
}
|
|
1162
|
+
export interface HoloDialogueOption extends HoloNode {
|
|
1163
|
+
type: 'DialogueOption';
|
|
1164
|
+
text: string | HoloLocalizedText;
|
|
1165
|
+
action?: HoloStatement[];
|
|
1166
|
+
unlocked?: HoloExpression;
|
|
1167
|
+
emotion?: string;
|
|
1168
|
+
next?: string;
|
|
1169
|
+
}
|
|
1170
|
+
export interface HoloLocalizedText extends HoloNode {
|
|
1171
|
+
type: 'LocalizedText';
|
|
1172
|
+
id: string;
|
|
1173
|
+
translations: Record<string, string>;
|
|
1174
|
+
fallback?: string;
|
|
1175
|
+
}
|
|
1176
|
+
export interface HoloStateMachine extends HoloNode {
|
|
1177
|
+
type: 'StateMachine';
|
|
1178
|
+
name: string;
|
|
1179
|
+
initialState: string;
|
|
1180
|
+
inputs?: HoloAnimationInput[];
|
|
1181
|
+
listeners?: HoloAnimationListener[];
|
|
1182
|
+
states: Record<string, HoloState_Machine>;
|
|
1183
|
+
transitions?: HoloStateTransition[];
|
|
1184
|
+
}
|
|
1185
|
+
export interface HoloState_Machine extends HoloNode {
|
|
1186
|
+
type: 'State_Machine';
|
|
1187
|
+
name: string;
|
|
1188
|
+
clip?: string;
|
|
1189
|
+
clips?: string[];
|
|
1190
|
+
parameter?: string;
|
|
1191
|
+
parameters?: string[];
|
|
1192
|
+
thresholds?: number[];
|
|
1193
|
+
blendType?: '1d' | 'direct';
|
|
1194
|
+
blendMode?: 'override' | 'additive';
|
|
1195
|
+
mask?: string[];
|
|
1196
|
+
baseline?: Record<string, number>;
|
|
1197
|
+
entry?: HoloStatement[];
|
|
1198
|
+
exit?: HoloStatement[];
|
|
1199
|
+
actions: HoloBehaviorAction[];
|
|
1200
|
+
transitions: HoloStateTransition[];
|
|
1201
|
+
onDamage?: HoloStatement[];
|
|
1202
|
+
timeout?: number;
|
|
1203
|
+
onTimeout?: HoloStatement[];
|
|
1204
|
+
}
|
|
1205
|
+
export interface HoloStateTransition extends HoloNode {
|
|
1206
|
+
type: 'StateTransition';
|
|
1207
|
+
from?: string | 'any';
|
|
1208
|
+
target: string;
|
|
1209
|
+
condition?: HoloExpression;
|
|
1210
|
+
conditions?: HoloAnimationTransitionCondition[];
|
|
1211
|
+
event?: string;
|
|
1212
|
+
duration?: number;
|
|
1213
|
+
easing?: string;
|
|
1214
|
+
exitTime?: number;
|
|
1215
|
+
hasExitTime?: boolean;
|
|
1216
|
+
pauseWhenExiting?: boolean;
|
|
1217
|
+
priority?: number;
|
|
1218
|
+
canTransitionToSelf?: boolean;
|
|
1219
|
+
}
|
|
1220
|
+
export type HoloAnimationInputType = 'bool' | 'float' | 'int' | 'trigger';
|
|
1221
|
+
export interface HoloAnimationInput extends HoloNode {
|
|
1222
|
+
type: 'AnimationInput';
|
|
1223
|
+
name: string;
|
|
1224
|
+
inputType: HoloAnimationInputType;
|
|
1225
|
+
rawType?: string;
|
|
1226
|
+
default?: number | boolean;
|
|
1227
|
+
}
|
|
1228
|
+
export type HoloAnimationListenerAction = 'set' | 'fire' | 'reset';
|
|
1229
|
+
export interface HoloAnimationListener extends HoloNode {
|
|
1230
|
+
type: 'AnimationListener';
|
|
1231
|
+
event: string;
|
|
1232
|
+
parameter: string;
|
|
1233
|
+
action: HoloAnimationListenerAction;
|
|
1234
|
+
value?: number | boolean | string;
|
|
1235
|
+
source?: string;
|
|
1236
|
+
}
|
|
1237
|
+
export interface HoloAnimationTransitionCondition extends HoloNode {
|
|
1238
|
+
type: 'AnimationTransitionCondition';
|
|
1239
|
+
parameter: string;
|
|
1240
|
+
operator: '==' | '!=' | '>' | '<' | '>=' | '<=';
|
|
1241
|
+
value: number | boolean | string;
|
|
1242
|
+
chain?: 'and' | 'or';
|
|
1243
|
+
}
|
|
1244
|
+
export interface HoloAchievement extends HoloNode {
|
|
1245
|
+
type: 'Achievement';
|
|
1246
|
+
name: string;
|
|
1247
|
+
description: string;
|
|
1248
|
+
points?: number;
|
|
1249
|
+
condition: HoloExpression;
|
|
1250
|
+
reward?: HoloAchievementReward;
|
|
1251
|
+
progress?: HoloExpression;
|
|
1252
|
+
hidden?: boolean;
|
|
1253
|
+
}
|
|
1254
|
+
export interface HoloAchievementReward extends HoloNode {
|
|
1255
|
+
type: 'AchievementReward';
|
|
1256
|
+
title?: string;
|
|
1257
|
+
badge?: string;
|
|
1258
|
+
bonus?: Record<string, number>;
|
|
1259
|
+
unlocks?: string[];
|
|
1260
|
+
}
|
|
1261
|
+
export interface HoloTalentTree extends HoloNode {
|
|
1262
|
+
type: 'TalentTree';
|
|
1263
|
+
name: string;
|
|
1264
|
+
class?: string;
|
|
1265
|
+
rows: HoloTalentRow[];
|
|
1266
|
+
}
|
|
1267
|
+
export interface HoloTalentRow extends HoloNode {
|
|
1268
|
+
type: 'TalentRow';
|
|
1269
|
+
tier: number;
|
|
1270
|
+
nodes: HoloTalentNode[];
|
|
1271
|
+
}
|
|
1272
|
+
export interface HoloTalentNode extends HoloNode {
|
|
1273
|
+
type: 'TalentNode';
|
|
1274
|
+
id: string;
|
|
1275
|
+
name: string;
|
|
1276
|
+
description?: string;
|
|
1277
|
+
points: number;
|
|
1278
|
+
maxPoints?: number;
|
|
1279
|
+
requires?: string[];
|
|
1280
|
+
effect: HoloTalentEffect;
|
|
1281
|
+
icon?: string;
|
|
1282
|
+
}
|
|
1283
|
+
export interface HoloTalentEffect extends HoloNode {
|
|
1284
|
+
type: 'TalentEffect';
|
|
1285
|
+
effectType: 'spell' | 'upgrade' | 'passive' | 'unlock';
|
|
1286
|
+
target?: string;
|
|
1287
|
+
bonus?: Record<string, number>;
|
|
1288
|
+
}
|
|
1289
|
+
export interface HoloParserOptions {
|
|
1290
|
+
/** Include source locations in AST nodes */
|
|
1291
|
+
locations?: boolean;
|
|
1292
|
+
/** Collect errors instead of throwing */
|
|
1293
|
+
tolerant?: boolean;
|
|
1294
|
+
/** Enable strict mode (stricter validation) */
|
|
1295
|
+
strict?: boolean;
|
|
1296
|
+
/** Source filename for error messages */
|
|
1297
|
+
filename?: string;
|
|
1298
|
+
/**
|
|
1299
|
+
* Injectable union of known trait names used to suppress false-positive
|
|
1300
|
+
* unknown-trait warnings.
|
|
1301
|
+
*
|
|
1302
|
+
* When provided, `ErrorRecovery` uses this set (instead of the built-in
|
|
1303
|
+
* `VR_TRAITS`-derived fallback) as the trait dictionary for unknown-trait
|
|
1304
|
+
* suggestions. Build it with `buildKnownTraitSet()` from
|
|
1305
|
+
* `traits/knownTraitSet` so the parser, LSP, and linter share one SSOT.
|
|
1306
|
+
*
|
|
1307
|
+
* Optional and non-breaking: when absent, behavior is exactly the current
|
|
1308
|
+
* `VR_TRAITS`-based behavior.
|
|
1309
|
+
*/
|
|
1310
|
+
knownTraits?: ReadonlySet<string>;
|
|
1311
|
+
}
|
|
1312
|
+
/**
|
|
1313
|
+
* Compact import record stored in `ASTProgram.imports`.
|
|
1314
|
+
* Mirrors `ImportDirective` but is serialization-lightweight (no loc).
|
|
1315
|
+
*/
|
|
1316
|
+
export interface HSPlusImport {
|
|
1317
|
+
path: string;
|
|
1318
|
+
alias: string;
|
|
1319
|
+
namedImports?: string[];
|
|
1320
|
+
isWildcard?: boolean;
|
|
1321
|
+
}
|
|
1322
|
+
/**
|
|
1323
|
+
* Async file-reader function injected by the host environment.
|
|
1324
|
+
*
|
|
1325
|
+
* - **Node.js**: `(p) => fs.promises.readFile(p, 'utf-8')`
|
|
1326
|
+
* - **Browser / XR**: `(p) => fetch(p).then(r => r.text())`
|
|
1327
|
+
* - **Tests**: in-memory `Map<string, string>` lookup
|
|
1328
|
+
*
|
|
1329
|
+
* The function receives the **canonical** (resolved absolute) path.
|
|
1330
|
+
*/
|
|
1331
|
+
export type ReadFileFn = (absolutePath: string) => Promise<string>;
|
|
1332
|
+
export interface HoloSpawnGroup extends HoloNode {
|
|
1333
|
+
type: 'SpawnGroup';
|
|
1334
|
+
name: string;
|
|
1335
|
+
properties: Record<string, HoloValue>;
|
|
1336
|
+
}
|
|
1337
|
+
export interface HoloWaypoints extends HoloNode {
|
|
1338
|
+
type: 'Waypoints';
|
|
1339
|
+
name: string;
|
|
1340
|
+
points: HoloValue;
|
|
1341
|
+
}
|
|
1342
|
+
export interface HoloConstraintBlock extends HoloNode {
|
|
1343
|
+
type: 'Constraint';
|
|
1344
|
+
name: string;
|
|
1345
|
+
properties: Record<string, HoloValue>;
|
|
1346
|
+
}
|
|
1347
|
+
export interface HoloTerrainBlock extends HoloNode {
|
|
1348
|
+
type: 'Terrain';
|
|
1349
|
+
name: string;
|
|
1350
|
+
properties: Record<string, HoloValue>;
|
|
1351
|
+
}
|
|
1352
|
+
export type HoloDomainType = 'iot' | 'robotics' | 'dataviz' | 'education' | 'healthcare' | 'music' | 'architecture' | 'web3' | 'material' | 'material_graph' | 'light_field' | 'nav_field' | 'physics_contract' | 'physics' | 'vfx' | 'particle_field' | 'postfx' | 'audio' | 'weather' | 'procedural' | 'rendering' | 'navigation' | 'input' | 'codebase' | 'narrative' | 'payment' | 'norms' | 'service' | 'contract' | 'data' | 'network' | 'pipeline' | 'metric' | 'container' | 'resilience' | 'simulation' | 'mcp_servers' | 'custom';
|
|
1353
|
+
export interface HoloDomainBlock extends HoloNode {
|
|
1354
|
+
type: 'DomainBlock';
|
|
1355
|
+
/** Domain category */
|
|
1356
|
+
domain: HoloDomainType;
|
|
1357
|
+
/** The specific keyword used (e.g. 'sensor', 'joint', 'recipe') */
|
|
1358
|
+
keyword: string;
|
|
1359
|
+
/** Block name (the string after the keyword) */
|
|
1360
|
+
name: string;
|
|
1361
|
+
/** Trait decorators on the block (e.g. @networked @safety_rated) */
|
|
1362
|
+
traits: string[];
|
|
1363
|
+
/**
|
|
1364
|
+
* Optional plugin-exported domain tags.
|
|
1365
|
+
*
|
|
1366
|
+
* Populated by domain plugins / schema mappers so compilers can avoid
|
|
1367
|
+
* hardcoded domain vocabulary in core.
|
|
1368
|
+
*/
|
|
1369
|
+
domainTags?: string[];
|
|
1370
|
+
/** Properties declared inside the block */
|
|
1371
|
+
properties: Record<string, HoloValue>;
|
|
1372
|
+
/** Nested objects inside the block */
|
|
1373
|
+
children?: HoloObjectDecl[];
|
|
1374
|
+
/** Event handlers inside the block */
|
|
1375
|
+
eventHandlers?: HoloEventHandler[];
|
|
1376
|
+
/** Structured pipeline AST (populated when domain === 'pipeline' and keyword === 'pipeline') */
|
|
1377
|
+
pipelineAST?: import('./PipelineParser').Pipeline;
|
|
1378
|
+
}
|
|
1379
|
+
export interface CompiledCutsceneAction {
|
|
1380
|
+
type: 'camera_move' | 'character_action' | 'wait' | 'effect' | 'audio';
|
|
1381
|
+
target?: string;
|
|
1382
|
+
params: Record<string, any>;
|
|
1383
|
+
duration?: number;
|
|
1384
|
+
}
|
|
1385
|
+
export interface CompiledChoice {
|
|
1386
|
+
text: string;
|
|
1387
|
+
condition?: string;
|
|
1388
|
+
nextChapter?: string;
|
|
1389
|
+
action?: string;
|
|
1390
|
+
}
|
|
1391
|
+
export interface CompiledDialogueLine {
|
|
1392
|
+
speaker?: string;
|
|
1393
|
+
text: string;
|
|
1394
|
+
emotion?: string;
|
|
1395
|
+
duration?: number;
|
|
1396
|
+
voiceClip?: string;
|
|
1397
|
+
}
|
|
1398
|
+
export interface CompiledChapter {
|
|
1399
|
+
name: string;
|
|
1400
|
+
trigger?: string;
|
|
1401
|
+
dialogueLines?: CompiledDialogueLine[];
|
|
1402
|
+
choices?: CompiledChoice[];
|
|
1403
|
+
onComplete?: string;
|
|
1404
|
+
cutsceneActions?: CompiledCutsceneAction[];
|
|
1405
|
+
}
|
|
1406
|
+
export interface CompiledNarrative {
|
|
1407
|
+
name: string;
|
|
1408
|
+
type: 'linear' | 'branching' | 'open_world';
|
|
1409
|
+
chapters: CompiledChapter[];
|
|
1410
|
+
variables?: Record<string, HoloValue>;
|
|
1411
|
+
startChapter?: string;
|
|
1412
|
+
}
|
|
1413
|
+
export interface CompiledPaywall {
|
|
1414
|
+
name: string;
|
|
1415
|
+
price: number;
|
|
1416
|
+
asset: 'USDC' | 'ETH' | 'SOL';
|
|
1417
|
+
network: 'base' | 'ethereum' | 'solana';
|
|
1418
|
+
recipient: string;
|
|
1419
|
+
description?: string;
|
|
1420
|
+
type: 'one_time' | 'subscription' | 'tip' | 'per_use';
|
|
1421
|
+
gatedContent?: string[];
|
|
1422
|
+
revenueSplit?: {
|
|
1423
|
+
creator: number;
|
|
1424
|
+
platform: number;
|
|
1425
|
+
agent: number;
|
|
1426
|
+
};
|
|
1427
|
+
}
|
|
1428
|
+
export interface CompiledHealthcare {
|
|
1429
|
+
name: string;
|
|
1430
|
+
keyword: string;
|
|
1431
|
+
/** Medical modality: xray, mri, ct, ultrasound, ecg */
|
|
1432
|
+
modality?: string;
|
|
1433
|
+
/** Body system targeted: cardiovascular, nervous, skeletal, etc. */
|
|
1434
|
+
bodySystem?: string;
|
|
1435
|
+
/** DICOM window/level for imaging */
|
|
1436
|
+
dicomWindow?: {
|
|
1437
|
+
center: number;
|
|
1438
|
+
width: number;
|
|
1439
|
+
};
|
|
1440
|
+
/** Vital signs to monitor */
|
|
1441
|
+
vitalSigns?: string[];
|
|
1442
|
+
/** Alert thresholds for vital monitoring */
|
|
1443
|
+
alertThresholds?: Record<string, {
|
|
1444
|
+
min: number;
|
|
1445
|
+
max: number;
|
|
1446
|
+
}>;
|
|
1447
|
+
/** Procedure steps */
|
|
1448
|
+
procedureSteps?: string[];
|
|
1449
|
+
/** Patient data display fields */
|
|
1450
|
+
displayFields?: string[];
|
|
1451
|
+
/** Traits applied */
|
|
1452
|
+
traits: string[];
|
|
1453
|
+
/** Extra properties */
|
|
1454
|
+
properties: Record<string, unknown>;
|
|
1455
|
+
}
|
|
1456
|
+
export interface CompiledRobotics {
|
|
1457
|
+
name: string;
|
|
1458
|
+
keyword: string;
|
|
1459
|
+
/** Joint type: revolute, prismatic, continuous, fixed, floating, planar */
|
|
1460
|
+
jointType?: string;
|
|
1461
|
+
/** Joint limits (radians for revolute, meters for prismatic) */
|
|
1462
|
+
jointLimits?: {
|
|
1463
|
+
lower: number;
|
|
1464
|
+
upper: number;
|
|
1465
|
+
effort: number;
|
|
1466
|
+
velocity: number;
|
|
1467
|
+
};
|
|
1468
|
+
/** Drive/controller type: position, velocity, effort */
|
|
1469
|
+
driveType?: string;
|
|
1470
|
+
/** Controller algorithm: pid, mpc, lqr, impedance */
|
|
1471
|
+
controllerType?: string;
|
|
1472
|
+
/** End effector type: parallel_gripper, suction_gripper, welding_torch, etc. */
|
|
1473
|
+
effectorType?: string;
|
|
1474
|
+
/** Sensor type: camera, imu, lidar, force_torque, contact */
|
|
1475
|
+
sensorType?: string;
|
|
1476
|
+
/** ROS 2 compatibility flags */
|
|
1477
|
+
ros2?: {
|
|
1478
|
+
packageName?: string;
|
|
1479
|
+
nodeType?: string;
|
|
1480
|
+
topicName?: string;
|
|
1481
|
+
};
|
|
1482
|
+
/** Safety rating (ISO 10218, TS 15066) */
|
|
1483
|
+
safetyRating?: string;
|
|
1484
|
+
/** Traits applied */
|
|
1485
|
+
traits: string[];
|
|
1486
|
+
/** Extra properties */
|
|
1487
|
+
properties: Record<string, unknown>;
|
|
1488
|
+
}
|
|
1489
|
+
export interface CompiledIoT {
|
|
1490
|
+
name: string;
|
|
1491
|
+
keyword: string;
|
|
1492
|
+
/** Device type: sensor, actuator, gateway, controller */
|
|
1493
|
+
deviceType?: string;
|
|
1494
|
+
/** Communication protocol: mqtt, coap, http, websocket, zigbee, ble */
|
|
1495
|
+
protocol?: string;
|
|
1496
|
+
/** Telemetry fields to stream */
|
|
1497
|
+
telemetryFields?: string[];
|
|
1498
|
+
/** Update interval in milliseconds */
|
|
1499
|
+
updateInterval?: number;
|
|
1500
|
+
/** Digital twin model reference */
|
|
1501
|
+
twinModel?: string;
|
|
1502
|
+
/** Data bindings (property -> source) */
|
|
1503
|
+
bindings?: Record<string, string>;
|
|
1504
|
+
traits: string[];
|
|
1505
|
+
properties: Record<string, unknown>;
|
|
1506
|
+
}
|
|
1507
|
+
export interface CompiledDataViz {
|
|
1508
|
+
name: string;
|
|
1509
|
+
keyword: string;
|
|
1510
|
+
/** Chart type: bar, line, scatter, pie, heatmap, treemap, network */
|
|
1511
|
+
chartType?: string;
|
|
1512
|
+
/** Data source reference or inline data */
|
|
1513
|
+
dataSource?: string;
|
|
1514
|
+
/** Axes configuration */
|
|
1515
|
+
axes?: [string, string, string];
|
|
1516
|
+
/** Metric aggregation: sum, avg, min, max, count */
|
|
1517
|
+
aggregation?: string;
|
|
1518
|
+
/** Refresh interval in ms */
|
|
1519
|
+
refreshInterval?: number;
|
|
1520
|
+
/** Widget dimensions */
|
|
1521
|
+
dimensions?: {
|
|
1522
|
+
width: number;
|
|
1523
|
+
height: number;
|
|
1524
|
+
};
|
|
1525
|
+
traits: string[];
|
|
1526
|
+
properties: Record<string, unknown>;
|
|
1527
|
+
}
|
|
1528
|
+
export interface CompiledEducation {
|
|
1529
|
+
name: string;
|
|
1530
|
+
keyword: string;
|
|
1531
|
+
/** Content type: lesson, quiz, curriculum, exercise */
|
|
1532
|
+
contentType?: string;
|
|
1533
|
+
/** Difficulty level: beginner, intermediate, advanced */
|
|
1534
|
+
difficulty?: string;
|
|
1535
|
+
/** Learning objectives */
|
|
1536
|
+
objectives?: string[];
|
|
1537
|
+
/** Quiz questions (for quiz keyword) */
|
|
1538
|
+
questions?: Array<{
|
|
1539
|
+
question: string;
|
|
1540
|
+
options?: string[];
|
|
1541
|
+
answer?: string;
|
|
1542
|
+
}>;
|
|
1543
|
+
/** Prerequisites (lesson/module names) */
|
|
1544
|
+
prerequisites?: string[];
|
|
1545
|
+
/** Estimated duration in minutes */
|
|
1546
|
+
duration?: number;
|
|
1547
|
+
traits: string[];
|
|
1548
|
+
properties: Record<string, unknown>;
|
|
1549
|
+
}
|
|
1550
|
+
export interface CompiledMusic {
|
|
1551
|
+
name: string;
|
|
1552
|
+
keyword: string;
|
|
1553
|
+
/** Instrument type: synth, sampler, drum_machine, effect */
|
|
1554
|
+
instrumentType?: string;
|
|
1555
|
+
/** Tempo in BPM */
|
|
1556
|
+
bpm?: number;
|
|
1557
|
+
/** Time signature: [numerator, denominator] */
|
|
1558
|
+
timeSignature?: [number, number];
|
|
1559
|
+
/** Key signature: C, Am, F#m, etc. */
|
|
1560
|
+
key?: string;
|
|
1561
|
+
/** Audio effect chain names */
|
|
1562
|
+
effects?: string[];
|
|
1563
|
+
/** Sequence pattern (note data) */
|
|
1564
|
+
pattern?: string;
|
|
1565
|
+
/** Number of bars/measures */
|
|
1566
|
+
bars?: number;
|
|
1567
|
+
traits: string[];
|
|
1568
|
+
properties: Record<string, unknown>;
|
|
1569
|
+
}
|
|
1570
|
+
export interface CompiledArchitecture {
|
|
1571
|
+
name: string;
|
|
1572
|
+
keyword: string;
|
|
1573
|
+
/** Structure type: room, floor, building, zone */
|
|
1574
|
+
structureType?: string;
|
|
1575
|
+
/** Floor area in square meters */
|
|
1576
|
+
area?: number;
|
|
1577
|
+
/** Height in meters */
|
|
1578
|
+
height?: number;
|
|
1579
|
+
/** Wall material */
|
|
1580
|
+
wallMaterial?: string;
|
|
1581
|
+
/** Floor material */
|
|
1582
|
+
floorMaterial?: string;
|
|
1583
|
+
/** HVAC zone temperature setpoint (Celsius) */
|
|
1584
|
+
temperatureSetpoint?: number;
|
|
1585
|
+
/** Occupancy capacity */
|
|
1586
|
+
capacity?: number;
|
|
1587
|
+
/** Building code reference */
|
|
1588
|
+
buildingCode?: string;
|
|
1589
|
+
traits: string[];
|
|
1590
|
+
properties: Record<string, unknown>;
|
|
1591
|
+
}
|
|
1592
|
+
export interface CompiledWeb3 {
|
|
1593
|
+
name: string;
|
|
1594
|
+
keyword: string;
|
|
1595
|
+
/** Contract/token standard: ERC20, ERC721, ERC1155, custom */
|
|
1596
|
+
standard?: string;
|
|
1597
|
+
/** Blockchain network: ethereum, polygon, base, solana, arbitrum */
|
|
1598
|
+
network?: string;
|
|
1599
|
+
/** Contract address */
|
|
1600
|
+
contractAddress?: string;
|
|
1601
|
+
/** ABI function signatures */
|
|
1602
|
+
functions?: string[];
|
|
1603
|
+
/** Token supply (for token keyword) */
|
|
1604
|
+
supply?: number;
|
|
1605
|
+
/** Governance voting threshold */
|
|
1606
|
+
votingThreshold?: number;
|
|
1607
|
+
traits: string[];
|
|
1608
|
+
properties: Record<string, unknown>;
|
|
1609
|
+
}
|
|
1610
|
+
export interface CompiledProcedural {
|
|
1611
|
+
name: string;
|
|
1612
|
+
keyword: string;
|
|
1613
|
+
/** Generation type: terrain, scatter, distribute, L-system, noise */
|
|
1614
|
+
genType?: string;
|
|
1615
|
+
/** Random seed */
|
|
1616
|
+
seed?: number;
|
|
1617
|
+
/** Density for scatter/distribute */
|
|
1618
|
+
density?: number;
|
|
1619
|
+
/** Scale range [min, max] */
|
|
1620
|
+
scaleRange?: [number, number];
|
|
1621
|
+
/** Noise parameters */
|
|
1622
|
+
noise?: {
|
|
1623
|
+
type: string;
|
|
1624
|
+
octaves: number;
|
|
1625
|
+
frequency: number;
|
|
1626
|
+
amplitude: number;
|
|
1627
|
+
};
|
|
1628
|
+
/** Source mesh/prefab to scatter */
|
|
1629
|
+
sourceMesh?: string;
|
|
1630
|
+
traits: string[];
|
|
1631
|
+
properties: Record<string, unknown>;
|
|
1632
|
+
}
|
|
1633
|
+
export interface CompiledRendering {
|
|
1634
|
+
name: string;
|
|
1635
|
+
keyword: string;
|
|
1636
|
+
/** LOD levels with distance thresholds */
|
|
1637
|
+
lodLevels?: Array<{
|
|
1638
|
+
distance: number;
|
|
1639
|
+
mesh?: string;
|
|
1640
|
+
detail?: number;
|
|
1641
|
+
}>;
|
|
1642
|
+
/** Render layer/queue */
|
|
1643
|
+
renderLayer?: string;
|
|
1644
|
+
/** Shadow mode: none, cast, receive, both */
|
|
1645
|
+
shadowMode?: string;
|
|
1646
|
+
/** Culling mode: none, frustum, occlusion */
|
|
1647
|
+
cullingMode?: string;
|
|
1648
|
+
/** Draw order priority */
|
|
1649
|
+
sortOrder?: number;
|
|
1650
|
+
traits: string[];
|
|
1651
|
+
properties: Record<string, unknown>;
|
|
1652
|
+
}
|
|
1653
|
+
export interface CompiledNavigation {
|
|
1654
|
+
name: string;
|
|
1655
|
+
keyword: string;
|
|
1656
|
+
/** Agent radius for navmesh generation */
|
|
1657
|
+
agentRadius?: number;
|
|
1658
|
+
/** Agent height */
|
|
1659
|
+
agentHeight?: number;
|
|
1660
|
+
/** Max slope angle in degrees */
|
|
1661
|
+
maxSlope?: number;
|
|
1662
|
+
/** Step height */
|
|
1663
|
+
stepHeight?: number;
|
|
1664
|
+
/** Agent speed */
|
|
1665
|
+
speed?: number;
|
|
1666
|
+
/** Avoidance priority */
|
|
1667
|
+
avoidancePriority?: number;
|
|
1668
|
+
/** Behavior tree root node type */
|
|
1669
|
+
behaviorRoot?: string;
|
|
1670
|
+
traits: string[];
|
|
1671
|
+
properties: Record<string, unknown>;
|
|
1672
|
+
}
|
|
1673
|
+
export interface CompiledInput {
|
|
1674
|
+
name: string;
|
|
1675
|
+
keyword: string;
|
|
1676
|
+
/** Input type: button, axis, gesture, gaze, hand_tracking */
|
|
1677
|
+
inputType?: string;
|
|
1678
|
+
/** Platform binding: keyboard, gamepad, vr_controller, touch */
|
|
1679
|
+
platform?: string;
|
|
1680
|
+
/** Key/button binding */
|
|
1681
|
+
binding?: string;
|
|
1682
|
+
/** Action name mapped to this input */
|
|
1683
|
+
action?: string;
|
|
1684
|
+
/** Gesture recognition threshold */
|
|
1685
|
+
threshold?: number;
|
|
1686
|
+
/** Interaction distance (for spatial inputs) */
|
|
1687
|
+
interactionDistance?: number;
|
|
1688
|
+
traits: string[];
|
|
1689
|
+
properties: Record<string, unknown>;
|
|
1690
|
+
}
|
|
1691
|
+
/**
|
|
1692
|
+
* Norm lifecycle phase identifiers (CRSEC model).
|
|
1693
|
+
*
|
|
1694
|
+
* - creation: How the norm is proposed and authored
|
|
1695
|
+
* - representation: Formal encoding of the norm's rules and constraints
|
|
1696
|
+
* - spreading: How the norm propagates through agent communication/observation
|
|
1697
|
+
* - evaluation: Sanity checks and acceptance criteria for norm adoption
|
|
1698
|
+
* - compliance: Enforcement, violation detection, and sanction application
|
|
1699
|
+
*/
|
|
1700
|
+
export type NormLifecyclePhase = 'creation' | 'representation' | 'spreading' | 'evaluation' | 'compliance';
|
|
1701
|
+
/**
|
|
1702
|
+
* Status of a norm within its lifecycle
|
|
1703
|
+
*/
|
|
1704
|
+
export type NormStatus = 'draft' | 'proposed' | 'voting' | 'adopted' | 'suspended' | 'deprecated' | 'revoked' | 'contested';
|
|
1705
|
+
/**
|
|
1706
|
+
* Voting mechanism for norm proposals
|
|
1707
|
+
*/
|
|
1708
|
+
export type NormVotingMechanism = 'majority' | 'supermajority' | 'consensus' | 'weighted' | 'liquid_democracy' | 'quadratic' | 'ranked_choice' | 'lazy_consensus';
|
|
1709
|
+
/**
|
|
1710
|
+
* Norm violation severity level
|
|
1711
|
+
*/
|
|
1712
|
+
export type NormViolationSeverity = 'info' | 'warning' | 'minor' | 'moderate' | 'major' | 'critical';
|
|
1713
|
+
/**
|
|
1714
|
+
* Sanction type applied for norm violations
|
|
1715
|
+
*/
|
|
1716
|
+
export type NormSanctionType = 'warn' | 'restrict' | 'penalize' | 'suspend' | 'ban' | 'quarantine' | 'escalate' | 'custom';
|
|
1717
|
+
/**
|
|
1718
|
+
* How a norm spreads through the agent population
|
|
1719
|
+
*/
|
|
1720
|
+
export type NormSpreadingMechanism = 'broadcast' | 'observation' | 'communication' | 'imitation' | 'enforcement' | 'passive';
|
|
1721
|
+
/**
|
|
1722
|
+
* A first-class norm declaration in a HoloScript composition.
|
|
1723
|
+
*
|
|
1724
|
+
* Grammar:
|
|
1725
|
+
* ```holoscript
|
|
1726
|
+
* norm "NoSpamming" {
|
|
1727
|
+
* description: "Agents must not send unsolicited messages"
|
|
1728
|
+
* category: "communication"
|
|
1729
|
+
* priority: 8
|
|
1730
|
+
*
|
|
1731
|
+
* creation {
|
|
1732
|
+
* author: "system"
|
|
1733
|
+
* rationale: "Prevent message flooding in shared spaces"
|
|
1734
|
+
* initial_status: "proposed"
|
|
1735
|
+
* }
|
|
1736
|
+
*
|
|
1737
|
+
* representation {
|
|
1738
|
+
* condition: "message_count_per_minute < 10"
|
|
1739
|
+
* scope: "all_agents"
|
|
1740
|
+
* exceptions: ["system_announcements", "emergency_alerts"]
|
|
1741
|
+
* }
|
|
1742
|
+
*
|
|
1743
|
+
* spreading {
|
|
1744
|
+
* mechanism: "broadcast"
|
|
1745
|
+
* visibility: "public"
|
|
1746
|
+
* adoption_incentive: 5
|
|
1747
|
+
* }
|
|
1748
|
+
*
|
|
1749
|
+
* evaluation {
|
|
1750
|
+
* voting: "majority"
|
|
1751
|
+
* quorum: 0.6
|
|
1752
|
+
* approval_threshold: 0.5
|
|
1753
|
+
* review_period: 86400
|
|
1754
|
+
* auto_adopt: false
|
|
1755
|
+
* }
|
|
1756
|
+
*
|
|
1757
|
+
* compliance {
|
|
1758
|
+
* monitoring: "continuous"
|
|
1759
|
+
* violation_threshold: 3
|
|
1760
|
+
* severity: "moderate"
|
|
1761
|
+
* sanctions: ["warn", "restrict", "suspend"]
|
|
1762
|
+
* appeal_allowed: true
|
|
1763
|
+
* grace_period: 3600
|
|
1764
|
+
* }
|
|
1765
|
+
* }
|
|
1766
|
+
* ```
|
|
1767
|
+
*/
|
|
1768
|
+
export interface HoloNormBlock extends HoloNode {
|
|
1769
|
+
type: 'NormBlock';
|
|
1770
|
+
/** Name of the norm */
|
|
1771
|
+
name: string;
|
|
1772
|
+
/** Trait decorators on the norm (e.g. @enforceable @community_driven) */
|
|
1773
|
+
traits: string[];
|
|
1774
|
+
/** Top-level norm properties (description, category, priority, etc.) */
|
|
1775
|
+
properties: Record<string, HoloValue>;
|
|
1776
|
+
/** Creation phase: how the norm is proposed and authored */
|
|
1777
|
+
creation?: HoloNormCreation;
|
|
1778
|
+
/** Representation phase: formal rule encoding */
|
|
1779
|
+
representation?: HoloNormRepresentation;
|
|
1780
|
+
/** Spreading phase: propagation through the agent population */
|
|
1781
|
+
spreading?: HoloNormSpreading;
|
|
1782
|
+
/** Evaluation phase: acceptance criteria and voting rules */
|
|
1783
|
+
evaluation?: HoloNormEvaluation;
|
|
1784
|
+
/** Compliance phase: enforcement, violation, and sanctions */
|
|
1785
|
+
compliance?: HoloNormCompliance;
|
|
1786
|
+
/** Event handlers for norm lifecycle events */
|
|
1787
|
+
eventHandlers?: HoloEventHandler[];
|
|
1788
|
+
/** @platform() conditional compilation constraint */
|
|
1789
|
+
platformConstraint?: PlatformConstraint;
|
|
1790
|
+
}
|
|
1791
|
+
/**
|
|
1792
|
+
* Creation phase — how the norm originates.
|
|
1793
|
+
*/
|
|
1794
|
+
export interface HoloNormCreation extends HoloNode {
|
|
1795
|
+
type: 'NormCreation';
|
|
1796
|
+
properties: Record<string, HoloValue>;
|
|
1797
|
+
}
|
|
1798
|
+
/**
|
|
1799
|
+
* Representation phase — formal encoding of the norm's constraints.
|
|
1800
|
+
*/
|
|
1801
|
+
export interface HoloNormRepresentation extends HoloNode {
|
|
1802
|
+
type: 'NormRepresentation';
|
|
1803
|
+
properties: Record<string, HoloValue>;
|
|
1804
|
+
}
|
|
1805
|
+
/**
|
|
1806
|
+
* Spreading phase — how the norm propagates through the population.
|
|
1807
|
+
*/
|
|
1808
|
+
export interface HoloNormSpreading extends HoloNode {
|
|
1809
|
+
type: 'NormSpreading';
|
|
1810
|
+
properties: Record<string, HoloValue>;
|
|
1811
|
+
}
|
|
1812
|
+
/**
|
|
1813
|
+
* Evaluation phase — sanity checks, voting, and acceptance criteria.
|
|
1814
|
+
*/
|
|
1815
|
+
export interface HoloNormEvaluation extends HoloNode {
|
|
1816
|
+
type: 'NormEvaluation';
|
|
1817
|
+
properties: Record<string, HoloValue>;
|
|
1818
|
+
}
|
|
1819
|
+
/**
|
|
1820
|
+
* Compliance phase — enforcement, violation detection, and sanctions.
|
|
1821
|
+
*/
|
|
1822
|
+
export interface HoloNormCompliance extends HoloNode {
|
|
1823
|
+
type: 'NormCompliance';
|
|
1824
|
+
properties: Record<string, HoloValue>;
|
|
1825
|
+
}
|
|
1826
|
+
/**
|
|
1827
|
+
* A metanorm declaration: governance rules about the norm system itself.
|
|
1828
|
+
*
|
|
1829
|
+
* Grammar:
|
|
1830
|
+
* ```holoscript
|
|
1831
|
+
* metanorm "NormAmendmentProcess" {
|
|
1832
|
+
* description: "Rules for proposing changes to existing norms"
|
|
1833
|
+
* applies_to: "all_norms"
|
|
1834
|
+
*
|
|
1835
|
+
* rules {
|
|
1836
|
+
* amendment_quorum: 0.75
|
|
1837
|
+
* amendment_voting: "supermajority"
|
|
1838
|
+
* cooldown_period: 604800
|
|
1839
|
+
* max_amendments_per_cycle: 3
|
|
1840
|
+
* retroactive_allowed: false
|
|
1841
|
+
* }
|
|
1842
|
+
*
|
|
1843
|
+
* escalation {
|
|
1844
|
+
* authority: "governance_council"
|
|
1845
|
+
* override_threshold: 0.9
|
|
1846
|
+
* appeal_levels: 2
|
|
1847
|
+
* }
|
|
1848
|
+
*
|
|
1849
|
+
* on norm_conflict(normA, normB) {
|
|
1850
|
+
* emit("norm_conflict_detected", { a: normA, b: normB })
|
|
1851
|
+
* }
|
|
1852
|
+
* }
|
|
1853
|
+
* ```
|
|
1854
|
+
*/
|
|
1855
|
+
export interface HoloMetanorm extends HoloNode {
|
|
1856
|
+
type: 'Metanorm';
|
|
1857
|
+
/** Name of the metanorm */
|
|
1858
|
+
name: string;
|
|
1859
|
+
/** Trait decorators */
|
|
1860
|
+
traits: string[];
|
|
1861
|
+
/** Top-level metanorm properties */
|
|
1862
|
+
properties: Record<string, HoloValue>;
|
|
1863
|
+
/** Governance rules sub-block */
|
|
1864
|
+
rules?: HoloMetanormRules;
|
|
1865
|
+
/** Escalation sub-block */
|
|
1866
|
+
escalation?: HoloMetanormEscalation;
|
|
1867
|
+
/** Event handlers for metanorm events */
|
|
1868
|
+
eventHandlers?: HoloEventHandler[];
|
|
1869
|
+
}
|
|
1870
|
+
/**
|
|
1871
|
+
* Metanorm governance rules sub-block.
|
|
1872
|
+
*/
|
|
1873
|
+
export interface HoloMetanormRules extends HoloNode {
|
|
1874
|
+
type: 'MetanormRules';
|
|
1875
|
+
properties: Record<string, HoloValue>;
|
|
1876
|
+
}
|
|
1877
|
+
/**
|
|
1878
|
+
* Metanorm escalation sub-block.
|
|
1879
|
+
*/
|
|
1880
|
+
export interface HoloMetanormEscalation extends HoloNode {
|
|
1881
|
+
type: 'MetanormEscalation';
|
|
1882
|
+
properties: Record<string, HoloValue>;
|
|
1883
|
+
}
|
|
1884
|
+
/**
|
|
1885
|
+
* A single named clause in a contract block.
|
|
1886
|
+
*
|
|
1887
|
+
* Used for both preconditions (entry checks) and invariants (continuous checks).
|
|
1888
|
+
*/
|
|
1889
|
+
export interface HoloContractClause {
|
|
1890
|
+
/** Unique clause name, e.g. "gravity_set" */
|
|
1891
|
+
name: string;
|
|
1892
|
+
/** Raw expression string — evaluated by the SimulationContract verifier. */
|
|
1893
|
+
expr: string;
|
|
1894
|
+
/** Optional human-readable description of what this clause checks. */
|
|
1895
|
+
description?: string;
|
|
1896
|
+
}
|
|
1897
|
+
/**
|
|
1898
|
+
* Declarative contract block for a `.holo` composition.
|
|
1899
|
+
*
|
|
1900
|
+
* Authors write preconditions (entry checks), invariants (continuous checks),
|
|
1901
|
+
* and a receipt shape (what a successful execution produces). These feed the
|
|
1902
|
+
* SimulationContract CPU verifier gate in DispatchPolicy.
|
|
1903
|
+
*
|
|
1904
|
+
* Syntax:
|
|
1905
|
+
* ```
|
|
1906
|
+
* sim_contract {
|
|
1907
|
+
* precondition "gravity_set" { gravity != null }
|
|
1908
|
+
* precondition "arena_bounded" "arena radius must be positive" { arena.radius > 0 }
|
|
1909
|
+
* invariant "energy_conserved" { total_energy <= initial_energy + 0.001 }
|
|
1910
|
+
* receipt { winner: string, final_score: number, elapsed_ms: number }
|
|
1911
|
+
* }
|
|
1912
|
+
* ```
|
|
1913
|
+
*/
|
|
1914
|
+
export interface HoloContract extends HoloNode {
|
|
1915
|
+
type: 'contract';
|
|
1916
|
+
/** Named entry conditions that must hold before the composition runs. */
|
|
1917
|
+
preconditions: HoloContractClause[];
|
|
1918
|
+
/** Named properties that must hold throughout execution. */
|
|
1919
|
+
invariants: HoloContractClause[];
|
|
1920
|
+
/**
|
|
1921
|
+
* Shape of the receipt produced upon successful completion.
|
|
1922
|
+
* Keys are field names; values are type annotations (string).
|
|
1923
|
+
*/
|
|
1924
|
+
receipt: Record<string, string>;
|
|
1925
|
+
}
|
|
1926
|
+
/**
|
|
1927
|
+
* Named regulatory bundle for regulated AI deployments.
|
|
1928
|
+
*
|
|
1929
|
+
* Syntax:
|
|
1930
|
+
* ```holoscript
|
|
1931
|
+
* policy_pack fair_lending_v1 {
|
|
1932
|
+
* version: "2026.06"
|
|
1933
|
+
* framework_id: CFPB_FAIR_LENDING
|
|
1934
|
+
* required_tests: [
|
|
1935
|
+
* { id: "four_fifths", protected_attribute: "race", adverse_impact_ratio_min: 0.8 }
|
|
1936
|
+
* ]
|
|
1937
|
+
* required_compile_targets: ["model_card", "impact_assessment"]
|
|
1938
|
+
* audit_retention { min_days: 2555 storage: "immutable_ledger" }
|
|
1939
|
+
* monitoring { interval: "quarterly" drift_sweep_required: true }
|
|
1940
|
+
* }
|
|
1941
|
+
* ```
|
|
1942
|
+
*/
|
|
1943
|
+
export interface HoloPolicyPackBlock extends HoloNode {
|
|
1944
|
+
type: 'PolicyPack';
|
|
1945
|
+
name: string;
|
|
1946
|
+
version: string;
|
|
1947
|
+
frameworkId: string;
|
|
1948
|
+
requiredTests: HoloValue[];
|
|
1949
|
+
requiredCompileTargets: string[];
|
|
1950
|
+
auditRetention: Record<string, HoloValue>;
|
|
1951
|
+
monitoringCadence: Record<string, HoloValue>;
|
|
1952
|
+
properties: Record<string, HoloValue>;
|
|
1953
|
+
}
|
|
1954
|
+
/**
|
|
1955
|
+
* Named pub/sub topic declaration.
|
|
1956
|
+
*
|
|
1957
|
+
* ```holoscript
|
|
1958
|
+
* topic InventoryUpdate {
|
|
1959
|
+
* type: "InventoryDelta"
|
|
1960
|
+
* broadcast: true
|
|
1961
|
+
* }
|
|
1962
|
+
* ```
|
|
1963
|
+
*/
|
|
1964
|
+
export interface HoloTopic extends HoloNode {
|
|
1965
|
+
type: 'Topic';
|
|
1966
|
+
name: string;
|
|
1967
|
+
/** Payload type annotation (string label, not validated by parser). */
|
|
1968
|
+
dataType?: string;
|
|
1969
|
+
/** When true, all subscribers receive every message (fan-out). */
|
|
1970
|
+
broadcast?: boolean;
|
|
1971
|
+
/** Additional key-value metadata. */
|
|
1972
|
+
metadata?: Record<string, HoloValue>;
|
|
1973
|
+
}
|
|
1974
|
+
/**
|
|
1975
|
+
* Typed directional channel connecting two named nodes.
|
|
1976
|
+
*
|
|
1977
|
+
* ```holoscript
|
|
1978
|
+
* channel PlayerUpdates {
|
|
1979
|
+
* from: PlayerState
|
|
1980
|
+
* to: HUD
|
|
1981
|
+
* capacity: 64
|
|
1982
|
+
* }
|
|
1983
|
+
* ```
|
|
1984
|
+
*/
|
|
1985
|
+
export interface HoloChannel extends HoloNode {
|
|
1986
|
+
type: 'Channel';
|
|
1987
|
+
name: string;
|
|
1988
|
+
/** Source node name. */
|
|
1989
|
+
from?: string;
|
|
1990
|
+
/** Destination node name. */
|
|
1991
|
+
to?: string;
|
|
1992
|
+
/** Maximum buffered messages (0 = unbounded). */
|
|
1993
|
+
capacity?: number;
|
|
1994
|
+
/** Additional key-value metadata. */
|
|
1995
|
+
metadata?: Record<string, HoloValue>;
|
|
1996
|
+
}
|
|
1997
|
+
/**
|
|
1998
|
+
* Declarative natural-language graph connection.
|
|
1999
|
+
*
|
|
2000
|
+
* ```holoscript
|
|
2001
|
+
* connect PlayerState to HUD
|
|
2002
|
+
* connect PlayerState to HUD as "updates"
|
|
2003
|
+
* ```
|
|
2004
|
+
*/
|
|
2005
|
+
export interface HoloConnection extends HoloNode {
|
|
2006
|
+
type: 'Connection';
|
|
2007
|
+
/** Source node identifier. */
|
|
2008
|
+
from: string;
|
|
2009
|
+
/** Destination node identifier. */
|
|
2010
|
+
to: string;
|
|
2011
|
+
/** Optional edge-type label (the string after `as`). */
|
|
2012
|
+
edgeType?: string;
|
|
2013
|
+
}
|