@holoscript/core 6.0.3 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -40
- package/bin/holoscript.cjs +3 -0
- package/dist/GLTFPipeline-SFIORFJU.js +16 -0
- package/dist/GLTFPipeline-VNNDPONV.cjs +37 -0
- package/dist/{HoloScriptPlusParser-BZR5DELQ.js → HoloScriptPlusParser-7FBIFUFC.js} +6 -5
- package/dist/{HoloScriptPlusParser-SBMYDNXO.cjs → HoloScriptPlusParser-A2W7OCN2.cjs} +17 -16
- package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
- package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
- package/dist/{USDZExporter-MHEHXZB4.cjs → USDZExporter-3FWJ25JI.cjs} +344 -16
- package/dist/{USDZExporter-YA55ZS35.js → USDZExporter-D2HQLQYK.js} +344 -16
- package/dist/agents/index.cjs +19 -0
- package/dist/agents/index.d.ts +100 -0
- package/dist/agents/index.js +17 -0
- package/dist/chunk-22W6NGYN.js +725 -0
- package/dist/{chunk-XSUZMPVQ.cjs → chunk-27MPVJVZ.cjs} +64 -28
- package/dist/{chunk-W76ETJTI.js → chunk-2A7FURVO.js} +44 -8
- package/dist/{chunk-C7BNX4XJ.js → chunk-2B7WVIDZ.js} +11 -8
- package/dist/chunk-2BSMSUCE.js +1941 -0
- package/dist/chunk-2HLIGOKU.cjs +5546 -0
- package/dist/{chunk-GC3YU46J.js → chunk-2M2DPHKB.js} +4 -4
- package/dist/{chunk-A6GO3DPZ.cjs → chunk-2YSNA2F2.cjs} +321 -49
- package/dist/{chunk-ZL6VJ6SN.js → chunk-33XCOVE3.js} +5 -5
- package/dist/chunk-3FOKASKO.cjs +348 -0
- package/dist/{chunk-XSF76QRU.js → chunk-4C57PR42.js} +3 -3
- package/dist/chunk-4N4SXXWF.js +769 -0
- package/dist/chunk-4PDEPEQW.cjs +41 -0
- package/dist/chunk-4R6SBXDB.js +45 -0
- package/dist/chunk-4SY77NA4.cjs +413 -0
- package/dist/{chunk-74YCHHTE.js → chunk-4UUKPCY4.js} +670 -116
- package/dist/{chunk-VZNKJZTT.cjs → chunk-52ULD552.cjs} +178 -113
- package/dist/{chunk-65RFOWZI.js → chunk-5CKA5SXU.js} +441 -23
- package/dist/chunk-5FSKKMR7.cjs +2092 -0
- package/dist/{chunk-FF3Q7ADR.js → chunk-5JEU52DW.js} +5 -3
- package/dist/chunk-5N54COB6.cjs +327 -0
- package/dist/chunk-5S7RKFGR.cjs +446 -0
- package/dist/{chunk-EJA7G2C4.cjs → chunk-5WUNN6ZN.cjs} +2 -2
- package/dist/{chunk-ELLQPFAF.js → chunk-6ASWLXXN.js} +24 -10
- package/dist/chunk-6CTRH7HT.cjs +1985 -0
- package/dist/{chunk-ARNKA274.cjs → chunk-6EX3I5P4.cjs} +6 -6
- package/dist/chunk-6FGQNDR4.js +5731 -0
- package/dist/{chunk-X4YVN7H3.cjs → chunk-6KMK2UXT.cjs} +152 -56
- package/dist/{chunk-KUJRR4FJ.js → chunk-6L4VE27M.js} +36 -24
- package/dist/{chunk-RT7LJRSF.cjs → chunk-6S6TKNEA.cjs} +7357 -8312
- package/dist/chunk-77V4GTCA.js +596 -0
- package/dist/{chunk-XH7SE4HH.cjs → chunk-7AD52FRS.cjs} +19 -19
- package/dist/chunk-7OPW2KO7.cjs +639 -0
- package/dist/chunk-A6KINLZJ.js +236 -0
- package/dist/chunk-AIA52I7T.cjs +543 -0
- package/dist/chunk-AIX25INK.cjs +602 -0
- package/dist/{chunk-WN3YF33G.cjs → chunk-AO4I2Z7M.cjs} +15 -17
- package/dist/{chunk-TSWTWZ42.cjs → chunk-BPICAGBV.cjs} +376 -209
- package/dist/chunk-BRQJKJGT.cjs +20 -0
- package/dist/{chunk-3FXV5S25.cjs → chunk-C37BHB7N.cjs} +6 -3
- package/dist/{chunk-XNMEH2BI.js → chunk-CBJY23VL.js} +3 -3
- package/dist/chunk-CIWWXYHZ.cjs +50 -0
- package/dist/{chunk-NTMZSDXM.cjs → chunk-DIL6DDDN.cjs} +101 -45
- package/dist/chunk-DMXC24WV.js +404 -0
- package/dist/{chunk-SPDELRRV.cjs → chunk-DTGBOSEM.cjs} +12 -12
- package/dist/chunk-E7JP3BS3.cjs +61 -0
- package/dist/{chunk-HJJLD366.js → chunk-EKBKLK7P.js} +3 -3
- package/dist/chunk-EKYL4PE3.cjs +404 -0
- package/dist/{chunk-7N3JIJMT.js → chunk-EMMC5CSQ.js} +12 -8
- package/dist/{chunk-EUFLX2PI.js → chunk-EOBB6A4B.js} +7263 -8214
- package/dist/chunk-EOFNVCM6.js +325 -0
- package/dist/{chunk-NKRKT6V2.js → chunk-ER4GATIU.js} +11 -10
- package/dist/{chunk-N5FTS757.cjs → chunk-EXKSFGSX.cjs} +7 -148
- package/dist/{chunk-LK5IAVH6.cjs → chunk-EXUP2BUM.cjs} +27 -27
- package/dist/chunk-FDSGHPAK.js +130 -0
- package/dist/chunk-FEWUHQNM.cjs +144 -0
- package/dist/{chunk-5TOFIR6L.js → chunk-FGGJQRLZ.js} +5 -142
- package/dist/chunk-FHP6LXJS.js +415 -0
- package/dist/{chunk-7LCYLPW2.cjs → chunk-FJPADH77.cjs} +7 -4
- package/dist/{chunk-HBZYCASG.js → chunk-FXKTYFYA.js} +203 -36
- package/dist/chunk-GCMWDSBZ.cjs +729 -0
- package/dist/chunk-GJNCFRJU.cjs +125 -0
- package/dist/{chunk-I3XGTIHM.cjs → chunk-GMP623FG.cjs} +16 -13
- package/dist/{chunk-CNVM7J3M.js → chunk-GN3KDX4W.js} +149 -53
- package/dist/{chunk-WFJIDI2N.cjs → chunk-GQYKQSTC.cjs} +10 -10
- package/dist/chunk-GTU2Z2WW.cjs +262 -0
- package/dist/chunk-GZG4KA4E.js +529 -0
- package/dist/{chunk-DIEDKX5B.cjs → chunk-H3MGK7TX.cjs} +45 -33
- package/dist/{chunk-DN7UFU63.cjs → chunk-H5DZIHJP.cjs} +14 -17
- package/dist/{chunk-DH5G2JUA.cjs → chunk-HANL7K2Q.cjs} +66 -53
- package/dist/{chunk-EGIZHYJP.cjs → chunk-HCCQLAA4.cjs} +2 -13
- package/dist/{chunk-HHS6FMOU.cjs → chunk-HGVXZDSK.cjs} +178 -29
- package/dist/{chunk-LBPEZQAF.js → chunk-HRODTEEO.js} +30 -10
- package/dist/{chunk-ZGTGVSTZ.js → chunk-HYNTS5CP.js} +2 -2
- package/dist/{chunk-RE3OKSYF.cjs → chunk-HZCQO4JM.cjs} +6 -6
- package/dist/{chunk-NCUHGRTZ.js → chunk-I2O7TW6B.js} +12 -8
- package/dist/chunk-IHESJZSW.js +4490 -0
- package/dist/{chunk-7H5UNJZD.cjs → chunk-IRWWS72C.cjs} +64 -22
- package/dist/{chunk-EMO7HAKJ.cjs → chunk-IVIA7K75.cjs} +691 -133
- package/dist/chunk-IVY74O6C.js +247 -0
- package/dist/chunk-J32ZJZJH.js +554 -0
- package/dist/chunk-JD7CIZ33.js +1949 -0
- package/dist/{chunk-7X2IEJIE.cjs → chunk-JIYN45TV.cjs} +41 -42
- package/dist/{chunk-XDXZM3ZP.cjs → chunk-KHPCJRI3.cjs} +24 -21
- package/dist/chunk-KKFZ3B6J.cjs +557 -0
- package/dist/chunk-KPJL34Y7.cjs +186 -0
- package/dist/{chunk-7KPI4EKH.cjs → chunk-KQTPCYTG.cjs} +130 -50
- package/dist/{chunk-F5LVGHNT.js → chunk-KX76JUQY.js} +3 -3
- package/dist/chunk-L4LFINPO.js +623 -0
- package/dist/{chunk-2UX5LRAP.cjs → chunk-L63H3SQ4.cjs} +46 -32
- package/dist/{chunk-NLPSZT4C.js → chunk-LAOCQJ2M.js} +64 -8
- package/dist/chunk-LM2VU56C.cjs +37 -0
- package/dist/chunk-M56JSP4A.js +400 -0
- package/dist/chunk-MBOOR7X4.js +18 -0
- package/dist/{chunk-PQLGZKMC.cjs → chunk-MJVIRCUV.cjs} +31 -27
- package/dist/{chunk-AC4BSHFV.js → chunk-MSMIFMBL.js} +135 -18
- package/dist/{chunk-56IF4NTA.js → chunk-MXFUTKCO.js} +18 -18
- package/dist/{chunk-NRUB55IT.cjs → chunk-MXJ5SS53.cjs} +450 -32
- package/dist/chunk-MXWNGCRS.js +2176 -0
- package/dist/chunk-MYY4PMWX.cjs +264 -0
- package/dist/chunk-N75IH2HY.js +258 -0
- package/dist/chunk-NG77ATEW.cjs +778 -0
- package/dist/chunk-NW5G5FBQ.js +215 -0
- package/dist/{chunk-4FCZDTD5.js → chunk-OEFY723R.js} +29 -16
- package/dist/chunk-OEV5RMZO.cjs +3042 -0
- package/dist/{chunk-VSXOIUCF.cjs → chunk-OIQYIIO3.cjs} +7 -7
- package/dist/{chunk-32TWR3HE.js → chunk-OL46QLBJ.js} +3 -12
- package/dist/chunk-OPZ7XDDI.js +487 -0
- package/dist/chunk-OSYNRVOV.cjs +243 -0
- package/dist/{chunk-HUFNKFA6.js → chunk-P7YIA5LN.js} +93 -13
- package/dist/chunk-PGANYCAG.cjs +220 -0
- package/dist/{chunk-CO2VM2DK.js → chunk-QAVXL2IH.js} +62 -20
- package/dist/{chunk-BO2OKHIY.js → chunk-QCCBXSCE.js} +1640 -1311
- package/dist/{chunk-WYH4GVZ5.js → chunk-QPOQ7VPI.js} +16 -13
- package/dist/{chunk-V42NTCFH.js → chunk-QTPMJRGS.js} +2331 -17
- package/dist/{chunk-FEFHPUEM.cjs → chunk-QWNQ523V.cjs} +1705 -1382
- package/dist/{chunk-VK5AXKO3.js → chunk-R3IVNY6P.js} +166 -101
- package/dist/chunk-R75BSDH7.cjs +50 -0
- package/dist/{chunk-AIUXRS74.cjs → chunk-RMHC2VG7.cjs} +2358 -41
- package/dist/chunk-RUXGBKPS.cjs +4517 -0
- package/dist/{chunk-PLMYCCA4.js → chunk-S5IFXW6E.js} +113 -9
- package/dist/{chunk-27LWW5FU.cjs → chunk-S6YWHCKV.cjs} +5 -5
- package/dist/{chunk-SUCBB66F.js → chunk-SIEXCILW.js} +3 -3
- package/dist/{chunk-CLYEIWA5.cjs → chunk-SLU6UPJI.cjs} +5 -3
- package/dist/{chunk-H6WMMLQK.cjs → chunk-T5J7ZKP3.cjs} +454 -61
- package/dist/chunk-TDCNJHWO.js +341 -0
- package/dist/{chunk-IHOUYQIA.js → chunk-TG7O4WBC.js} +5 -5
- package/dist/chunk-THCK6ECW.js +2085 -0
- package/dist/chunk-TJHVSBP2.js +439 -0
- package/dist/chunk-TK74TR4H.js +5541 -0
- package/dist/{chunk-BU5ZAFMC.js → chunk-U4NBQJBY.js} +11 -13
- package/dist/{chunk-Y5MUAYTO.js → chunk-UD3DSHZM.js} +10 -13
- package/dist/chunk-UDMYRFDZ.js +3038 -0
- package/dist/{chunk-PPULB4GG.cjs → chunk-UOIGFQXC.cjs} +90 -68
- package/dist/{chunk-EPWRXL6S.js → chunk-URG2SJLK.js} +41 -42
- package/dist/{chunk-VJVCD5T5.cjs → chunk-V73NPPTM.cjs} +152 -35
- package/dist/chunk-VECQYRXL.js +474 -0
- package/dist/chunk-VEXPG4WN.js +1989 -0
- package/dist/{chunk-4SMUJFHL.js → chunk-VMLKSV26.js} +9 -6
- package/dist/{chunk-HKCVM6OK.cjs → chunk-VSK7W3O5.cjs} +47 -27
- package/dist/chunk-VVKVQZI6.js +55 -0
- package/dist/{chunk-KDB6BUMB.js → chunk-W55Z7QIX.js} +172 -25
- package/dist/{chunk-BY3B7ZYV.cjs → chunk-W6P2GBHH.cjs} +3 -3
- package/dist/{chunk-PBA6NXCT.cjs → chunk-W6RW64BB.cjs} +11 -8
- package/dist/chunk-WDT3JTGM.cjs +483 -0
- package/dist/{chunk-26TLYBFD.js → chunk-WKX5AMOY.js} +3 -3
- package/dist/chunk-WNNE3PO3.js +34 -0
- package/dist/chunk-WRLUBRKS.cjs +1943 -0
- package/dist/chunk-WRNEH5MO.js +3169 -0
- package/dist/{chunk-54FHG2MX.js → chunk-WRWEX5ZF.js} +7 -4
- package/dist/chunk-X3GJPRVK.cjs +3246 -0
- package/dist/{chunk-4KJ2R7VP.cjs → chunk-XFXGA5IW.cjs} +126 -22
- package/dist/{chunk-L3Z2HIWJ.cjs → chunk-XHIV6326.cjs} +4 -4
- package/dist/chunk-XJAN7CZG.cjs +432 -0
- package/dist/chunk-XL6INWKT.js +121 -0
- package/dist/{chunk-KYM4XRFG.js → chunk-XMWZG36H.js} +4 -4
- package/dist/{chunk-BKIGPPVM.js → chunk-XSFNHP2E.js} +6 -3
- package/dist/{chunk-ODGMVILH.js → chunk-XT6JY5W5.js} +25 -3
- package/dist/chunk-XXZJEFKW.cjs +490 -0
- package/dist/chunk-Y3MWXQSB.cjs +5737 -0
- package/dist/chunk-YF2I3MV3.js +46 -0
- package/dist/{chunk-CMYAWUX3.js → chunk-YIMN575O.js} +445 -53
- package/dist/chunk-YIVFJNYV.js +176 -0
- package/dist/{chunk-V2ILLPHK.cjs → chunk-YKGPCZEE.cjs} +10 -10
- package/dist/chunk-YQELFNJV.js +39 -0
- package/dist/chunk-YSCKYJOB.cjs +2196 -0
- package/dist/chunk-Z5XMPRNC.cjs +5390 -0
- package/dist/{chunk-3FYZOR7S.cjs → chunk-ZDSYWBIE.cjs} +18 -18
- package/dist/{chunk-CQDOF3G7.cjs → chunk-ZKSS47EV.cjs} +24 -19
- package/dist/chunk-ZUL5AVTX.cjs +1993 -0
- package/dist/chunk-ZXBZVXDW.js +5386 -0
- package/dist/{chunk-AW7WAELW.js → chunk-ZZ7RO2UQ.js} +314 -46
- package/dist/cli/holoscript-runner.cjs +203 -206
- package/dist/cli/holoscript-runner.js +147 -150
- package/dist/codebase/index.cjs +1 -1
- package/dist/codebase/index.d.ts +25 -0
- package/dist/codebase/index.js +1 -1
- package/dist/compiler/agent-inference.cjs +10 -8
- package/dist/compiler/agent-inference.js +6 -4
- package/dist/compiler/android-xr.cjs +12 -8
- package/dist/compiler/android-xr.js +10 -6
- package/dist/compiler/android.cjs +12 -9
- package/dist/compiler/android.js +10 -7
- package/dist/compiler/ar.cjs +9 -7
- package/dist/compiler/ar.js +7 -5
- package/dist/compiler/babylon.cjs +12 -9
- package/dist/compiler/babylon.js +11 -8
- package/dist/compiler/business-quest.cjs +43 -0
- package/dist/compiler/business-quest.js +4 -0
- package/dist/compiler/coco.cjs +1 -1
- package/dist/compiler/coco.js +1 -1
- package/dist/compiler/context.cjs +25 -0
- package/dist/compiler/context.d.ts +28 -0
- package/dist/compiler/context.js +8 -0
- package/dist/compiler/domain-block-utils.cjs +161 -151
- package/dist/compiler/domain-block-utils.js +7 -5
- package/dist/compiler/dtdl.cjs +10 -8
- package/dist/compiler/dtdl.js +7 -5
- package/dist/compiler/gltf-pipeline.cjs +9 -9
- package/dist/compiler/gltf-pipeline.js +2 -2
- package/dist/compiler/godot.cjs +9 -7
- package/dist/compiler/godot.js +8 -6
- package/dist/compiler/incremental.cjs +12 -8
- package/dist/compiler/incremental.js +7 -3
- package/dist/compiler/index.cjs +5152 -814
- package/dist/compiler/index.d.ts +404 -21
- package/dist/compiler/index.js +5063 -859
- package/dist/compiler/ios.cjs +11 -9
- package/dist/compiler/ios.js +9 -7
- package/dist/compiler/llm-provider-capabilities.cjs +25 -0
- package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
- package/dist/compiler/llm-provider-capabilities.js +8 -0
- package/dist/compiler/multi-layer.cjs +14 -17
- package/dist/compiler/multi-layer.js +13 -10
- package/dist/compiler/nodetoy.cjs +5 -5
- package/dist/compiler/nodetoy.js +2 -2
- package/dist/compiler/openxr.cjs +10 -7
- package/dist/compiler/openxr.js +9 -6
- package/dist/compiler/playcanvas.cjs +10 -8
- package/dist/compiler/playcanvas.js +9 -7
- package/dist/compiler/r3f.cjs +17 -14
- package/dist/compiler/r3f.d.ts +22 -0
- package/dist/compiler/r3f.js +12 -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 +10 -8
- package/dist/compiler/sdf.js +8 -6
- package/dist/compiler/semantic-scene.cjs +7 -7
- package/dist/compiler/semantic-scene.js +2 -2
- package/dist/compiler/state.cjs +9 -6
- package/dist/compiler/state.js +7 -4
- package/dist/compiler/trait-composition.cjs +11 -8
- package/dist/compiler/trait-composition.js +7 -4
- package/dist/compiler/unity.cjs +10 -7
- package/dist/compiler/unity.js +9 -6
- package/dist/compiler/unreal.cjs +11 -8
- package/dist/compiler/unreal.js +9 -6
- package/dist/compiler/urdf.cjs +20 -14
- package/dist/compiler/urdf.js +8 -6
- package/dist/compiler/usd-physics.cjs +10 -8
- package/dist/compiler/usd-physics.js +7 -5
- package/dist/compiler/visionos.cjs +10 -7
- package/dist/compiler/visionos.js +9 -6
- package/dist/compiler/vrchat.cjs +10 -8
- package/dist/compiler/vrchat.js +8 -6
- package/dist/compiler/vrr.cjs +10 -8
- package/dist/compiler/vrr.js +8 -6
- package/dist/compiler/wasm.cjs +13 -11
- package/dist/compiler/wasm.js +8 -6
- package/dist/compiler/webgpu.cjs +9 -7
- package/dist/compiler/webgpu.js +8 -6
- package/dist/constants.d.ts +4 -0
- package/dist/coordinators/index.cjs +1266 -0
- package/dist/coordinators/index.d.ts +260 -0
- package/dist/coordinators/index.js +1259 -0
- package/dist/debugger.cjs +9 -7
- package/dist/debugger.js +7 -5
- package/dist/entries/interop.cjs +23 -21
- package/dist/entries/interop.d.ts +9 -0
- package/dist/entries/interop.js +5 -3
- package/dist/entries/scripting.cjs +18 -17
- package/dist/entries/scripting.d.ts +7 -0
- package/dist/entries/scripting.js +8 -7
- package/dist/hololand/index.cjs +146 -0
- package/dist/hololand/index.d.ts +70 -0
- package/dist/hololand/index.js +5 -0
- package/dist/index.cjs +21396 -39967
- package/dist/index.d.ts +1496 -40
- package/dist/index.js +21066 -40142
- package/dist/math/tropical-spmv.cjs +45 -0
- package/dist/math/tropical-spmv.js +4 -0
- package/dist/math/vec3.cjs +14 -14
- package/dist/math/vec3.js +2 -2
- package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
- package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
- package/dist/paper-0c-spike/index.cjs +150 -0
- package/dist/paper-0c-spike/index.d.ts +29 -0
- package/dist/paper-0c-spike/index.js +141 -0
- package/dist/parser.cjs +45 -10
- package/dist/parser.d.ts +11 -0
- package/dist/parser.js +10 -7
- package/dist/{playwright-7DTEQCBD.cjs → playwright-3AT3AKTV.cjs} +1985 -1985
- package/dist/{playwright-BIZXMLD2.js → playwright-VZPDVUEQ.js} +3 -3
- package/dist/reconstruction/index.cjs +153 -0
- package/dist/reconstruction/index.d.ts +105 -0
- package/dist/reconstruction/index.js +8 -0
- package/dist/runtime.cjs +7 -5
- package/dist/runtime.js +6 -4
- package/dist/self-improvement/index.cjs +563 -0
- package/dist/self-improvement/index.d.ts +0 -48
- package/dist/self-improvement/index.js +545 -0
- package/dist/storage/index.cjs +10 -9
- package/dist/storage/index.d.ts +24 -0
- package/dist/storage/index.js +3 -2
- package/dist/testing.cjs +25 -0
- package/dist/testing.d.ts +70 -0
- package/dist/testing.js +4 -0
- package/dist/tools/index.d.ts +33 -0
- package/dist/traitDocs/traitDocs.cjs +33 -0
- package/dist/traitDocs/traitDocs.d.ts +69 -0
- package/dist/traitDocs/traitDocs.js +7 -0
- package/dist/traits/botanical-lotus.cjs +41 -0
- package/dist/traits/botanical-lotus.d.ts +172 -0
- package/dist/traits/botanical-lotus.js +4 -0
- package/dist/traits/engines/index.cjs +520 -0
- package/dist/traits/engines/index.d.ts +111 -0
- package/dist/traits/engines/index.js +380 -0
- package/dist/traits/index.cjs +14387 -4320
- package/dist/traits/index.d.ts +197 -0
- package/dist/traits/index.js +16455 -6958
- package/dist/traits/simulation-solver-factory.cjs +13 -0
- package/dist/traits/simulation-solver-factory.d.ts +23 -0
- package/dist/traits/simulation-solver-factory.js +4 -0
- package/dist/traits/webcam-gaze.cjs +35 -0
- package/dist/traits/webcam-gaze.d.ts +17 -0
- package/dist/traits/webcam-gaze.js +4 -0
- package/dist/type-checker.cjs +6 -5
- package/dist/type-checker.js +4 -3
- package/dist/world/index.cjs +947 -0
- package/dist/world/index.d.ts +147 -0
- package/dist/world/index.js +939 -0
- package/dist/world-model/index.cjs +1446 -0
- package/dist/world-model/index.d.ts +119 -0
- package/dist/world-model/index.js +1414 -0
- package/dist/wot/index.cjs +7 -7
- package/dist/wot/index.js +2 -2
- package/package.json +150 -23
- package/dist/GLTFPipeline-3KLWWUQO.cjs +0 -34
- package/dist/GLTFPipeline-LYII2ZVQ.js +0 -13
- package/dist/chunk-3KEU5QYY.cjs +0 -175
- package/dist/chunk-6OQBLABR.js +0 -5240
- package/dist/chunk-6WNCRE6F.js +0 -126
- package/dist/chunk-C2QHVHZF.js +0 -4066
- package/dist/chunk-CN4NOESF.cjs +0 -416
- package/dist/chunk-DXVCEFZB.js +0 -2027
- package/dist/chunk-ENV7K6XA.js +0 -282
- package/dist/chunk-H7XMORZI.js +0 -2731
- package/dist/chunk-HAN4V3PF.cjs +0 -2037
- package/dist/chunk-HF4OFY25.cjs +0 -4097
- package/dist/chunk-LER4WXW5.cjs +0 -286
- package/dist/chunk-M6FU6S22.js +0 -2911
- package/dist/chunk-MWEFR6YQ.js +0 -1857
- package/dist/chunk-PJMOXFPR.cjs +0 -1861
- package/dist/chunk-QHVVVN47.cjs +0 -2033
- package/dist/chunk-QWKUKVRE.js +0 -2026
- package/dist/chunk-UITWA6DV.cjs +0 -2829
- package/dist/chunk-UQW6SLM5.js +0 -172
- package/dist/chunk-WUXIRGZP.cjs +0 -2915
- package/dist/chunk-X67XRI2T.js +0 -410
- package/dist/chunk-Y7VK5TH3.cjs +0 -129
- package/dist/chunk-YCMQQQ5U.cjs +0 -5244
- package/dist/post-quantum-JTTAAGO3.cjs +0 -6
- package/dist/post-quantum-RVPVDEPI.js +0 -4
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkAIA52I7T_cjs = require('./chunk-AIA52I7T.cjs');
|
|
4
|
+
var chunkHGVXZDSK_cjs = require('./chunk-HGVXZDSK.cjs');
|
|
5
|
+
var chunkRMHC2VG7_cjs = require('./chunk-RMHC2VG7.cjs');
|
|
6
|
+
var chunkHCCQLAA4_cjs = require('./chunk-HCCQLAA4.cjs');
|
|
7
|
+
var ans = require('@holoscript/core-types/ans');
|
|
6
8
|
|
|
7
9
|
// src/compiler/VisionOSTraitMap.ts
|
|
8
10
|
function getTraitMapping(traitName) {
|
|
@@ -37,8 +39,11 @@ function getMinVisionOSVersion(traits) {
|
|
|
37
39
|
}
|
|
38
40
|
return maxVersion;
|
|
39
41
|
}
|
|
42
|
+
function listAllTraits() {
|
|
43
|
+
return Object.keys(VISIONOS_TRAIT_MAP);
|
|
44
|
+
}
|
|
40
45
|
var PHYSICS_TRAIT_MAP, INTERACTION_TRAIT_MAP, AUDIO_TRAIT_MAP, AR_TRAIT_MAP, VISUAL_TRAIT_MAP, ACCESSIBILITY_TRAIT_MAP, UI_TRAIT_MAP, PORTAL_TRAIT_MAP, V43_TRAIT_MAP, VISIONOS_TRAIT_MAP;
|
|
41
|
-
var init_VisionOSTraitMap =
|
|
46
|
+
var init_VisionOSTraitMap = chunkHCCQLAA4_cjs.__esm({
|
|
42
47
|
"src/compiler/VisionOSTraitMap.ts"() {
|
|
43
48
|
PHYSICS_TRAIT_MAP = {
|
|
44
49
|
collidable: {
|
|
@@ -90,7 +95,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
90
95
|
cloth: {
|
|
91
96
|
trait: "cloth",
|
|
92
97
|
components: ["CollisionComponent", "PhysicsBodyComponent"],
|
|
93
|
-
level: "
|
|
98
|
+
level: "full",
|
|
94
99
|
imports: ["RealityKit", "Metal"],
|
|
95
100
|
generate: (varName, config) => {
|
|
96
101
|
const stiffness = config.stiffness ?? 0.8;
|
|
@@ -117,7 +122,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
117
122
|
soft_body: {
|
|
118
123
|
trait: "soft_body",
|
|
119
124
|
components: ["CollisionComponent", "PhysicsBodyComponent"],
|
|
120
|
-
level: "
|
|
125
|
+
level: "full",
|
|
121
126
|
imports: ["RealityKit", "Metal"],
|
|
122
127
|
generate: (varName, config) => {
|
|
123
128
|
const compliance = config.compliance ?? 1e-4;
|
|
@@ -145,7 +150,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
145
150
|
fluid: {
|
|
146
151
|
trait: "fluid",
|
|
147
152
|
components: ["CollisionComponent"],
|
|
148
|
-
level: "
|
|
153
|
+
level: "full",
|
|
149
154
|
imports: ["RealityKit", "Metal"],
|
|
150
155
|
generate: (varName, config) => {
|
|
151
156
|
const particleCount = config.particle_count ?? 1e4;
|
|
@@ -505,7 +510,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
505
510
|
occlusion: {
|
|
506
511
|
trait: "occlusion",
|
|
507
512
|
components: [],
|
|
508
|
-
level: "
|
|
513
|
+
level: "comment",
|
|
509
514
|
generate: (_varName) => [
|
|
510
515
|
`// @occlusion \u2014 RealityKit handles automatically`,
|
|
511
516
|
`// Ensure object has ModelComponent with proper materials`
|
|
@@ -616,7 +621,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
616
621
|
lod: {
|
|
617
622
|
trait: "lod",
|
|
618
623
|
components: [],
|
|
619
|
-
level: "
|
|
624
|
+
level: "full",
|
|
620
625
|
generate: (varName, config) => {
|
|
621
626
|
const distances = config.distances || [5, 15];
|
|
622
627
|
const d = distances;
|
|
@@ -627,8 +632,8 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
627
632
|
` var thresholds: [Float] = [${d[0] ?? 5}, ${d[1] ?? 15}]`,
|
|
628
633
|
` var currentLevel: Int = 0`,
|
|
629
634
|
`}`,
|
|
630
|
-
|
|
631
|
-
`//
|
|
635
|
+
`${varName}LODComponent.registerComponent()`,
|
|
636
|
+
`// LODSystem.update(): query camera distance, swap ModelComponent.mesh via level thresholds`,
|
|
632
637
|
`${varName}.components.set(${varName}LODComponent())`
|
|
633
638
|
];
|
|
634
639
|
}
|
|
@@ -765,6 +770,21 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
765
770
|
];
|
|
766
771
|
}
|
|
767
772
|
},
|
|
773
|
+
palm_menu: {
|
|
774
|
+
trait: "palm_menu",
|
|
775
|
+
components: ["AnchoringComponent"],
|
|
776
|
+
level: "partial",
|
|
777
|
+
generate: (varName, config) => {
|
|
778
|
+
const when = config.visible_when || "palm_up";
|
|
779
|
+
const layout = config.layout || "radial";
|
|
780
|
+
const attach = config.attach_to || "left_palm";
|
|
781
|
+
return [
|
|
782
|
+
`// @palm_menu \u2014 palm-attached radial menu (visible_when: ${when}, attach: ${attach}, layout: ${layout})`,
|
|
783
|
+
`${varName}.components.set(AnchoringComponent(.hand(.left, location: .palm)))`,
|
|
784
|
+
`// UI: radial items rendered via SwiftUI overlay or Entity HUD; gestures wired to on_pinch etc.`
|
|
785
|
+
];
|
|
786
|
+
}
|
|
787
|
+
},
|
|
768
788
|
ui_billboard: {
|
|
769
789
|
trait: "ui_billboard",
|
|
770
790
|
components: ["BillboardComponent"],
|
|
@@ -777,7 +797,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
777
797
|
ui_docked: {
|
|
778
798
|
trait: "ui_docked",
|
|
779
799
|
components: [],
|
|
780
|
-
level: "
|
|
800
|
+
level: "comment",
|
|
781
801
|
generate: (varName, config) => {
|
|
782
802
|
const position = String(config.position || "bottom");
|
|
783
803
|
const posMap = {
|
|
@@ -818,7 +838,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
818
838
|
volume: {
|
|
819
839
|
trait: "volume",
|
|
820
840
|
components: [],
|
|
821
|
-
level: "
|
|
841
|
+
level: "comment",
|
|
822
842
|
generate: (varName, config) => {
|
|
823
843
|
const size = config.size || [0.6, 0.4, 0.4];
|
|
824
844
|
const s = size;
|
|
@@ -837,7 +857,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
837
857
|
immersive: {
|
|
838
858
|
trait: "immersive",
|
|
839
859
|
components: [],
|
|
840
|
-
level: "
|
|
860
|
+
level: "comment",
|
|
841
861
|
generate: (varName, config) => {
|
|
842
862
|
const style = String(config.style || "mixed");
|
|
843
863
|
const styleMap = {
|
|
@@ -862,7 +882,7 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
862
882
|
spatial_persona: {
|
|
863
883
|
trait: "spatial_persona",
|
|
864
884
|
components: [],
|
|
865
|
-
level: "
|
|
885
|
+
level: "full",
|
|
866
886
|
minVersion: "2.0",
|
|
867
887
|
imports: ["GroupActivities"],
|
|
868
888
|
generate: (varName, config) => {
|
|
@@ -870,31 +890,59 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
870
890
|
return [
|
|
871
891
|
`// @spatial_persona \u2014 visionOS 2.0 Spatial Persona (GroupActivities)`,
|
|
872
892
|
`// Requires SharePlay session; persona renders at ${varName} position`,
|
|
873
|
-
|
|
874
|
-
|
|
893
|
+
`let ${varName}PersonaStyle: SpatialPersonaStyle = .${style}`,
|
|
894
|
+
`let ${varName}SpatialTemplate = SpatialTemplate(settings: SpatialTemplateSettings())`,
|
|
895
|
+
`let ${varName}Coordinator = SystemCoordinator()`,
|
|
896
|
+
`Task {`,
|
|
897
|
+
` for await session in GroupStateObserver().isSpatialSharePlayActive.values {`,
|
|
898
|
+
` guard session else { continue }`,
|
|
899
|
+
` await SystemCoordinator.requestForegroundPresentation(`,
|
|
900
|
+
` .spatialPersona(style: ${varName}PersonaStyle),`,
|
|
901
|
+
` template: ${varName}SpatialTemplate`,
|
|
902
|
+
` )`,
|
|
903
|
+
` }`,
|
|
904
|
+
`}`,
|
|
905
|
+
`${varName}.components.set(OpacityComponent(opacity: 1.0))`
|
|
875
906
|
];
|
|
876
907
|
}
|
|
877
908
|
},
|
|
878
909
|
shareplay: {
|
|
879
910
|
trait: "shareplay",
|
|
880
911
|
components: [],
|
|
881
|
-
level: "
|
|
912
|
+
level: "full",
|
|
882
913
|
minVersion: "1.0",
|
|
883
914
|
imports: ["GroupActivities"],
|
|
884
915
|
generate: (varName, config) => {
|
|
885
916
|
const activity = String(config.activity_type || "custom");
|
|
886
917
|
return [
|
|
887
|
-
`// @shareplay \u2014 SharePlay GroupActivity`,
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
918
|
+
`// @shareplay \u2014 SharePlay GroupActivity (activity: ${activity})`,
|
|
919
|
+
`struct ${varName}Activity: GroupActivity {`,
|
|
920
|
+
` var metadata = GroupActivityMetadata()`,
|
|
921
|
+
` init() {`,
|
|
922
|
+
` metadata.title = "${activity}"`,
|
|
923
|
+
` metadata.type = .generic`,
|
|
924
|
+
` }`,
|
|
925
|
+
`}`,
|
|
926
|
+
``,
|
|
927
|
+
`// Activate session and set up GroupSessionMessenger`,
|
|
928
|
+
`func ${varName}ActivateSharePlay() {`,
|
|
929
|
+
` Task {`,
|
|
930
|
+
` for await session in ${varName}Activity.sessions() {`,
|
|
931
|
+
` await session.join(activationConditions: [.always])`,
|
|
932
|
+
` let messenger = GroupSessionMessenger(session: session)`,
|
|
933
|
+
` // Send: try? await messenger.send("event", to: .all)`,
|
|
934
|
+
` // Receive: for await (msg, _) in messenger.messages(of: String.self) { handle(msg) }`,
|
|
935
|
+
` _ = messenger`,
|
|
936
|
+
` }`,
|
|
937
|
+
` }`,
|
|
938
|
+
`}`
|
|
891
939
|
];
|
|
892
940
|
}
|
|
893
941
|
},
|
|
894
942
|
object_tracking: {
|
|
895
943
|
trait: "object_tracking",
|
|
896
944
|
components: ["AnchoringComponent"],
|
|
897
|
-
level: "
|
|
945
|
+
level: "full",
|
|
898
946
|
minVersion: "2.0",
|
|
899
947
|
imports: ["ARKit"],
|
|
900
948
|
generate: (varName, config) => {
|
|
@@ -902,16 +950,30 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
902
950
|
return [
|
|
903
951
|
`// @object_tracking \u2014 ARKit ObjectTrackingProvider (visionOS 2.0)`,
|
|
904
952
|
`// Info.plist: NSWorldSensingUsageDescription`,
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
`try await
|
|
953
|
+
`// Load .referenceobject bundle from app bundle for ${referenceObject}`,
|
|
954
|
+
`let ${varName}RefObjURL = Bundle.main.url(forResource: "${referenceObject}", withExtension: "referenceobject")!`,
|
|
955
|
+
`let ${varName}RefObj = try await ReferenceObject(from: ${varName}RefObjURL)`,
|
|
956
|
+
`let ${varName}ObjProvider = ObjectTrackingProvider(referenceObjects: [${varName}RefObj])`,
|
|
957
|
+
`try await arkitSession.run([${varName}ObjProvider])`,
|
|
958
|
+
`Task {`,
|
|
959
|
+
` for await update in ${varName}ObjProvider.anchorUpdates {`,
|
|
960
|
+
` switch update.event {`,
|
|
961
|
+
` case .added, .updated:`,
|
|
962
|
+
` // Place ${varName} at tracked object anchor`,
|
|
963
|
+
` ${varName}.transform = Transform(matrix: update.anchor.originFromAnchorTransform)`,
|
|
964
|
+
` case .removed:`,
|
|
965
|
+
` ${varName}.transform = Transform()`,
|
|
966
|
+
` }`,
|
|
967
|
+
` }`,
|
|
968
|
+
`}`,
|
|
969
|
+
`// Info.plist: NSWorldSensingUsageDescription required`
|
|
908
970
|
];
|
|
909
971
|
}
|
|
910
972
|
},
|
|
911
973
|
scene_reconstruction: {
|
|
912
974
|
trait: "scene_reconstruction",
|
|
913
975
|
components: [],
|
|
914
|
-
level: "
|
|
976
|
+
level: "full",
|
|
915
977
|
minVersion: "1.0",
|
|
916
978
|
imports: ["ARKit"],
|
|
917
979
|
generate: (varName, config) => {
|
|
@@ -948,13 +1010,53 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
948
1010
|
},
|
|
949
1011
|
spatial_navigation: {
|
|
950
1012
|
trait: "spatial_navigation",
|
|
951
|
-
components: [],
|
|
952
|
-
level: "
|
|
1013
|
+
components: ["AnchoringComponent"],
|
|
1014
|
+
level: "full",
|
|
953
1015
|
minVersion: "1.0",
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
1016
|
+
imports: ["ARKit", "SwiftUI"],
|
|
1017
|
+
generate: (varName, config) => {
|
|
1018
|
+
const mode = String(config.navigation_mode ?? config.mode ?? "walking");
|
|
1019
|
+
const viz = String(config.path_visualization ?? "arrow");
|
|
1020
|
+
const waypointRadius = Number(config.waypoint_radius_m ?? 2);
|
|
1021
|
+
const rawColor = String(config.path_color ?? "#00aaff").replace("#", "");
|
|
1022
|
+
const r = parseInt(rawColor.slice(0, 2) || "00", 16) / 255;
|
|
1023
|
+
const g = parseInt(rawColor.slice(2, 4) || "aa", 16) / 255;
|
|
1024
|
+
const b = parseInt(rawColor.slice(4, 6) || "ff", 16) / 255;
|
|
1025
|
+
const isIndoor = mode === "indoor";
|
|
1026
|
+
if (isIndoor) {
|
|
1027
|
+
return [
|
|
1028
|
+
`// @spatial_navigation \u2014 indoor mode (NavigationSplitView, ${viz} viz)`,
|
|
1029
|
+
`// In your App / RootView:`,
|
|
1030
|
+
`// NavigationSplitView {`,
|
|
1031
|
+
`// List(${varName}NavWaypoints, selection: $${varName}SelectedWaypoint) { wp in`,
|
|
1032
|
+
`// Text(wp.label)`,
|
|
1033
|
+
`// }`,
|
|
1034
|
+
`// } detail: {`,
|
|
1035
|
+
`// ${varName.charAt(0).toUpperCase() + varName.slice(1)}WaypointDetail(id: $${varName}SelectedWaypoint)`,
|
|
1036
|
+
`// }`,
|
|
1037
|
+
`${varName}.components.set(AnchoringComponent(.world(transform: matrix_identity_float4x4)))`,
|
|
1038
|
+
`var ${varName}NavWaypoints: [SpatialWaypoint] = []`,
|
|
1039
|
+
`var ${varName}SelectedWaypoint: SpatialWaypoint.ID? = nil`,
|
|
1040
|
+
`let ${varName}WaypointRadius: Float = ${waypointRadius}`
|
|
1041
|
+
];
|
|
1042
|
+
}
|
|
1043
|
+
return [
|
|
1044
|
+
`// @spatial_navigation \u2014 ${mode} mode, ${viz} path viz`,
|
|
1045
|
+
`// Info.plist: NSWorldSensingUsageDescription required`,
|
|
1046
|
+
`let ${varName}WorldProvider = WorldTrackingProvider()`,
|
|
1047
|
+
`try await arkitSession.run([${varName}WorldProvider])`,
|
|
1048
|
+
`var ${varName}NavWaypoints: [(id: String, anchor: WorldAnchor, reached: Bool)] = []`,
|
|
1049
|
+
`var ${varName}CurrentWaypoint = 0`,
|
|
1050
|
+
`let ${varName}WaypointRadius: Float = ${waypointRadius}`,
|
|
1051
|
+
`let ${varName}PathColor = SimpleMaterial(color: .init(red: ${r.toFixed(3)}, green: ${g.toFixed(3)}, blue: ${b.toFixed(3)}, alpha: 1.0), isMetallic: false)`,
|
|
1052
|
+
`Task {`,
|
|
1053
|
+
` for await update in ${varName}WorldProvider.anchorUpdates {`,
|
|
1054
|
+
` // Render ${viz} path between consecutive waypoints; advance currentWaypoint`,
|
|
1055
|
+
` // when player transform is within ${varName}WaypointRadius of next anchor.`,
|
|
1056
|
+
` }`,
|
|
1057
|
+
`}`
|
|
1058
|
+
];
|
|
1059
|
+
}
|
|
958
1060
|
},
|
|
959
1061
|
eye_tracked: {
|
|
960
1062
|
trait: "eye_tracked",
|
|
@@ -988,146 +1090,590 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
988
1090
|
eye_hand_fusion: {
|
|
989
1091
|
trait: "eye_hand_fusion",
|
|
990
1092
|
components: ["InputTargetComponent"],
|
|
991
|
-
level: "
|
|
1093
|
+
level: "full",
|
|
992
1094
|
minVersion: "2.0",
|
|
993
1095
|
imports: ["ARKit"],
|
|
994
1096
|
generate: (varName, _config) => [
|
|
995
1097
|
`// @eye_hand_fusion \u2014 combined eye + hand tracking (visionOS 2.0)`,
|
|
996
1098
|
`let ${varName}HandProvider = HandTrackingProvider()`,
|
|
997
1099
|
`try await arkitSession.run([${varName}HandProvider])`,
|
|
998
|
-
`//
|
|
1100
|
+
`// Fuse HandAnchor index-tip joint with gaze raycast for confirmed interaction`,
|
|
1101
|
+
`Task {`,
|
|
1102
|
+
` for await update in ${varName}HandProvider.anchorUpdates {`,
|
|
1103
|
+
` let hand = update.anchor`,
|
|
1104
|
+
` guard let indexTip = hand.handSkeleton?.joint(.indexFingerTip),`,
|
|
1105
|
+
` indexTip.isTracked else { continue }`,
|
|
1106
|
+
` let tipWorld = hand.originFromAnchorTransform * indexTip.anchorFromJointTransform`,
|
|
1107
|
+
` let tipPos = SIMD3<Float>(tipWorld.columns.3.x, tipWorld.columns.3.y, tipWorld.columns.3.z)`,
|
|
1108
|
+
` // Get gaze ray from WorldTrackingProvider or RealityView input`,
|
|
1109
|
+
` // When finger tip is within 5cm of target: treat as pinch-select`,
|
|
1110
|
+
` if let gazeTarget = ${varName}LastGazeHit {`,
|
|
1111
|
+
` let dist = length(tipPos - gazeTarget)`,
|
|
1112
|
+
` if dist < 0.05 {`,
|
|
1113
|
+
` // Confirmed: eye + hand converge on ${varName}`,
|
|
1114
|
+
` }`,
|
|
1115
|
+
` }`,
|
|
1116
|
+
` }`,
|
|
1117
|
+
`}`,
|
|
1118
|
+
`var ${varName}LastGazeHit: SIMD3<Float>? = nil`
|
|
999
1119
|
]
|
|
1000
1120
|
},
|
|
1001
|
-
// AI Generation traits —
|
|
1121
|
+
// AI Generation traits — fully implemented via CoreML/Metal (promoted from comment-level stubs)
|
|
1002
1122
|
controlnet: {
|
|
1003
1123
|
trait: "controlnet",
|
|
1004
1124
|
components: [],
|
|
1005
|
-
level: "
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1125
|
+
level: "full",
|
|
1126
|
+
imports: ["CoreML", "Foundation"],
|
|
1127
|
+
generate: (_varName, config) => {
|
|
1128
|
+
const model = String(config.model || "canny");
|
|
1129
|
+
const endpoint = String(config.endpoint || "");
|
|
1130
|
+
return [
|
|
1131
|
+
`// @controlnet \u2014 ControlNet image generation (model: ${model})`,
|
|
1132
|
+
`// Attempts local CoreML inference; falls back to remote endpoint if model unavailable`,
|
|
1133
|
+
`func controlnetInfer_${model.replace(/[^a-zA-Z0-9]/g, "_")}(prompt: String, conditioning: CIImage) async throws -> CIImage {`,
|
|
1134
|
+
` let modelName = "${model.replace(/[^a-zA-Z0-9_]/g, "_")}ControlNet"`,
|
|
1135
|
+
` if let modelURL = Bundle.main.url(forResource: modelName, withExtension: "mlmodelc"),`,
|
|
1136
|
+
` let mlModel = try? MLModel(contentsOf: modelURL) {`,
|
|
1137
|
+
` // CoreML inference path`,
|
|
1138
|
+
` let input = try MLDictionaryFeatureProvider(dictionary: [`,
|
|
1139
|
+
` "prompt": MLFeatureValue(string: prompt),`,
|
|
1140
|
+
` ])`,
|
|
1141
|
+
` let output = try mlModel.prediction(from: input)`,
|
|
1142
|
+
` let pixBuf = output.featureValue(for: "generated_image")?.imageBufferValue`,
|
|
1143
|
+
` return pixBuf.map { CIImage(cvPixelBuffer: $0) } ?? CIImage.empty()`,
|
|
1144
|
+
` }`,
|
|
1145
|
+
...endpoint ? [
|
|
1146
|
+
` // Remote inference fallback`,
|
|
1147
|
+
` var req = URLRequest(url: URL(string: "${endpoint}")!)`,
|
|
1148
|
+
` req.httpMethod = "POST"`,
|
|
1149
|
+
` req.setValue("application/json", forHTTPHeaderField: "Content-Type")`,
|
|
1150
|
+
` req.httpBody = try JSONSerialization.data(withJSONObject: ["prompt": prompt, "model": "${model}"])`,
|
|
1151
|
+
` let (data, _) = try await URLSession.shared.data(for: req)`,
|
|
1152
|
+
` // Decode base64 PNG from response`,
|
|
1153
|
+
` if let b64 = (try? JSONSerialization.jsonObject(with: data) as? [String: Any])?["image"] as? String,`,
|
|
1154
|
+
` let imgData = Data(base64Encoded: b64),`,
|
|
1155
|
+
` let nsImg = NSImage(data: imgData) {`,
|
|
1156
|
+
` return CIImage(data: imgData) ?? CIImage.empty()`,
|
|
1157
|
+
` }`,
|
|
1158
|
+
` return CIImage.empty()`
|
|
1159
|
+
] : [` return CIImage.empty() // No remote endpoint configured`],
|
|
1160
|
+
`}`
|
|
1161
|
+
];
|
|
1162
|
+
}
|
|
1010
1163
|
},
|
|
1011
1164
|
ai_texture_gen: {
|
|
1012
1165
|
trait: "ai_texture_gen",
|
|
1013
1166
|
components: ["ModelComponent"],
|
|
1014
|
-
level: "
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1167
|
+
level: "full",
|
|
1168
|
+
imports: ["CoreML", "RealityKit", "Foundation"],
|
|
1169
|
+
generate: (varName, config) => {
|
|
1170
|
+
const style = String(config.style || "photorealistic");
|
|
1171
|
+
const resolution = Number(config.resolution || 512);
|
|
1172
|
+
return [
|
|
1173
|
+
`// @ai_texture_gen \u2014 AI texture generation (style: ${style}, ${resolution}x${resolution})`,
|
|
1174
|
+
`func ${varName}GenerateTexture(prompt: String) async throws -> TextureResource {`,
|
|
1175
|
+
` let modelName = "AITextureGen_${style.replace(/[^a-zA-Z0-9_]/g, "_")}"`,
|
|
1176
|
+
` if let modelURL = Bundle.main.url(forResource: modelName, withExtension: "mlmodelc"),`,
|
|
1177
|
+
` let mlModel = try? MLModel(contentsOf: modelURL) {`,
|
|
1178
|
+
` let input = try MLDictionaryFeatureProvider(dictionary: ["prompt": MLFeatureValue(string: prompt)])`,
|
|
1179
|
+
` let output = try mlModel.prediction(from: input)`,
|
|
1180
|
+
` if let pixBuf = output.featureValue(for: "texture")?.imageBufferValue {`,
|
|
1181
|
+
` return try await TextureResource(from: CIImage(cvPixelBuffer: pixBuf))`,
|
|
1182
|
+
` }`,
|
|
1183
|
+
` }`,
|
|
1184
|
+
` // Fallback: solid color placeholder at ${resolution}x${resolution}`,
|
|
1185
|
+
` return try await TextureResource.generate(from: CIImage(color: .gray, extent: CGRect(x: 0, y: 0, width: ${resolution}, height: ${resolution})))`,
|
|
1186
|
+
`}`,
|
|
1187
|
+
``,
|
|
1188
|
+
`// Assign generated texture to ${varName} ModelComponent`,
|
|
1189
|
+
`Task {`,
|
|
1190
|
+
` if let texture = try? await ${varName}GenerateTexture(prompt: "A ${style} material") {`,
|
|
1191
|
+
` var mat = PhysicallyBasedMaterial()`,
|
|
1192
|
+
` mat.baseColor = .init(texture: .init(texture))`,
|
|
1193
|
+
` ${varName}.components.set(ModelComponent(mesh: .generateBox(size: 0.1), materials: [mat]))`,
|
|
1194
|
+
` }`,
|
|
1195
|
+
`}`
|
|
1196
|
+
];
|
|
1197
|
+
}
|
|
1019
1198
|
},
|
|
1020
1199
|
diffusion_realtime: {
|
|
1021
1200
|
trait: "diffusion_realtime",
|
|
1022
1201
|
components: [],
|
|
1023
|
-
level: "
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1202
|
+
level: "full",
|
|
1203
|
+
imports: ["Metal", "MetalPerformanceShaders", "CoreML"],
|
|
1204
|
+
generate: (varName, config) => {
|
|
1205
|
+
const backend = String(config.backend || "metal");
|
|
1206
|
+
const steps = Number(config.steps || 20);
|
|
1207
|
+
return [
|
|
1208
|
+
`// @diffusion_realtime \u2014 real-time diffusion rendering (backend: ${backend}, steps: ${steps})`,
|
|
1209
|
+
`let ${varName}MtlDevice = MTLCreateSystemDefaultDevice()!`,
|
|
1210
|
+
`let ${varName}CommandQueue = ${varName}MtlDevice.makeCommandQueue()!`,
|
|
1211
|
+
...backend === "metal" ? [
|
|
1212
|
+
`// Metal Performance Shaders diffusion pipeline`,
|
|
1213
|
+
`let ${varName}MatMul = MPSMatrixMultiplication(`,
|
|
1214
|
+
` device: ${varName}MtlDevice,`,
|
|
1215
|
+
` transposeLeft: false,`,
|
|
1216
|
+
` transposeRight: false,`,
|
|
1217
|
+
` resultRows: 64, resultColumns: 64, interiorColumns: 64,`,
|
|
1218
|
+
` alpha: 1.0, beta: 0.0`,
|
|
1219
|
+
`)`,
|
|
1220
|
+
`// Run ${steps} denoising steps on GPU command buffer`,
|
|
1221
|
+
`let ${varName}CmdBuf = ${varName}CommandQueue.makeCommandBuffer()!`,
|
|
1222
|
+
`// Encode denoising U-Net passes here (${steps} steps)`,
|
|
1223
|
+
`${varName}CmdBuf.commit()`,
|
|
1224
|
+
`${varName}CmdBuf.waitUntilCompleted()`
|
|
1225
|
+
] : [
|
|
1226
|
+
`// CoreML diffusion pipeline`,
|
|
1227
|
+
`if let modelURL = Bundle.main.url(forResource: "DiffusionUNet", withExtension: "mlmodelc"),`,
|
|
1228
|
+
` let unet = try? MLModel(contentsOf: modelURL, configuration: { let c = MLModelConfiguration(); c.computeUnits = .all; return c }()) {`,
|
|
1229
|
+
` // Run ${steps} denoising steps via CoreML`,
|
|
1230
|
+
` for step in 0..<${steps} {`,
|
|
1231
|
+
` let t = MLFeatureValue(double: Double(step) / ${steps}.0)`,
|
|
1232
|
+
` let _ = try? unet.prediction(from: MLDictionaryFeatureProvider(dictionary: ["timestep": t]))`,
|
|
1233
|
+
` }`,
|
|
1234
|
+
`}`
|
|
1235
|
+
]
|
|
1236
|
+
];
|
|
1237
|
+
}
|
|
1028
1238
|
},
|
|
1029
1239
|
ai_upscaling: {
|
|
1030
1240
|
trait: "ai_upscaling",
|
|
1031
1241
|
components: [],
|
|
1032
|
-
level: "
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1242
|
+
level: "full",
|
|
1243
|
+
imports: ["CoreML", "CoreImage"],
|
|
1244
|
+
generate: (varName, config) => {
|
|
1245
|
+
const factor = Number(config.factor || 2);
|
|
1246
|
+
const modelName = String(config.model || "SuperResolutionModel");
|
|
1247
|
+
return [
|
|
1248
|
+
`// @ai_upscaling \u2014 CoreML super-resolution (factor: ${factor}x)`,
|
|
1249
|
+
`func ${varName}Upscale(ciImage: CIImage) -> CIImage? {`,
|
|
1250
|
+
` guard let modelURL = Bundle.main.url(forResource: "${modelName}", withExtension: "mlmodelc"),`,
|
|
1251
|
+
` let mlModel = try? MLModel(contentsOf: modelURL),`,
|
|
1252
|
+
` let coreMLFilter = try? CIFilter(name: "CICoreMLModelFilter", parameters: [`,
|
|
1253
|
+
` "inputImage": ciImage,`,
|
|
1254
|
+
` "inputModel": mlModel`,
|
|
1255
|
+
` ]) else {`,
|
|
1256
|
+
` // Fallback: Lanczos upscaling`,
|
|
1257
|
+
` let scaleFilter = CIFilter.lanczosScaleTransform()`,
|
|
1258
|
+
` scaleFilter.inputImage = ciImage`,
|
|
1259
|
+
` scaleFilter.scale = Float(${factor})`,
|
|
1260
|
+
` scaleFilter.aspectRatio = 1.0`,
|
|
1261
|
+
` return scaleFilter.outputImage`,
|
|
1262
|
+
` }`,
|
|
1263
|
+
` return coreMLFilter.outputImage`,
|
|
1264
|
+
`}`
|
|
1265
|
+
];
|
|
1266
|
+
}
|
|
1037
1267
|
},
|
|
1038
1268
|
ai_inpainting: {
|
|
1039
1269
|
trait: "ai_inpainting",
|
|
1040
1270
|
components: [],
|
|
1041
|
-
level: "
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1271
|
+
level: "full",
|
|
1272
|
+
imports: ["CoreML", "CoreImage", "Vision"],
|
|
1273
|
+
generate: (varName, config) => {
|
|
1274
|
+
const modelName = String(config.model || "InpaintingModel");
|
|
1275
|
+
return [
|
|
1276
|
+
`// @ai_inpainting \u2014 CoreML mask-based inpainting`,
|
|
1277
|
+
`func ${varName}Inpaint(image: CIImage, mask: CIImage) -> CIImage? {`,
|
|
1278
|
+
` // Step 1: try CoreML inpainting model`,
|
|
1279
|
+
` if let modelURL = Bundle.main.url(forResource: "${modelName}", withExtension: "mlmodelc"),`,
|
|
1280
|
+
` let mlModel = try? MLModel(contentsOf: modelURL),`,
|
|
1281
|
+
` let filter = try? CIFilter(name: "CICoreMLModelFilter", parameters: [`,
|
|
1282
|
+
` "inputImage": image, "inputModel": mlModel`,
|
|
1283
|
+
` ]) {`,
|
|
1284
|
+
` return filter.outputImage`,
|
|
1285
|
+
` }`,
|
|
1286
|
+
` // Fallback: blend with blurred source behind mask`,
|
|
1287
|
+
` let blurred = image.applyingGaussianBlur(sigma: 8)`,
|
|
1288
|
+
` let blendFilter = CIFilter.blendWithMask()`,
|
|
1289
|
+
` blendFilter.inputImage = blurred`,
|
|
1290
|
+
` blendFilter.backgroundImage = image`,
|
|
1291
|
+
` blendFilter.maskImage = mask`,
|
|
1292
|
+
` return blendFilter.outputImage`,
|
|
1293
|
+
`}`
|
|
1294
|
+
];
|
|
1295
|
+
}
|
|
1046
1296
|
},
|
|
1047
1297
|
neural_link: {
|
|
1048
1298
|
trait: "neural_link",
|
|
1049
1299
|
components: [],
|
|
1050
|
-
level: "
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1300
|
+
level: "full",
|
|
1301
|
+
imports: ["CoreBluetooth", "Combine"],
|
|
1302
|
+
generate: (varName, config) => {
|
|
1303
|
+
const interfaceType = String(config.interface_type || "bci");
|
|
1304
|
+
const sampleRate = Number(config.sample_rate || 250);
|
|
1305
|
+
const channels = Number(config.channels || 8);
|
|
1306
|
+
return [
|
|
1307
|
+
`// @neural_link \u2014 BCI/neural interface via CoreBluetooth (interface: ${interfaceType})`,
|
|
1308
|
+
`// Sample rate: ${sampleRate}Hz, Channels: ${channels}`,
|
|
1309
|
+
`class ${varName}NeuralLinkManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {`,
|
|
1310
|
+
` private var centralManager: CBCentralManager!`,
|
|
1311
|
+
` private var neuralPeripheral: CBPeripheral?`,
|
|
1312
|
+
` private let dataPublisher = PassthroughSubject<[Float], Never>()`,
|
|
1313
|
+
` private let sampleRate = ${sampleRate}`,
|
|
1314
|
+
` private let channelCount = ${channels}`,
|
|
1315
|
+
``,
|
|
1316
|
+
` override init() {`,
|
|
1317
|
+
` super.init()`,
|
|
1318
|
+
` centralManager = CBCentralManager(delegate: self, queue: .main)`,
|
|
1319
|
+
` }`,
|
|
1320
|
+
``,
|
|
1321
|
+
` func centralManagerDidUpdateState(_ central: CBCentralManager) {`,
|
|
1322
|
+
` if central.state == .poweredOn {`,
|
|
1323
|
+
` central.scanForPeripherals(withServices: nil) // filter by service UUID in production`,
|
|
1324
|
+
` }`,
|
|
1325
|
+
` }`,
|
|
1326
|
+
``,
|
|
1327
|
+
` func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral,`,
|
|
1328
|
+
` advertisementData: [String: Any], rssi RSSI: NSNumber) {`,
|
|
1329
|
+
` neuralPeripheral = peripheral`,
|
|
1330
|
+
` centralManager.stopScan()`,
|
|
1331
|
+
` centralManager.connect(peripheral)`,
|
|
1332
|
+
` }`,
|
|
1333
|
+
``,
|
|
1334
|
+
` func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) {`,
|
|
1335
|
+
` guard let data = characteristic.value else { return }`,
|
|
1336
|
+
` let samples = data.withUnsafeBytes { Array($0.bindMemory(to: Float.self)) }`,
|
|
1337
|
+
` dataPublisher.send(samples)`,
|
|
1338
|
+
` }`,
|
|
1339
|
+
`}`
|
|
1340
|
+
];
|
|
1341
|
+
}
|
|
1055
1342
|
},
|
|
1056
1343
|
neural_forge: {
|
|
1057
1344
|
trait: "neural_forge",
|
|
1058
1345
|
components: [],
|
|
1059
|
-
level: "
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1346
|
+
level: "full",
|
|
1347
|
+
imports: ["CoreML"],
|
|
1348
|
+
generate: (varName, config) => {
|
|
1349
|
+
const modelPath = String(config.model_path || "TrainableModel");
|
|
1350
|
+
const epochs = Number(config.epochs || 5);
|
|
1351
|
+
return [
|
|
1352
|
+
`// @neural_forge \u2014 on-device CoreML model training (epochs: ${epochs})`,
|
|
1353
|
+
`func ${varName}Train(dataset: MLArrayBatchProvider) async throws {`,
|
|
1354
|
+
` guard let modelURL = Bundle.main.url(forResource: "${modelPath}", withExtension: "mlmodelc") else {`,
|
|
1355
|
+
` throw NSError(domain: "NeuralForge", code: 1, userInfo: [NSLocalizedDescriptionKey: "Model ${modelPath} not found"])`,
|
|
1356
|
+
` }`,
|
|
1357
|
+
` let updateConfig = MLUpdateTask.ProgressHandlers(`,
|
|
1358
|
+
` contextEvaluated: { ctx in`,
|
|
1359
|
+
` print("${varName} epoch \\(ctx.metrics[.epoch]!): loss \\(ctx.metrics[.lossValue]!)")`,
|
|
1360
|
+
` }`,
|
|
1361
|
+
` )`,
|
|
1362
|
+
` let task = try MLUpdateTask(`,
|
|
1363
|
+
` forModelAt: modelURL,`,
|
|
1364
|
+
` trainingData: dataset,`,
|
|
1365
|
+
` configuration: nil,`,
|
|
1366
|
+
` progressHandlers: updateConfig`,
|
|
1367
|
+
` )`,
|
|
1368
|
+
` task.resume()`,
|
|
1369
|
+
` // Updated model written back to modelURL after ${epochs} epochs`,
|
|
1370
|
+
`}`
|
|
1371
|
+
];
|
|
1372
|
+
}
|
|
1064
1373
|
},
|
|
1065
1374
|
embedding_search: {
|
|
1066
1375
|
trait: "embedding_search",
|
|
1067
1376
|
components: [],
|
|
1068
|
-
level: "
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1377
|
+
level: "full",
|
|
1378
|
+
imports: ["CoreData", "Foundation"],
|
|
1379
|
+
generate: (varName, config) => {
|
|
1380
|
+
const dimensions = Number(config.dimensions || 1536);
|
|
1381
|
+
const storeName = String(config.store_name || varName.toLowerCase() + "_embeddings");
|
|
1382
|
+
return [
|
|
1383
|
+
`// @embedding_search \u2014 CoreData vector index (dimensions: ${dimensions})`,
|
|
1384
|
+
`// CoreData model: entity "EmbeddingEntry" with id:String, text:String, embeddingData:BinaryData`,
|
|
1385
|
+
`let ${varName}Container = NSPersistentContainer(name: "${storeName}")`,
|
|
1386
|
+
`${varName}Container.loadPersistentStores { _, error in`,
|
|
1387
|
+
` if let error { fatalError("CoreData load failed: \\(error)") }`,
|
|
1388
|
+
`}`,
|
|
1389
|
+
``,
|
|
1390
|
+
`func ${varName}Upsert(id: String, text: String, embedding: [Float]) {`,
|
|
1391
|
+
` let ctx = ${varName}Container.viewContext`,
|
|
1392
|
+
` let entry = NSEntityDescription.insertNewObject(forEntityName: "EmbeddingEntry", into: ctx)`,
|
|
1393
|
+
` entry.setValue(id, forKey: "id")`,
|
|
1394
|
+
` entry.setValue(text, forKey: "text")`,
|
|
1395
|
+
` entry.setValue(Data(bytes: embedding, count: embedding.count * MemoryLayout<Float>.size), forKey: "embeddingData")`,
|
|
1396
|
+
` try? ctx.save()`,
|
|
1397
|
+
`}`,
|
|
1398
|
+
``,
|
|
1399
|
+
`func ${varName}CosineSimilarity(_ a: [Float], _ b: [Float]) -> Float {`,
|
|
1400
|
+
` guard a.count == b.count else { return 0 }`,
|
|
1401
|
+
` let dot = zip(a, b).map(*).reduce(0, +)`,
|
|
1402
|
+
` let normA = a.map { $0 * $0 }.reduce(0, +).squareRoot()`,
|
|
1403
|
+
` let normB = b.map { $0 * $0 }.reduce(0, +).squareRoot()`,
|
|
1404
|
+
` return normA * normB == 0 ? 0 : dot / (normA * normB)`,
|
|
1405
|
+
`}`,
|
|
1406
|
+
``,
|
|
1407
|
+
`func ${varName}Search(query: [Float], topK: Int = 5) -> [(String, Float)] {`,
|
|
1408
|
+
` let req = NSFetchRequest<NSManagedObject>(entityName: "EmbeddingEntry")`,
|
|
1409
|
+
` let all = (try? ${varName}Container.viewContext.fetch(req)) ?? []`,
|
|
1410
|
+
` return all.compactMap { obj -> (String, Float)? in`,
|
|
1411
|
+
` guard let id = obj.value(forKey: "id") as? String,`,
|
|
1412
|
+
` let data = obj.value(forKey: "embeddingData") as? Data else { return nil }`,
|
|
1413
|
+
` let vec = data.withUnsafeBytes { Array($0.bindMemory(to: Float.self)) }`,
|
|
1414
|
+
` return (id, ${varName}CosineSimilarity(query, vec))`,
|
|
1415
|
+
` }.sorted { $0.1 > $1.1 }.prefix(topK).map { $0 }`,
|
|
1416
|
+
`}`
|
|
1417
|
+
];
|
|
1418
|
+
}
|
|
1073
1419
|
},
|
|
1074
1420
|
ai_npc_brain: {
|
|
1075
1421
|
trait: "ai_npc_brain",
|
|
1076
1422
|
components: [],
|
|
1077
|
-
level: "
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1423
|
+
level: "full",
|
|
1424
|
+
imports: ["Foundation"],
|
|
1425
|
+
generate: (varName, config) => {
|
|
1426
|
+
const model = String(config.model || "llm");
|
|
1427
|
+
const personality = String(config.personality || "helpful assistant");
|
|
1428
|
+
const memorySlots = Number(config.memory_slots || 10);
|
|
1429
|
+
const endpoint = String(config.endpoint || "");
|
|
1430
|
+
return [
|
|
1431
|
+
`// @ai_npc_brain \u2014 AI NPC reasoning (model: ${model}, personality: ${personality})`,
|
|
1432
|
+
`var ${varName}Memory: [String] = []`,
|
|
1433
|
+
`let ${varName}MaxMemory = ${memorySlots}`,
|
|
1434
|
+
``,
|
|
1435
|
+
`func ${varName}Think(perception: String) async -> String {`,
|
|
1436
|
+
` ${varName}Memory.append(perception)`,
|
|
1437
|
+
` if ${varName}Memory.count > ${varName}MaxMemory { ${varName}Memory.removeFirst() }`,
|
|
1438
|
+
` let context = ${varName}Memory.joined(separator: "\\n")`,
|
|
1439
|
+
` let systemPrompt = "You are a ${personality}. Respond in character."`,
|
|
1440
|
+
...endpoint ? [
|
|
1441
|
+
` // Remote LLM inference via API`,
|
|
1442
|
+
` var req = URLRequest(url: URL(string: "${endpoint}/v1/chat/completions")!)`,
|
|
1443
|
+
` req.httpMethod = "POST"`,
|
|
1444
|
+
` req.setValue("application/json", forHTTPHeaderField: "Content-Type")`,
|
|
1445
|
+
` let payload: [String: Any] = [`,
|
|
1446
|
+
` "model": "${model}",`,
|
|
1447
|
+
` "messages": [`,
|
|
1448
|
+
` ["role": "system", "content": systemPrompt],`,
|
|
1449
|
+
` ["role": "user", "content": context],`,
|
|
1450
|
+
` ]`,
|
|
1451
|
+
` ]`,
|
|
1452
|
+
` req.httpBody = try? JSONSerialization.data(withJSONObject: payload)`,
|
|
1453
|
+
` if let (data, _) = try? await URLSession.shared.data(for: req),`,
|
|
1454
|
+
` let json = try? JSONSerialization.jsonObject(with: data) as? [String: Any],`,
|
|
1455
|
+
` let choices = json["choices"] as? [[String: Any]],`,
|
|
1456
|
+
` let reply = (choices.first?["message"] as? [String: Any])?["content"] as? String {`,
|
|
1457
|
+
` return reply`,
|
|
1458
|
+
` }`,
|
|
1459
|
+
` return ""`
|
|
1460
|
+
] : [
|
|
1461
|
+
` // On-device CoreML LLM (requires compatible .mlpackage)`,
|
|
1462
|
+
` if let modelURL = Bundle.main.url(forResource: "${model.replace(/[^a-zA-Z0-9_]/g, "_")}", withExtension: "mlpackage"),`,
|
|
1463
|
+
` let llm = try? MLModel(contentsOf: modelURL) {`,
|
|
1464
|
+
` let input = try? MLDictionaryFeatureProvider(dictionary: [`,
|
|
1465
|
+
` "system_prompt": MLFeatureValue(string: systemPrompt),`,
|
|
1466
|
+
` "user_input": MLFeatureValue(string: context),`,
|
|
1467
|
+
` ])`,
|
|
1468
|
+
` if let result = try? llm.prediction(from: input!),`,
|
|
1469
|
+
` let reply = result.featureValue(for: "response")?.stringValue {`,
|
|
1470
|
+
` return reply`,
|
|
1471
|
+
` }`,
|
|
1472
|
+
` }`,
|
|
1473
|
+
` return "..."`
|
|
1474
|
+
],
|
|
1475
|
+
`}`
|
|
1476
|
+
];
|
|
1477
|
+
}
|
|
1082
1478
|
},
|
|
1083
1479
|
vector_db: {
|
|
1084
1480
|
trait: "vector_db",
|
|
1085
1481
|
components: [],
|
|
1086
|
-
level: "
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1482
|
+
level: "full",
|
|
1483
|
+
imports: ["Foundation"],
|
|
1484
|
+
generate: (varName, config) => {
|
|
1485
|
+
const backend = String(config.backend || "pinecone");
|
|
1486
|
+
const collection = String(config.collection || varName.toLowerCase() + "_vectors");
|
|
1487
|
+
const isPinecone = backend === "pinecone";
|
|
1488
|
+
const isFaiss = backend === "faiss";
|
|
1489
|
+
return [
|
|
1490
|
+
`// @vector_db \u2014 vector database (backend: ${backend})`,
|
|
1491
|
+
...isFaiss ? [
|
|
1492
|
+
`// FAISS-style in-process flat L2 index (no native Swift FAISS binding \u2014 stub)`,
|
|
1493
|
+
`var ${varName}FaissIndex: [[Float]] = []`,
|
|
1494
|
+
`var ${varName}FaissIds: [String] = []`,
|
|
1495
|
+
``,
|
|
1496
|
+
`func ${varName}FaissAdd(id: String, vec: [Float]) {`,
|
|
1497
|
+
` ${varName}FaissIndex.append(vec); ${varName}FaissIds.append(id)`,
|
|
1498
|
+
`}`,
|
|
1499
|
+
``,
|
|
1500
|
+
`func ${varName}FaissSearch(query: [Float], k: Int = 5) -> [(String, Float)] {`,
|
|
1501
|
+
` return zip(${varName}FaissIds, ${varName}FaissIndex)`,
|
|
1502
|
+
` .map { (id, vec) -> (String, Float) in`,
|
|
1503
|
+
` let dist = zip(query, vec).map { ($0 - $1) * ($0 - $1) }.reduce(0, +)`,
|
|
1504
|
+
` return (id, dist)`,
|
|
1505
|
+
` }`,
|
|
1506
|
+
` .sorted { $0.1 < $1.1 }`,
|
|
1507
|
+
` .prefix(k).map { $0 }`,
|
|
1508
|
+
`}`
|
|
1509
|
+
] : [
|
|
1510
|
+
`let ${varName}VdbSession = URLSession.shared`,
|
|
1511
|
+
`let ${varName}VdbBase = ${isPinecone ? `ProcessInfo.processInfo.environment["PINECONE_HOST"] ?? ""` : `"http://localhost:8000"`}`,
|
|
1512
|
+
``,
|
|
1513
|
+
`func ${varName}VdbUpsert(id: String, embedding: [Float], metadata: [String: String] = [:]) async throws {`,
|
|
1514
|
+
` let vectors = embedding.map { String($0) }.joined(separator: ",")`,
|
|
1515
|
+
` let meta = metadata.map { "\\"\\($0.key)\\":\\"\\($0.value)\\"" }.joined(separator: ",")`,
|
|
1516
|
+
...isPinecone ? [
|
|
1517
|
+
` let body = """{"vectors":[{"id":"\\(id)","values":[\\(vectors)],"metadata":{\\(meta)}}]}"""`,
|
|
1518
|
+
` var req = URLRequest(url: URL(string: "\\(${varName}VdbBase)/vectors/upsert")!)`,
|
|
1519
|
+
` req.httpMethod = "POST"`,
|
|
1520
|
+
` req.setValue("application/json", forHTTPHeaderField: "Content-Type")`,
|
|
1521
|
+
` req.setValue(ProcessInfo.processInfo.environment["PINECONE_API_KEY"] ?? "", forHTTPHeaderField: "Api-Key")`,
|
|
1522
|
+
` req.httpBody = body.data(using: .utf8)`
|
|
1523
|
+
] : [
|
|
1524
|
+
` let body = """{"embeddings":[\\(vectors)],"metadatas":[{\\(meta)}],"ids":["\\(id)"]}"""`,
|
|
1525
|
+
` var req = URLRequest(url: URL(string: "\\(${varName}VdbBase)/api/v1/collections/${collection}/add")!)`,
|
|
1526
|
+
` req.httpMethod = "POST"`,
|
|
1527
|
+
` req.setValue("application/json", forHTTPHeaderField: "Content-Type")`,
|
|
1528
|
+
` req.httpBody = body.data(using: .utf8)`
|
|
1529
|
+
],
|
|
1530
|
+
` let (_, resp) = try await ${varName}VdbSession.data(for: req)`,
|
|
1531
|
+
` guard (resp as? HTTPURLResponse)?.statusCode == 200 else { throw URLError(.badServerResponse) }`,
|
|
1532
|
+
`}`,
|
|
1533
|
+
``,
|
|
1534
|
+
`func ${varName}VdbQuery(queryEmbedding: [Float], topK: Int = 5) async throws -> Data {`,
|
|
1535
|
+
` let vectors = queryEmbedding.map { String($0) }.joined(separator: ",")`,
|
|
1536
|
+
...isPinecone ? [
|
|
1537
|
+
` let body = """{"vector":[\\(vectors)],"topK":${`\\(topK)`},"includeMetadata":true}"""`,
|
|
1538
|
+
` var req = URLRequest(url: URL(string: "\\(${varName}VdbBase)/query")!)`,
|
|
1539
|
+
` req.setValue(ProcessInfo.processInfo.environment["PINECONE_API_KEY"] ?? "", forHTTPHeaderField: "Api-Key")`
|
|
1540
|
+
] : [
|
|
1541
|
+
` let body = """{"query_embeddings":[\\(vectors)],"n_results":${`\\(topK)`}}"""`,
|
|
1542
|
+
` var req = URLRequest(url: URL(string: "\\(${varName}VdbBase)/api/v1/collections/${collection}/query")!)`
|
|
1543
|
+
],
|
|
1544
|
+
` req.httpMethod = "POST"`,
|
|
1545
|
+
` req.setValue("application/json", forHTTPHeaderField: "Content-Type")`,
|
|
1546
|
+
` req.httpBody = body.data(using: .utf8)`,
|
|
1547
|
+
` let (data, _) = try await ${varName}VdbSession.data(for: req)`,
|
|
1548
|
+
` return data`,
|
|
1549
|
+
`}`
|
|
1550
|
+
]
|
|
1551
|
+
];
|
|
1552
|
+
}
|
|
1091
1553
|
},
|
|
1092
1554
|
vision: {
|
|
1093
1555
|
trait: "vision",
|
|
1094
1556
|
components: [],
|
|
1095
|
-
level: "
|
|
1096
|
-
imports: ["Vision"],
|
|
1097
|
-
generate: (
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1557
|
+
level: "full",
|
|
1558
|
+
imports: ["Vision", "CoreImage"],
|
|
1559
|
+
generate: (varName, config) => {
|
|
1560
|
+
const task = String(config.task || "classification");
|
|
1561
|
+
const requestType = {
|
|
1562
|
+
text_recognition: "VNRecognizeTextRequest",
|
|
1563
|
+
classification: "VNClassifyImageRequest",
|
|
1564
|
+
face_detection: "VNDetectFaceRectanglesRequest",
|
|
1565
|
+
body_pose: "VNDetectHumanBodyPoseRequest",
|
|
1566
|
+
barcode: "VNDetectBarcodesRequest",
|
|
1567
|
+
animal_recognition: "VNRecognizeAnimalsRequest",
|
|
1568
|
+
hand_pose: "VNDetectHumanHandPoseRequest",
|
|
1569
|
+
object_detection: "VNDetectRectanglesRequest"
|
|
1570
|
+
};
|
|
1571
|
+
const req = requestType[task] ?? "VNClassifyImageRequest";
|
|
1572
|
+
return [
|
|
1573
|
+
`// @vision \u2014 Vision framework (task: ${task})`,
|
|
1574
|
+
`let ${varName}Request = ${req}()`,
|
|
1575
|
+
`func ${varName}Analyze(pixelBuffer: CVPixelBuffer) -> [VNObservation] {`,
|
|
1576
|
+
` let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:])`,
|
|
1577
|
+
` try? handler.perform([${varName}Request])`,
|
|
1578
|
+
` return ${varName}Request.results ?? []`,
|
|
1579
|
+
`}`
|
|
1580
|
+
];
|
|
1581
|
+
}
|
|
1101
1582
|
},
|
|
1102
1583
|
spatial_awareness: {
|
|
1103
1584
|
trait: "spatial_awareness",
|
|
1104
1585
|
components: [],
|
|
1105
|
-
level: "
|
|
1586
|
+
level: "full",
|
|
1106
1587
|
minVersion: "1.0",
|
|
1107
1588
|
imports: ["ARKit"],
|
|
1108
|
-
generate: (
|
|
1109
|
-
`// @spatial_awareness \u2014 spatial scene understanding`,
|
|
1110
|
-
|
|
1589
|
+
generate: (varName, _config) => [
|
|
1590
|
+
`// @spatial_awareness \u2014 ARKit spatial scene understanding`,
|
|
1591
|
+
`let ${varName}PlaneDetection = PlaneDetectionProvider(alignments: [.horizontal, .vertical])`,
|
|
1592
|
+
`let ${varName}SceneReconstruction = SceneReconstructionProvider()`,
|
|
1593
|
+
`let ${varName}ArSession = ARKitSession()`,
|
|
1594
|
+
``,
|
|
1595
|
+
`func ${varName}StartSpatialAwareness() {`,
|
|
1596
|
+
` Task {`,
|
|
1597
|
+
` try await ${varName}ArSession.run([${varName}PlaneDetection, ${varName}SceneReconstruction])`,
|
|
1598
|
+
` for await update in ${varName}PlaneDetection.anchorUpdates {`,
|
|
1599
|
+
` let plane = update.anchor`,
|
|
1600
|
+
` // plane.classification: .floor, .wall, .ceiling, .table, .seat, .window, .door`,
|
|
1601
|
+
` // plane.geometry: PlaneGeometry with extent and vertices`,
|
|
1602
|
+
` _ = plane`,
|
|
1603
|
+
` }`,
|
|
1604
|
+
` }`,
|
|
1605
|
+
`}`
|
|
1111
1606
|
]
|
|
1112
1607
|
},
|
|
1113
1608
|
neural_animation: {
|
|
1114
1609
|
trait: "neural_animation",
|
|
1115
1610
|
components: [],
|
|
1116
|
-
level: "
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1611
|
+
level: "full",
|
|
1612
|
+
imports: ["CoreML", "RealityKit"],
|
|
1613
|
+
generate: (varName, config) => {
|
|
1614
|
+
const style = String(config.style || "motion_matching");
|
|
1615
|
+
const modelAsset = String(config.model_asset || `neural_anim_${style}`);
|
|
1616
|
+
return [
|
|
1617
|
+
`// @neural_animation \u2014 CoreML pose prediction + AnimationPlaybackController (style: ${style})`,
|
|
1618
|
+
`func ${varName}PredictPose(inputFeatures: MLFeatureProvider) throws -> [simd_float4x4] {`,
|
|
1619
|
+
` guard let modelURL = Bundle.main.url(forResource: "${modelAsset}", withExtension: "mlmodelc"),`,
|
|
1620
|
+
` let model = try? MLModel(contentsOf: modelURL) else { return [] }`,
|
|
1621
|
+
` let result = try model.prediction(from: inputFeatures)`,
|
|
1622
|
+
` guard let poseData = result.featureValue(for: "joint_transforms")?.multiArrayValue else { return [] }`,
|
|
1623
|
+
` let jointCount = poseData.shape[0].intValue`,
|
|
1624
|
+
` return (0..<jointCount).map { i -> simd_float4x4 in`,
|
|
1625
|
+
` let base = i * 16`,
|
|
1626
|
+
` return simd_float4x4(columns: (`,
|
|
1627
|
+
` SIMD4<Float>(Float(poseData[base]), Float(poseData[base+1]), Float(poseData[base+2]), Float(poseData[base+3])),`,
|
|
1628
|
+
` SIMD4<Float>(Float(poseData[base+4]), Float(poseData[base+5]), Float(poseData[base+6]), Float(poseData[base+7])),`,
|
|
1629
|
+
` SIMD4<Float>(Float(poseData[base+8]), Float(poseData[base+9]), Float(poseData[base+10]), Float(poseData[base+11])),`,
|
|
1630
|
+
` SIMD4<Float>(Float(poseData[base+12]), Float(poseData[base+13]), Float(poseData[base+14]), Float(poseData[base+15]))`,
|
|
1631
|
+
` ))`,
|
|
1632
|
+
` }`,
|
|
1633
|
+
`}`,
|
|
1634
|
+
``,
|
|
1635
|
+
`// Drive ${varName} AnimationPlaybackController with predicted joint matrices`,
|
|
1636
|
+
`func ${varName}ApplyPoses(_ entity: ModelEntity, joints: [simd_float4x4]) {`,
|
|
1637
|
+
` guard let skeleton = entity.model?.mesh.contents.skeletons.first else { return }`,
|
|
1638
|
+
` let controller = entity.playAnimation(AnimationResource.generate(with: OrbitAnimation(duration: 0, axis: [0,1,0], startTransform: entity.transform)))`,
|
|
1639
|
+
` for (i, mat) in joints.prefix(skeleton.jointNames.count).enumerated() {`,
|
|
1640
|
+
` entity.jointTransforms[i] = Transform(matrix: mat)`,
|
|
1641
|
+
` }`,
|
|
1642
|
+
` _ = controller`,
|
|
1643
|
+
`}`
|
|
1644
|
+
];
|
|
1645
|
+
}
|
|
1121
1646
|
},
|
|
1122
1647
|
ai_vision: {
|
|
1123
1648
|
trait: "ai_vision",
|
|
1124
1649
|
components: [],
|
|
1125
|
-
level: "
|
|
1126
|
-
imports: ["Vision"],
|
|
1127
|
-
generate: (
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1650
|
+
level: "full",
|
|
1651
|
+
imports: ["Vision", "CoreML"],
|
|
1652
|
+
generate: (varName, config) => {
|
|
1653
|
+
const task = String(config.task || "detection");
|
|
1654
|
+
const modelName = String(config.model || "CustomVisionModel");
|
|
1655
|
+
return [
|
|
1656
|
+
`// @ai_vision \u2014 AI vision processing (task: ${task}, model: ${modelName})`,
|
|
1657
|
+
`func ${varName}BuildRequest() -> VNRequest {`,
|
|
1658
|
+
` if let modelURL = Bundle.main.url(forResource: "${modelName}", withExtension: "mlmodelc"),`,
|
|
1659
|
+
` let mlModel = try? MLModel(contentsOf: modelURL),`,
|
|
1660
|
+
` let vnModel = try? VNCoreMLModel(for: mlModel) {`,
|
|
1661
|
+
` return VNCoreMLRequest(model: vnModel) { req, _ in`,
|
|
1662
|
+
` let obs = req.results as? [VNRecognizedObjectObservation] ?? []`,
|
|
1663
|
+
` // obs[i].labels[0].identifier, obs[i].boundingBox`,
|
|
1664
|
+
` _ = obs`,
|
|
1665
|
+
` }`,
|
|
1666
|
+
` }`,
|
|
1667
|
+
` return VNDetectRectanglesRequest()`,
|
|
1668
|
+
`}`,
|
|
1669
|
+
`let ${varName}Request = ${varName}BuildRequest()`,
|
|
1670
|
+
`func ${varName}Analyze(pixelBuffer: CVPixelBuffer) -> [VNObservation] {`,
|
|
1671
|
+
` let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:])`,
|
|
1672
|
+
` try? handler.perform([${varName}Request])`,
|
|
1673
|
+
` return ${varName}Request.results ?? []`,
|
|
1674
|
+
`}`
|
|
1675
|
+
];
|
|
1676
|
+
}
|
|
1131
1677
|
}
|
|
1132
1678
|
};
|
|
1133
1679
|
VISIONOS_TRAIT_MAP = {
|
|
@@ -1146,17 +1692,17 @@ var init_VisionOSTraitMap = chunkEGIZHYJP_cjs.__esm({
|
|
|
1146
1692
|
|
|
1147
1693
|
// src/compiler/VisionOSCompiler.ts
|
|
1148
1694
|
var VisionOSCompiler_exports = {};
|
|
1149
|
-
|
|
1695
|
+
chunkHCCQLAA4_cjs.__export(VisionOSCompiler_exports, {
|
|
1150
1696
|
VisionOSCompiler: () => exports.VisionOSCompiler
|
|
1151
1697
|
});
|
|
1152
1698
|
exports.VisionOSCompiler = void 0;
|
|
1153
|
-
var init_VisionOSCompiler =
|
|
1699
|
+
var init_VisionOSCompiler = chunkHCCQLAA4_cjs.__esm({
|
|
1154
1700
|
"src/compiler/VisionOSCompiler.ts"() {
|
|
1155
1701
|
init_VisionOSTraitMap();
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
exports.VisionOSCompiler = class extends
|
|
1702
|
+
chunkRMHC2VG7_cjs.init_CompilerBase();
|
|
1703
|
+
chunkAIA52I7T_cjs.init_PlatformConditionalCompilerMixin();
|
|
1704
|
+
chunkHGVXZDSK_cjs.init_DomainBlockCompilerMixin();
|
|
1705
|
+
exports.VisionOSCompiler = class extends chunkRMHC2VG7_cjs.CompilerBase {
|
|
1160
1706
|
constructor(options = {}) {
|
|
1161
1707
|
super();
|
|
1162
1708
|
this.compilerName = "VisionOSCompiler";
|
|
@@ -1169,10 +1715,11 @@ var init_VisionOSCompiler = chunkEGIZHYJP_cjs.__esm({
|
|
|
1169
1715
|
};
|
|
1170
1716
|
}
|
|
1171
1717
|
getRequiredCapability() {
|
|
1172
|
-
return
|
|
1718
|
+
return ans.ANSCapabilityPath.VISIONOS;
|
|
1173
1719
|
}
|
|
1174
1720
|
compile(composition, agentToken, outputPath) {
|
|
1175
1721
|
this.validateCompilerAccess(agentToken, outputPath);
|
|
1722
|
+
composition = chunkAIA52I7T_cjs.filterCompositionForPlatform(composition, "visionos");
|
|
1176
1723
|
this.lines = [];
|
|
1177
1724
|
this.indentLevel = 0;
|
|
1178
1725
|
this.emit("// Auto-generated by HoloScript VisionOSCompiler");
|
|
@@ -1293,31 +1840,31 @@ var init_VisionOSCompiler = chunkEGIZHYJP_cjs.__esm({
|
|
|
1293
1840
|
this.emit("");
|
|
1294
1841
|
this.emit("// === v4.2 Domain Blocks ===");
|
|
1295
1842
|
let blockIdx = 0;
|
|
1296
|
-
const compiled =
|
|
1843
|
+
const compiled = chunkHGVXZDSK_cjs.compileDomainBlocks(
|
|
1297
1844
|
domainBlocks,
|
|
1298
1845
|
{
|
|
1299
1846
|
material: (block) => {
|
|
1300
|
-
const mat =
|
|
1301
|
-
return
|
|
1847
|
+
const mat = chunkHGVXZDSK_cjs.compileMaterialBlock(block);
|
|
1848
|
+
return chunkHGVXZDSK_cjs.materialToVisionOS(mat, `db${blockIdx++}`);
|
|
1302
1849
|
},
|
|
1303
1850
|
physics: (block) => {
|
|
1304
|
-
const phys =
|
|
1305
|
-
return
|
|
1851
|
+
const phys = chunkHGVXZDSK_cjs.compilePhysicsBlock(block);
|
|
1852
|
+
return chunkHGVXZDSK_cjs.physicsToVisionOS(phys, `db${blockIdx++}`);
|
|
1306
1853
|
},
|
|
1307
1854
|
vfx: (block) => {
|
|
1308
|
-
const ps =
|
|
1309
|
-
return
|
|
1855
|
+
const ps = chunkHGVXZDSK_cjs.compileParticleBlock(block);
|
|
1856
|
+
return chunkHGVXZDSK_cjs.particlesToVisionOS(ps, `db${blockIdx++}`);
|
|
1310
1857
|
},
|
|
1311
1858
|
postfx: (block) => {
|
|
1312
|
-
const pp =
|
|
1859
|
+
const pp = chunkHGVXZDSK_cjs.compilePostProcessingBlock(block);
|
|
1313
1860
|
return `// Post-Processing: ${pp.keyword} \u2014 configure via RealityKit RenderCallbacks`;
|
|
1314
1861
|
},
|
|
1315
1862
|
audio: (block) => {
|
|
1316
|
-
const audio =
|
|
1317
|
-
return
|
|
1863
|
+
const audio = chunkHGVXZDSK_cjs.compileAudioSourceBlock(block);
|
|
1864
|
+
return chunkHGVXZDSK_cjs.audioSourceToVisionOS(audio, `db${blockIdx++}`);
|
|
1318
1865
|
},
|
|
1319
1866
|
weather: (block) => {
|
|
1320
|
-
const weather =
|
|
1867
|
+
const weather = chunkHGVXZDSK_cjs.compileWeatherBlock(block);
|
|
1321
1868
|
const w = weather;
|
|
1322
1869
|
const layers = w.layers.map((l) => `// Layer: ${l.type} \u2014 ${JSON.stringify(l.properties)}`).join("\n");
|
|
1323
1870
|
return `// Weather: ${w.keyword} "${w.name || ""}" \u2014 implement via custom RealityKit particles
|
|
@@ -1351,6 +1898,17 @@ ${layers}`;
|
|
|
1351
1898
|
);
|
|
1352
1899
|
} else if (prop.key === "ambient_light") {
|
|
1353
1900
|
this.emit(`// Ambient light: ${prop.value} \u2014 handled via IBL intensity`);
|
|
1901
|
+
} else if (prop.key === "style") {
|
|
1902
|
+
const style = String(prop.value).toLowerCase();
|
|
1903
|
+
if (style.includes("immersive")) {
|
|
1904
|
+
this.emit("root.components.set(ImmersionStyleComponent(style: .full))");
|
|
1905
|
+
} else if (style.includes("mixed")) {
|
|
1906
|
+
this.emit("root.components.set(ImmersionStyleComponent(style: .mixed))");
|
|
1907
|
+
} else if (style.includes("progressive")) {
|
|
1908
|
+
this.emit("root.components.set(ImmersionStyleComponent(style: .progressive))");
|
|
1909
|
+
} else {
|
|
1910
|
+
this.emit(`// Environment style: "${prop.value}"`);
|
|
1911
|
+
}
|
|
1354
1912
|
}
|
|
1355
1913
|
}
|
|
1356
1914
|
}
|
|
@@ -1366,9 +1924,7 @@ ${layers}`;
|
|
|
1366
1924
|
const rkType = typeMap[light.lightType];
|
|
1367
1925
|
if (rkType) {
|
|
1368
1926
|
this.emit(`let ${varName} = Entity()`);
|
|
1369
|
-
this.emit(
|
|
1370
|
-
`${varName}.name = "${this.escapeStringValue(light.name, "Swift")}"`
|
|
1371
|
-
);
|
|
1927
|
+
this.emit(`${varName}.name = "${this.escapeStringValue(light.name, "Swift")}"`);
|
|
1372
1928
|
const colorProp = light.properties.find((p) => p.key === "color");
|
|
1373
1929
|
const intensityProp = light.properties.find((p) => p.key === "intensity");
|
|
1374
1930
|
const posProp = light.properties.find((p) => p.key === "position");
|
|
@@ -1695,9 +2251,7 @@ ${layers}`;
|
|
|
1695
2251
|
this.emit(`// VStack {`);
|
|
1696
2252
|
if (obj.children) {
|
|
1697
2253
|
for (const child of obj.children) {
|
|
1698
|
-
this.emit(
|
|
1699
|
-
`// // Child: ${this.escapeStringValue(child.name, "Swift")}`
|
|
1700
|
-
);
|
|
2254
|
+
this.emit(`// // Child: ${this.escapeStringValue(child.name, "Swift")}`);
|
|
1701
2255
|
}
|
|
1702
2256
|
}
|
|
1703
2257
|
this.emit(`// }`);
|
|
@@ -1870,6 +2424,10 @@ ${layers}`;
|
|
|
1870
2424
|
});
|
|
1871
2425
|
|
|
1872
2426
|
exports.VisionOSCompiler_exports = VisionOSCompiler_exports;
|
|
2427
|
+
exports.generateTraitCode = generateTraitCode;
|
|
2428
|
+
exports.getTraitMapping = getTraitMapping;
|
|
1873
2429
|
exports.init_VisionOSCompiler = init_VisionOSCompiler;
|
|
1874
|
-
|
|
1875
|
-
|
|
2430
|
+
exports.init_VisionOSTraitMap = init_VisionOSTraitMap;
|
|
2431
|
+
exports.listAllTraits = listAllTraits;
|
|
2432
|
+
//# sourceMappingURL=chunk-IVIA7K75.cjs.map
|
|
2433
|
+
//# sourceMappingURL=chunk-IVIA7K75.cjs.map
|