@holoscript/core 7.0.0 → 8.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/bin/holoscript.cjs +3 -0
- package/dist/GLTFPipeline-N6B6PJ6G.cjs +38 -0
- package/dist/GLTFPipeline-P3WMNYCN.js +17 -0
- package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
- package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
- package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
- package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
- package/dist/HoloScriptRuntime-CBYJX3LZ.js +10 -0
- package/dist/HoloScriptRuntime-VJ374RER.cjs +19 -0
- package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
- package/dist/USDZExporter-D2HQLQYK.js +1035 -0
- 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-2BSMSUCE.js +1941 -0
- package/dist/chunk-2IWC4FP7.cjs +1189 -0
- package/dist/chunk-2M2DPHKB.js +762 -0
- package/dist/chunk-2X7NGX3M.js +2426 -0
- package/dist/chunk-2YSNA2F2.cjs +1274 -0
- package/dist/chunk-3FOKASKO.cjs +348 -0
- package/dist/chunk-3WZEJHUQ.cjs +116 -0
- package/dist/chunk-4C57PR42.js +468 -0
- package/dist/chunk-4GU5GCIY.js +1384 -0
- package/dist/chunk-4N4SXXWF.js +769 -0
- package/dist/chunk-4PDEPEQW.cjs +41 -0
- package/dist/chunk-4R6SBXDB.js +45 -0
- package/dist/chunk-4SDKXQ4C.js +811 -0
- package/dist/chunk-4V2E7U7Q.cjs +2015 -0
- package/dist/chunk-5FSKKMR7.cjs +2092 -0
- package/dist/chunk-5GLCTO44.js +161 -0
- package/dist/chunk-5H2G27PK.cjs +627 -0
- package/dist/chunk-5JEU52DW.js +382 -0
- package/dist/chunk-5NWINHR5.cjs +689 -0
- package/dist/chunk-5S7RKFGR.cjs +446 -0
- package/dist/chunk-5WUNN6ZN.cjs +428 -0
- package/dist/chunk-6CTRH7HT.cjs +1985 -0
- package/dist/chunk-6EX3I5P4.cjs +130 -0
- package/dist/chunk-6Q7RC2MK.cjs +1418 -0
- package/dist/chunk-7H33U5SM.cjs +413 -0
- package/dist/chunk-7M3PNU2M.cjs +672 -0
- package/dist/chunk-7T25IEZ2.js +449 -0
- package/dist/chunk-7V4JI5TB.cjs +6947 -0
- package/dist/chunk-A6KINLZJ.js +236 -0
- package/dist/chunk-ADADVMXY.js +404 -0
- package/dist/chunk-AIA52I7T.cjs +543 -0
- package/dist/chunk-ALC6K7GL.cjs +4402 -0
- package/dist/chunk-ANXZFVY2.js +113 -0
- package/dist/chunk-AOVGZ25K.cjs +56583 -0
- package/dist/chunk-AVJHHUC5.cjs +718 -0
- package/dist/chunk-BGY3SDG3.js +4396 -0
- package/dist/chunk-BOVPWH4H.js +3857 -0
- package/dist/chunk-BRQJKJGT.cjs +20 -0
- package/dist/chunk-C37BHB7N.cjs +636 -0
- package/dist/chunk-CBJY23VL.js +126 -0
- package/dist/chunk-CCATWPXM.js +778 -0
- package/dist/chunk-CIWWXYHZ.cjs +50 -0
- package/dist/chunk-CMT5NMMS.js +669 -0
- package/dist/chunk-CR4FMIWL.cjs +1049 -0
- package/dist/chunk-CR7XRXRN.cjs +639 -0
- package/dist/chunk-CSD27UNQ.js +2176 -0
- package/dist/chunk-D3STJ56J.js +714 -0
- package/dist/chunk-DAJXW4KX.js +725 -0
- package/dist/chunk-DHO2YRIM.js +756 -0
- package/dist/chunk-DTGBOSEM.cjs +319 -0
- package/dist/chunk-E6XXE66V.js +2252 -0
- package/dist/chunk-E7JP3BS3.cjs +61 -0
- package/dist/chunk-EKBKLK7P.js +1169 -0
- package/dist/chunk-EKYL4PE3.cjs +404 -0
- package/dist/chunk-EXKSFGSX.cjs +274 -0
- package/dist/chunk-EXUP2BUM.cjs +1173 -0
- package/dist/chunk-FDSGHPAK.js +130 -0
- package/dist/chunk-FEWUHQNM.cjs +144 -0
- package/dist/chunk-FFAOS5HQ.js +70 -0
- package/dist/chunk-FGGJQRLZ.js +270 -0
- package/dist/chunk-FHP6LXJS.js +415 -0
- package/dist/chunk-FJPADH77.cjs +666 -0
- package/dist/chunk-FL33V6U7.js +421 -0
- package/dist/chunk-FYSPZT4V.cjs +169 -0
- package/dist/chunk-GIOYPNTH.js +5575 -0
- package/dist/chunk-GJNCFRJU.cjs +125 -0
- package/dist/chunk-GMP623FG.cjs +1508 -0
- package/dist/chunk-GQHQOPXZ.cjs +5580 -0
- package/dist/chunk-GTU2Z2WW.cjs +262 -0
- package/dist/chunk-GYZE55MO.js +2007 -0
- package/dist/chunk-GZG4KA4E.js +529 -0
- package/dist/chunk-H652NHX5.js +600 -0
- package/dist/chunk-HCCQLAA4.cjs +74 -0
- package/dist/chunk-HKEXJUWS.cjs +4007 -0
- package/dist/chunk-HNDK4IQU.cjs +5737 -0
- package/dist/chunk-HR2OSYVQ.js +56165 -0
- package/dist/chunk-HYNTS5CP.js +422 -0
- package/dist/chunk-I6XZ5DZF.cjs +488 -0
- package/dist/chunk-ILRBGFVD.cjs +72 -0
- package/dist/chunk-IUDGEUDO.cjs +1409 -0
- package/dist/chunk-IUTY5WQ2.cjs +424 -0
- package/dist/chunk-IVY74O6C.js +247 -0
- package/dist/chunk-IWC5DM2M.cjs +611 -0
- package/dist/chunk-J32ZJZJH.js +554 -0
- package/dist/chunk-J52VSAQ7.js +6884 -0
- package/dist/chunk-J6M4FPK5.js +421 -0
- package/dist/chunk-J7XZV333.js +844 -0
- package/dist/chunk-JBNDTXXV.cjs +2433 -0
- package/dist/chunk-JC5YBPSF.cjs +984 -0
- package/dist/chunk-JD7CIZ33.js +1949 -0
- package/dist/chunk-JIBL5LRK.js +4287 -0
- package/dist/chunk-JIYN45TV.cjs +2525 -0
- package/dist/chunk-K574J76X.cjs +457 -0
- package/dist/chunk-KHDZJE5D.cjs +2196 -0
- package/dist/chunk-KKFZ3B6J.cjs +557 -0
- package/dist/chunk-KKP7JKN4.cjs +6002 -0
- package/dist/chunk-KPJL34Y7.cjs +186 -0
- package/dist/chunk-KQCN6AKJ.cjs +3042 -0
- package/dist/chunk-L5LKKENW.cjs +424 -0
- package/dist/chunk-LHAXPADA.js +882 -0
- package/dist/chunk-LM2VU56C.cjs +37 -0
- package/dist/chunk-M56JSP4A.js +400 -0
- package/dist/chunk-MBOOR7X4.js +18 -0
- package/dist/chunk-MQWAT42R.cjs +4310 -0
- package/dist/chunk-MXFUTKCO.js +56 -0
- package/dist/chunk-MYY4PMWX.cjs +264 -0
- package/dist/chunk-N75IH2HY.js +258 -0
- package/dist/chunk-NCWCUZNS.cjs +72 -0
- package/dist/chunk-NG77ATEW.cjs +778 -0
- package/dist/chunk-NW5G5FBQ.js +215 -0
- package/dist/chunk-OBIYPYYS.cjs +1993 -0
- package/dist/chunk-OH2FAIVU.js +608 -0
- package/dist/chunk-OIQYIIO3.cjs +473 -0
- package/dist/chunk-OL46QLBJ.js +61 -0
- package/dist/chunk-OMXII44L.js +5386 -0
- package/dist/chunk-OSYNRVOV.cjs +243 -0
- package/dist/chunk-PGANYCAG.cjs +220 -0
- package/dist/chunk-PHENW4MQ.js +65 -0
- package/dist/chunk-PY37LNDP.js +686 -0
- package/dist/chunk-Q56TT7IL.js +483 -0
- package/dist/chunk-QD32ADK6.js +1046 -0
- package/dist/chunk-QPOQ7VPI.js +1491 -0
- package/dist/chunk-QPSKHBJP.js +5963 -0
- package/dist/chunk-QXH7QDSZ.js +1989 -0
- package/dist/chunk-R24NNAEG.js +1399 -0
- package/dist/chunk-R75BSDH7.cjs +50 -0
- package/dist/chunk-RARB3MBR.js +207 -0
- package/dist/chunk-ROHLEP2W.cjs +847 -0
- package/dist/chunk-S3MDHNKB.cjs +490 -0
- package/dist/chunk-S6YWHCKV.cjs +410 -0
- package/dist/chunk-SIEXCILW.js +229 -0
- package/dist/chunk-SLU6UPJI.cjs +410 -0
- package/dist/chunk-SMIWS6DE.cjs +212 -0
- package/dist/chunk-T5J7ZKP3.cjs +4885 -0
- package/dist/chunk-TDCNJHWO.js +341 -0
- package/dist/chunk-TG7O4WBC.js +406 -0
- package/dist/chunk-THCK6ECW.js +2085 -0
- package/dist/chunk-TJHVSBP2.js +439 -0
- package/dist/chunk-TVHSPJ4N.cjs +606 -0
- package/dist/chunk-TWUXUCEW.cjs +781 -0
- package/dist/chunk-U44IKGG7.cjs +5390 -0
- package/dist/chunk-UFZZ7TSN.cjs +886 -0
- package/dist/chunk-UJXISJBN.js +487 -0
- package/dist/chunk-UOIGFQXC.cjs +9750 -0
- package/dist/chunk-URG2SJLK.js +2521 -0
- package/dist/chunk-UWJHCOH2.js +623 -0
- package/dist/chunk-V6MKC2FZ.js +979 -0
- package/dist/chunk-VJ3L7CHT.cjs +169 -0
- package/dist/chunk-VMLKSV26.js +1216 -0
- package/dist/chunk-VVKVQZI6.js +55 -0
- package/dist/chunk-W6RW64BB.cjs +1219 -0
- package/dist/chunk-WKX5AMOY.js +309 -0
- package/dist/chunk-WNNE3PO3.js +34 -0
- package/dist/chunk-WRKUDAZJ.js +3038 -0
- package/dist/chunk-WRLUBRKS.cjs +1943 -0
- package/dist/chunk-WRNEH5MO.js +3169 -0
- package/dist/chunk-WRWEX5ZF.js +658 -0
- package/dist/chunk-X3GJPRVK.cjs +3246 -0
- package/dist/chunk-X3UVCWNL.cjs +2257 -0
- package/dist/chunk-XB274MW5.cjs +814 -0
- package/dist/chunk-XHIV6326.cjs +793 -0
- package/dist/chunk-XIVIE43A.cjs +729 -0
- package/dist/chunk-XJAN7CZG.cjs +432 -0
- package/dist/chunk-XKTPFXGA.js +164 -0
- package/dist/chunk-XL6INWKT.js +121 -0
- package/dist/chunk-XSFNHP2E.js +632 -0
- package/dist/chunk-XT6JY5W5.js +9684 -0
- package/dist/chunk-XUILI4KB.cjs +430 -0
- package/dist/chunk-YF2I3MV3.js +46 -0
- package/dist/chunk-YIMN575O.js +4847 -0
- package/dist/chunk-YIVFJNYV.js +176 -0
- package/dist/chunk-YKGPCZEE.cjs +237 -0
- package/dist/chunk-YN2YWTXW.js +5731 -0
- package/dist/chunk-YN6V7R3L.cjs +327 -0
- package/dist/chunk-YQELFNJV.js +39 -0
- package/dist/chunk-YVD3CSO3.js +1183 -0
- package/dist/chunk-YVOAF4ML.js +623 -0
- package/dist/chunk-YWOBW2PV.cjs +759 -0
- package/dist/chunk-YYXH45E2.js +426 -0
- package/dist/chunk-ZDSYWBIE.cjs +69 -0
- package/dist/chunk-ZU7NIRT6.js +325 -0
- package/dist/chunk-ZZ7RO2UQ.js +1243 -0
- package/dist/cli/holoscript-runner.cjs +2255 -0
- package/dist/cli/holoscript-runner.js +2230 -0
- package/dist/codebase/index.cjs +336 -0
- package/dist/codebase/index.js +331 -0
- package/dist/compiler/agent-inference.cjs +31 -0
- package/dist/compiler/agent-inference.js +8 -0
- package/dist/compiler/android-xr.cjs +24 -0
- package/dist/compiler/android-xr.js +14 -0
- package/dist/compiler/android.cjs +24 -0
- package/dist/compiler/android.js +14 -0
- package/dist/compiler/ar.cjs +23 -0
- package/dist/compiler/ar.js +11 -0
- package/dist/compiler/babylon.cjs +21 -0
- package/dist/compiler/babylon.js +15 -0
- package/dist/compiler/business-quest.cjs +43 -0
- package/dist/compiler/business-quest.js +4 -0
- package/dist/compiler/coco.cjs +27 -0
- package/dist/compiler/coco.js +4 -0
- 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 +609 -0
- package/dist/compiler/domain-block-utils.js +11 -0
- package/dist/compiler/dtdl.cjs +27 -0
- package/dist/compiler/dtdl.js +11 -0
- package/dist/compiler/gltf-pipeline.cjs +39 -0
- package/dist/compiler/gltf-pipeline.js +4 -0
- package/dist/compiler/godot.cjs +18 -0
- package/dist/compiler/godot.js +12 -0
- package/dist/compiler/incremental.cjs +34 -0
- package/dist/compiler/incremental.js +9 -0
- package/dist/compiler/index.cjs +5408 -0
- package/dist/compiler/index.d.ts +334 -21
- package/dist/compiler/index.js +5069 -0
- package/dist/compiler/ios.cjs +23 -0
- package/dist/compiler/ios.js +13 -0
- 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 +24 -0
- package/dist/compiler/multi-layer.js +15 -0
- package/dist/compiler/nodetoy.cjs +23 -0
- package/dist/compiler/nodetoy.d.ts +69 -0
- package/dist/compiler/nodetoy.js +4 -0
- package/dist/compiler/openxr.cjs +19 -0
- package/dist/compiler/openxr.js +13 -0
- package/dist/compiler/playcanvas.cjs +19 -0
- package/dist/compiler/playcanvas.js +13 -0
- package/dist/compiler/r3f.cjs +39 -0
- package/dist/compiler/r3f.d.ts +22 -0
- package/dist/compiler/r3f.js +17 -0
- package/dist/compiler/remotion.cjs +23 -0
- package/dist/compiler/remotion.js +4 -0
- package/dist/compiler/reproducibility.cjs +39 -0
- package/dist/compiler/reproducibility.js +4 -0
- package/dist/compiler/sdf.cjs +24 -0
- package/dist/compiler/sdf.js +12 -0
- package/dist/compiler/semantic-scene.cjs +31 -0
- package/dist/compiler/semantic-scene.js +4 -0
- package/dist/compiler/state.cjs +21 -0
- package/dist/compiler/state.js +11 -0
- package/dist/compiler/trait-composition.cjs +30 -0
- package/dist/compiler/trait-composition.js +9 -0
- package/dist/compiler/unity.cjs +19 -0
- package/dist/compiler/unity.js +13 -0
- package/dist/compiler/unreal.cjs +23 -0
- package/dist/compiler/unreal.js +13 -0
- package/dist/compiler/urdf.cjs +52 -0
- package/dist/compiler/urdf.js +12 -0
- package/dist/compiler/usd-physics.cjs +26 -0
- package/dist/compiler/usd-physics.js +9 -0
- package/dist/compiler/visionos.cjs +19 -0
- package/dist/compiler/visionos.js +13 -0
- package/dist/compiler/vrchat.cjs +22 -0
- package/dist/compiler/vrchat.js +12 -0
- package/dist/compiler/vrr.cjs +24 -0
- package/dist/compiler/vrr.js +12 -0
- package/dist/compiler/wasm.cjs +36 -0
- package/dist/compiler/wasm.js +12 -0
- package/dist/compiler/webgpu.cjs +18 -0
- package/dist/compiler/webgpu.js +12 -0
- package/dist/coordinators/index.cjs +1266 -0
- package/dist/coordinators/index.d.ts +72 -1
- package/dist/coordinators/index.js +1259 -0
- package/dist/debugger.cjs +24 -0
- package/dist/debugger.js +11 -0
- package/dist/dist-ACXG6IH5.cjs +3113 -0
- package/dist/dist-VD4L6V7Q.js +3076 -0
- package/dist/entries/interop.cjs +64 -0
- package/dist/entries/interop.js +7 -0
- package/dist/entries/scripting.cjs +55 -0
- package/dist/entries/scripting.js +10 -0
- 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 +44660 -0
- package/dist/index.d.ts +978 -21
- package/dist/index.js +41422 -0
- package/dist/math/tropical-spmv.cjs +45 -0
- package/dist/math/tropical-spmv.js +4 -0
- package/dist/math/vec3.cjs +57 -0
- package/dist/math/vec3.js +4 -0
- 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.js +141 -0
- package/dist/parser.cjs +61 -0
- package/dist/parser.d.ts +11 -0
- package/dist/parser.js +12 -0
- package/dist/playwright-3AT3AKTV.cjs +98673 -0
- package/dist/playwright-VZPDVUEQ.js +98660 -0
- package/dist/reconstruction/index.cjs +153 -0
- package/dist/reconstruction/index.d.ts +29 -2
- package/dist/reconstruction/index.js +8 -0
- package/dist/runtime.cjs +316 -0
- package/dist/runtime.d.ts +61 -0
- package/dist/runtime.js +31 -0
- package/dist/self-improvement/index.cjs +563 -0
- package/dist/self-improvement/index.js +545 -0
- package/dist/src-4ROC227P.cjs +2094 -0
- package/dist/src-HCCCSYP7.js +2073 -0
- package/dist/storage/index.cjs +38 -0
- package/dist/storage/index.js +5 -0
- package/dist/testing.cjs +25 -0
- package/dist/testing.d.ts +70 -0
- package/dist/testing.js +4 -0
- package/dist/traitDocs/traitDocs.cjs +33 -0
- package/dist/traitDocs/traitDocs.js +7 -0
- package/dist/traits/botanical-lotus.cjs +177 -0
- package/dist/traits/botanical-lotus.d.ts +502 -0
- package/dist/traits/botanical-lotus.js +7 -0
- package/dist/traits/engines/index.cjs +520 -0
- package/dist/traits/engines/index.js +380 -0
- package/dist/traits/index.cjs +24548 -0
- package/dist/traits/index.d.ts +171 -35
- package/dist/traits/index.js +21638 -0
- 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 +19 -0
- package/dist/type-checker.js +6 -0
- 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 +29 -0
- package/dist/wot/index.js +4 -0
- package/package.json +93 -49
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// src/math/vec3.ts
|
|
2
|
+
function vec3NormalizeInPlace(v) {
|
|
3
|
+
const len = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
|
4
|
+
if (len > 1e-8) {
|
|
5
|
+
v[0] /= len;
|
|
6
|
+
v[1] /= len;
|
|
7
|
+
v[2] /= len;
|
|
8
|
+
}
|
|
9
|
+
return len;
|
|
10
|
+
}
|
|
11
|
+
function vec3Normalize(v) {
|
|
12
|
+
const len = Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
|
13
|
+
if (len === 0) return [0, 0, 0];
|
|
14
|
+
return [v[0] / len, v[1] / len, v[2] / len];
|
|
15
|
+
}
|
|
16
|
+
function vec3Length(v) {
|
|
17
|
+
return Math.sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]);
|
|
18
|
+
}
|
|
19
|
+
function vec3Cross(a, b) {
|
|
20
|
+
return [
|
|
21
|
+
a[1] * b[2] - a[2] * b[1],
|
|
22
|
+
a[2] * b[0] - a[0] * b[2],
|
|
23
|
+
a[0] * b[1] - a[1] * b[0]
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
function vec3CrossArray(a, b) {
|
|
27
|
+
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
28
|
+
}
|
|
29
|
+
function vec3Sub(a, b) {
|
|
30
|
+
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
31
|
+
}
|
|
32
|
+
function vec3SubArray(a, b) {
|
|
33
|
+
return [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
|
|
34
|
+
}
|
|
35
|
+
function vec3Add(a, b) {
|
|
36
|
+
return [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
|
|
37
|
+
}
|
|
38
|
+
function vec3Scale(v, s) {
|
|
39
|
+
return [v[0] * s, v[1] * s, v[2] * s];
|
|
40
|
+
}
|
|
41
|
+
function vec3ScaleArray(v, s) {
|
|
42
|
+
return [v[0] * s, v[1] * s, v[2] * s];
|
|
43
|
+
}
|
|
44
|
+
function vec3Distance(a, b) {
|
|
45
|
+
const dx = b[0] - a[0];
|
|
46
|
+
const dy = b[1] - a[1];
|
|
47
|
+
const dz = b[2] - a[2];
|
|
48
|
+
return Math.sqrt(dx * dx + dy * dy + dz * dz);
|
|
49
|
+
}
|
|
50
|
+
function vec3Dot(a, b) {
|
|
51
|
+
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export { vec3Add, vec3Cross, vec3CrossArray, vec3Distance, vec3Dot, vec3Length, vec3Normalize, vec3NormalizeInPlace, vec3Scale, vec3ScaleArray, vec3Sub, vec3SubArray };
|
|
55
|
+
//# sourceMappingURL=chunk-MXFUTKCO.js.map
|
|
56
|
+
//# sourceMappingURL=chunk-MXFUTKCO.js.map
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/traits/engines/motion-matching.ts
|
|
4
|
+
var TRAJECTORY_HORIZON_FRAMES = 12;
|
|
5
|
+
var TRAJECTORY_FRAME_DT = 1 / 30;
|
|
6
|
+
function magnitude(v) {
|
|
7
|
+
return Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
|
|
8
|
+
}
|
|
9
|
+
function classifyGait(speed, energyEfficiency) {
|
|
10
|
+
const efficiencyPenalty = energyEfficiency > 1 ? 0.85 : 1;
|
|
11
|
+
const adjusted = speed * efficiencyPenalty;
|
|
12
|
+
if (adjusted < 0.05) return "idle";
|
|
13
|
+
if (adjusted < 1.4) return "walk";
|
|
14
|
+
if (adjusted < 3) return "trot";
|
|
15
|
+
return "run";
|
|
16
|
+
}
|
|
17
|
+
function projectLinearTrajectory(velocity) {
|
|
18
|
+
const trajectory = [];
|
|
19
|
+
for (let i = 1; i <= TRAJECTORY_HORIZON_FRAMES; i++) {
|
|
20
|
+
const t = i * TRAJECTORY_FRAME_DT;
|
|
21
|
+
trajectory.push([velocity.x * t, velocity.y * t, velocity.z * t]);
|
|
22
|
+
}
|
|
23
|
+
return trajectory;
|
|
24
|
+
}
|
|
25
|
+
var NullMotionMatchingEngine = class {
|
|
26
|
+
constructor(modelId) {
|
|
27
|
+
this.loaded = false;
|
|
28
|
+
this.modelId = modelId;
|
|
29
|
+
}
|
|
30
|
+
async load() {
|
|
31
|
+
this.loaded = true;
|
|
32
|
+
}
|
|
33
|
+
infer(input) {
|
|
34
|
+
const speed = magnitude(input.targetVelocity);
|
|
35
|
+
const energyEfficiency = input.energyEfficiency ?? 1;
|
|
36
|
+
const phaseAdvance = (speed * 0.3 + 0.5) * input.delta;
|
|
37
|
+
const phase = (input.currentPhase + phaseAdvance) % 1;
|
|
38
|
+
const leftFootContact = phase < 0.5;
|
|
39
|
+
const rightFootContact = phase >= 0.5;
|
|
40
|
+
return {
|
|
41
|
+
pose: { joints: {}, timestamp: Date.now() },
|
|
42
|
+
phase,
|
|
43
|
+
trajectory: projectLinearTrajectory(input.targetVelocity),
|
|
44
|
+
stability: 1,
|
|
45
|
+
contactFeatures: { leftFoot: leftFootContact, rightFoot: rightFootContact },
|
|
46
|
+
gait: classifyGait(speed, energyEfficiency),
|
|
47
|
+
kineticEnergyProxy: speed * speed * energyEfficiency
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
dispose() {
|
|
51
|
+
this.loaded = false;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
function createNullMotionMatchingEngine(modelId) {
|
|
55
|
+
return new NullMotionMatchingEngine(modelId);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// src/traits/engines/synthetic-walk-cycle.ts
|
|
59
|
+
var STRIDE_AMPLITUDE_RAD = 0.6;
|
|
60
|
+
var KNEE_FLEXION_AMPLITUDE_RAD = 0.5;
|
|
61
|
+
var HIP_BOB_AMPLITUDE = 0.04;
|
|
62
|
+
var SYNTHETIC_WALK_JOINTS = [
|
|
63
|
+
"hip",
|
|
64
|
+
"left_thigh",
|
|
65
|
+
"right_thigh",
|
|
66
|
+
"left_knee",
|
|
67
|
+
"right_knee",
|
|
68
|
+
"left_foot",
|
|
69
|
+
"right_foot"
|
|
70
|
+
];
|
|
71
|
+
function buildSyntheticBipedPose(phase, speed) {
|
|
72
|
+
const leftSwing = Math.sin(phase * 2 * Math.PI);
|
|
73
|
+
const rightSwing = Math.sin((phase + 0.5) * 2 * Math.PI);
|
|
74
|
+
const speedScale = Math.min(speed, 6) / 6;
|
|
75
|
+
const hipY = 1 + Math.cos(phase * 4 * Math.PI) * HIP_BOB_AMPLITUDE * speedScale;
|
|
76
|
+
const hipYawRad = leftSwing * 0.05 * speedScale;
|
|
77
|
+
const hipQuat = [0, Math.sin(hipYawRad / 2), 0, Math.cos(hipYawRad / 2)];
|
|
78
|
+
const leftThighPitchRad = leftSwing * STRIDE_AMPLITUDE_RAD * speedScale;
|
|
79
|
+
const rightThighPitchRad = rightSwing * STRIDE_AMPLITUDE_RAD * speedScale;
|
|
80
|
+
const leftThighQuat = [Math.sin(leftThighPitchRad / 2), 0, 0, Math.cos(leftThighPitchRad / 2)];
|
|
81
|
+
const rightThighQuat = [Math.sin(rightThighPitchRad / 2), 0, 0, Math.cos(rightThighPitchRad / 2)];
|
|
82
|
+
const leftKneeRad = Math.max(0, leftSwing) * KNEE_FLEXION_AMPLITUDE_RAD * speedScale;
|
|
83
|
+
const rightKneeRad = Math.max(0, rightSwing) * KNEE_FLEXION_AMPLITUDE_RAD * speedScale;
|
|
84
|
+
const leftKneeQuat = [Math.sin(leftKneeRad / 2), 0, 0, Math.cos(leftKneeRad / 2)];
|
|
85
|
+
const rightKneeQuat = [Math.sin(rightKneeRad / 2), 0, 0, Math.cos(rightKneeRad / 2)];
|
|
86
|
+
const leftFootRad = -leftThighPitchRad * 0.5;
|
|
87
|
+
const rightFootRad = -rightThighPitchRad * 0.5;
|
|
88
|
+
const leftFootQuat = [Math.sin(leftFootRad / 2), 0, 0, Math.cos(leftFootRad / 2)];
|
|
89
|
+
const rightFootQuat = [Math.sin(rightFootRad / 2), 0, 0, Math.cos(rightFootRad / 2)];
|
|
90
|
+
return {
|
|
91
|
+
hip: { position: [0, hipY, 0], rotation: hipQuat },
|
|
92
|
+
left_thigh: { position: [0.1, hipY - 0.4, 0], rotation: leftThighQuat },
|
|
93
|
+
right_thigh: { position: [-0.1, hipY - 0.4, 0], rotation: rightThighQuat },
|
|
94
|
+
left_knee: { position: [0.1, hipY - 0.8, 0], rotation: leftKneeQuat },
|
|
95
|
+
right_knee: { position: [-0.1, hipY - 0.8, 0], rotation: rightKneeQuat },
|
|
96
|
+
left_foot: { position: [0.1, hipY - 1, 0], rotation: leftFootQuat },
|
|
97
|
+
right_foot: { position: [-0.1, hipY - 1, 0], rotation: rightFootQuat }
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
var SyntheticWalkCycleEngine = class {
|
|
101
|
+
constructor(modelId = "synthetic_biped_walk") {
|
|
102
|
+
this.loaded = false;
|
|
103
|
+
this.modelId = modelId;
|
|
104
|
+
}
|
|
105
|
+
async load() {
|
|
106
|
+
this.loaded = true;
|
|
107
|
+
}
|
|
108
|
+
infer(input) {
|
|
109
|
+
const speed = magnitude(input.targetVelocity);
|
|
110
|
+
const energyEfficiency = input.energyEfficiency ?? 1;
|
|
111
|
+
const phaseAdvance = Math.max(speed, 0.1) * 0.5 * input.delta;
|
|
112
|
+
const phase = (input.currentPhase + phaseAdvance) % 1;
|
|
113
|
+
const joints = buildSyntheticBipedPose(phase, speed);
|
|
114
|
+
const pose = { joints, timestamp: Date.now() };
|
|
115
|
+
const leftFoot = speed < 0.05 || phase < 0.5;
|
|
116
|
+
const rightFoot = speed < 0.05 || phase >= 0.5;
|
|
117
|
+
const contactFeatures = { leftFoot, rightFoot };
|
|
118
|
+
return {
|
|
119
|
+
pose,
|
|
120
|
+
phase,
|
|
121
|
+
trajectory: projectLinearTrajectory(input.targetVelocity),
|
|
122
|
+
stability: speed > 5 ? Math.max(0.1, 1 - (speed - 5) * 0.2) : 1,
|
|
123
|
+
contactFeatures,
|
|
124
|
+
gait: classifyGait(speed, energyEfficiency),
|
|
125
|
+
kineticEnergyProxy: speed * speed * energyEfficiency
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
dispose() {
|
|
129
|
+
this.loaded = false;
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
function createSyntheticWalkCycleEngine(modelId) {
|
|
133
|
+
return new SyntheticWalkCycleEngine(modelId);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// src/traits/engines/motion-data-schema.ts
|
|
137
|
+
var MOTION_DATA_SCHEMA_VERSION = 1;
|
|
138
|
+
function validateTrainingFrame(frame) {
|
|
139
|
+
if (typeof frame.frameIndex !== "number" || frame.frameIndex < 0) {
|
|
140
|
+
throw new Error(`TrainingFrame: frameIndex must be a non-negative number, got ${frame.frameIndex}`);
|
|
141
|
+
}
|
|
142
|
+
if (typeof frame.phase !== "number" || frame.phase < 0 || frame.phase >= 1) {
|
|
143
|
+
throw new Error(`TrainingFrame: phase must be in [0, 1), got ${frame.phase}`);
|
|
144
|
+
}
|
|
145
|
+
if (!frame.pose || typeof frame.pose !== "object" || !frame.pose.joints) {
|
|
146
|
+
throw new Error("TrainingFrame: pose.joints required");
|
|
147
|
+
}
|
|
148
|
+
if (!frame.contactFeatures || typeof frame.contactFeatures !== "object") {
|
|
149
|
+
throw new Error("TrainingFrame: contactFeatures required");
|
|
150
|
+
}
|
|
151
|
+
const validGaits = ["idle", "walk", "trot", "run", "crouch"];
|
|
152
|
+
if (!validGaits.includes(frame.gait)) {
|
|
153
|
+
throw new Error(`TrainingFrame: gait must be one of ${validGaits.join(", ")}, got ${frame.gait}`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function validateMotionCapture(capture) {
|
|
157
|
+
if (capture.schemaVersion !== MOTION_DATA_SCHEMA_VERSION) {
|
|
158
|
+
throw new Error(
|
|
159
|
+
`MotionCapture: schemaVersion ${capture.schemaVersion} unsupported (current=${MOTION_DATA_SCHEMA_VERSION})`
|
|
160
|
+
);
|
|
161
|
+
}
|
|
162
|
+
if (!capture.captureId || typeof capture.captureId !== "string") {
|
|
163
|
+
throw new Error("MotionCapture: captureId required");
|
|
164
|
+
}
|
|
165
|
+
if (!capture.skeletonId || typeof capture.skeletonId !== "string") {
|
|
166
|
+
throw new Error("MotionCapture: skeletonId required");
|
|
167
|
+
}
|
|
168
|
+
if (capture.fps <= 0 || capture.fps > 240) {
|
|
169
|
+
throw new Error(`MotionCapture: fps must be in (0, 240], got ${capture.fps}`);
|
|
170
|
+
}
|
|
171
|
+
if (!capture.license || !capture.license.spdx) {
|
|
172
|
+
throw new Error(
|
|
173
|
+
"MotionCapture: license.spdx required \u2014 every training capture must declare a commercial-use-compatible license (refuses CC BY-NC, GPL viral, proprietary without explicit grant)"
|
|
174
|
+
);
|
|
175
|
+
}
|
|
176
|
+
const blockedSpdx = ["CC-BY-NC-4.0", "CC-BY-NC-SA-4.0", "CC-BY-NC-ND-4.0", "GPL-3.0", "AGPL-3.0"];
|
|
177
|
+
if (blockedSpdx.includes(capture.license.spdx)) {
|
|
178
|
+
throw new Error(
|
|
179
|
+
`MotionCapture: license ${capture.license.spdx} is incompatible with @holoscript/core commercial distribution. Permitted: MIT, Apache-2.0, BSD-3-Clause, CC-BY-4.0 (with attribution), proprietary-with-grant.`
|
|
180
|
+
);
|
|
181
|
+
}
|
|
182
|
+
if (!Array.isArray(capture.frames) || capture.frames.length === 0) {
|
|
183
|
+
throw new Error("MotionCapture: frames must be a non-empty array");
|
|
184
|
+
}
|
|
185
|
+
for (const frame of capture.frames) validateTrainingFrame(frame);
|
|
186
|
+
}
|
|
187
|
+
function validateTrainingCorpus(corpus) {
|
|
188
|
+
if (corpus.schemaVersion !== MOTION_DATA_SCHEMA_VERSION) {
|
|
189
|
+
throw new Error(`TrainingCorpus: schemaVersion ${corpus.schemaVersion} unsupported`);
|
|
190
|
+
}
|
|
191
|
+
if (!corpus.corpusId) throw new Error("TrainingCorpus: corpusId required");
|
|
192
|
+
if (!corpus.skeletonId) throw new Error("TrainingCorpus: skeletonId required");
|
|
193
|
+
if (!corpus.splits) throw new Error("TrainingCorpus: splits required");
|
|
194
|
+
const captureIds = new Set(corpus.captures.map((c) => c.captureId));
|
|
195
|
+
const splitIds = [...corpus.splits.train, ...corpus.splits.val, ...corpus.splits.test];
|
|
196
|
+
for (const id of splitIds) {
|
|
197
|
+
if (!captureIds.has(id)) {
|
|
198
|
+
throw new Error(`TrainingCorpus: split references unknown captureId ${id}`);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
const seenInSplit = /* @__PURE__ */ new Set();
|
|
202
|
+
for (const id of splitIds) {
|
|
203
|
+
if (seenInSplit.has(id)) {
|
|
204
|
+
throw new Error(`TrainingCorpus: captureId ${id} appears in multiple splits \u2014 data leakage`);
|
|
205
|
+
}
|
|
206
|
+
seenInSplit.add(id);
|
|
207
|
+
}
|
|
208
|
+
for (const cap of corpus.captures) {
|
|
209
|
+
if (cap.skeletonId !== corpus.skeletonId) {
|
|
210
|
+
throw new Error(
|
|
211
|
+
`TrainingCorpus: capture ${cap.captureId} skeleton ${cap.skeletonId} differs from corpus skeleton ${corpus.skeletonId}`
|
|
212
|
+
);
|
|
213
|
+
}
|
|
214
|
+
validateMotionCapture(cap);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
function inferenceFrameToTensor(frame, sortedJointNames) {
|
|
218
|
+
const headerLen = 8;
|
|
219
|
+
const jointLen = sortedJointNames.length * 7;
|
|
220
|
+
const out = new Float32Array(headerLen + jointLen);
|
|
221
|
+
out[0] = frame.phase;
|
|
222
|
+
out[1] = frame.rootVelocity.x;
|
|
223
|
+
out[2] = frame.rootVelocity.y;
|
|
224
|
+
out[3] = frame.rootVelocity.z;
|
|
225
|
+
out[4] = frame.rootAngularVelocity;
|
|
226
|
+
const terrain = frame.terrainNormal ?? { x: 0, y: 1, z: 0 };
|
|
227
|
+
out[5] = terrain.x;
|
|
228
|
+
out[6] = terrain.y;
|
|
229
|
+
out[7] = terrain.z;
|
|
230
|
+
for (let i = 0; i < sortedJointNames.length; i++) {
|
|
231
|
+
const jointName = sortedJointNames[i];
|
|
232
|
+
const joint = frame.pose.joints[jointName];
|
|
233
|
+
const base = headerLen + i * 7;
|
|
234
|
+
if (joint) {
|
|
235
|
+
out[base + 0] = joint.position[0];
|
|
236
|
+
out[base + 1] = joint.position[1];
|
|
237
|
+
out[base + 2] = joint.position[2];
|
|
238
|
+
out[base + 3] = joint.rotation[0];
|
|
239
|
+
out[base + 4] = joint.rotation[1];
|
|
240
|
+
out[base + 5] = joint.rotation[2];
|
|
241
|
+
out[base + 6] = joint.rotation[3];
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
return out;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
exports.MOTION_DATA_SCHEMA_VERSION = MOTION_DATA_SCHEMA_VERSION;
|
|
248
|
+
exports.NullMotionMatchingEngine = NullMotionMatchingEngine;
|
|
249
|
+
exports.SYNTHETIC_WALK_JOINTS = SYNTHETIC_WALK_JOINTS;
|
|
250
|
+
exports.SyntheticWalkCycleEngine = SyntheticWalkCycleEngine;
|
|
251
|
+
exports.TRAJECTORY_FRAME_DT = TRAJECTORY_FRAME_DT;
|
|
252
|
+
exports.TRAJECTORY_HORIZON_FRAMES = TRAJECTORY_HORIZON_FRAMES;
|
|
253
|
+
exports.buildSyntheticBipedPose = buildSyntheticBipedPose;
|
|
254
|
+
exports.classifyGait = classifyGait;
|
|
255
|
+
exports.createNullMotionMatchingEngine = createNullMotionMatchingEngine;
|
|
256
|
+
exports.createSyntheticWalkCycleEngine = createSyntheticWalkCycleEngine;
|
|
257
|
+
exports.inferenceFrameToTensor = inferenceFrameToTensor;
|
|
258
|
+
exports.magnitude = magnitude;
|
|
259
|
+
exports.projectLinearTrajectory = projectLinearTrajectory;
|
|
260
|
+
exports.validateMotionCapture = validateMotionCapture;
|
|
261
|
+
exports.validateTrainingCorpus = validateTrainingCorpus;
|
|
262
|
+
exports.validateTrainingFrame = validateTrainingFrame;
|
|
263
|
+
//# sourceMappingURL=chunk-MYY4PMWX.cjs.map
|
|
264
|
+
//# sourceMappingURL=chunk-MYY4PMWX.cjs.map
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { __esm } from './chunk-OL46QLBJ.js';
|
|
2
|
+
|
|
3
|
+
// src/compiler/identity/AgentRiskRegistry.ts
|
|
4
|
+
function getAgentRiskRegistry(config) {
|
|
5
|
+
if (!globalRegistry) {
|
|
6
|
+
globalRegistry = new AgentRiskRegistry(config);
|
|
7
|
+
}
|
|
8
|
+
return globalRegistry;
|
|
9
|
+
}
|
|
10
|
+
function isDangerousOperation(operation) {
|
|
11
|
+
return DANGEROUS_OPERATIONS.includes(operation);
|
|
12
|
+
}
|
|
13
|
+
var DEFAULT_THRESHOLDS, AgentRiskRegistry, globalRegistry, DANGEROUS_OPERATIONS, TIER_COMPOSITION_RISK_CAP;
|
|
14
|
+
var init_AgentRiskRegistry = __esm({
|
|
15
|
+
"src/compiler/identity/AgentRiskRegistry.ts"() {
|
|
16
|
+
DEFAULT_THRESHOLDS = {
|
|
17
|
+
medium: 15,
|
|
18
|
+
high: 40,
|
|
19
|
+
quarantined: 75
|
|
20
|
+
};
|
|
21
|
+
AgentRiskRegistry = class {
|
|
22
|
+
constructor(config = {}) {
|
|
23
|
+
/** agentId -> ring of recent events (oldest first). */
|
|
24
|
+
this.events = /* @__PURE__ */ new Map();
|
|
25
|
+
/** Lifetime counters (not decayed). */
|
|
26
|
+
this.lifetimeEvents = /* @__PURE__ */ new Map();
|
|
27
|
+
this.lifetimeSuccesses = /* @__PURE__ */ new Map();
|
|
28
|
+
this.halfLifeMs = config.halfLifeMs ?? 60 * 60 * 1e3;
|
|
29
|
+
this.tierThresholds = {
|
|
30
|
+
medium: config.tierThresholds?.medium ?? DEFAULT_THRESHOLDS.medium,
|
|
31
|
+
high: config.tierThresholds?.high ?? DEFAULT_THRESHOLDS.high,
|
|
32
|
+
quarantined: config.tierThresholds?.quarantined ?? DEFAULT_THRESHOLDS.quarantined
|
|
33
|
+
};
|
|
34
|
+
this.successCreditPerOp = config.successCreditPerOp ?? 5;
|
|
35
|
+
this.maxEventsPerAgent = config.maxEventsPerAgent ?? 256;
|
|
36
|
+
this.now = config.now ?? (() => Date.now());
|
|
37
|
+
if (this.tierThresholds.medium >= this.tierThresholds.high) {
|
|
38
|
+
throw new Error("AgentRiskRegistry: tierThresholds.medium must be < high");
|
|
39
|
+
}
|
|
40
|
+
if (this.tierThresholds.high >= this.tierThresholds.quarantined) {
|
|
41
|
+
throw new Error("AgentRiskRegistry: tierThresholds.high must be < quarantined");
|
|
42
|
+
}
|
|
43
|
+
if (this.halfLifeMs <= 0) {
|
|
44
|
+
throw new Error("AgentRiskRegistry: halfLifeMs must be > 0");
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Record a confabulation event from a `ConfabulationValidationResult`.
|
|
49
|
+
*
|
|
50
|
+
* Severity is taken from the result's `riskScore`. If the result is `valid`
|
|
51
|
+
* (no errors) this records a *success*, not a confabulation event — clean
|
|
52
|
+
* passes lower the agent's running score.
|
|
53
|
+
*/
|
|
54
|
+
recordValidation(agentId, result) {
|
|
55
|
+
if (result.valid && result.errors.length === 0) {
|
|
56
|
+
this.recordSuccess(agentId);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const severity = Math.max(1, Math.min(100, Math.round(result.riskScore)));
|
|
60
|
+
const reason = this.summarizeErrors(result.errors);
|
|
61
|
+
this.recordEvent({
|
|
62
|
+
agentId,
|
|
63
|
+
severity,
|
|
64
|
+
reason,
|
|
65
|
+
timestamp: this.now()
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Record a custom risk event (e.g. from a downstream consumer that detected
|
|
70
|
+
* confabulation outside the standard validator path).
|
|
71
|
+
*/
|
|
72
|
+
recordEvent(event) {
|
|
73
|
+
const ring = this.events.get(event.agentId) ?? [];
|
|
74
|
+
ring.push(event);
|
|
75
|
+
if (ring.length > this.maxEventsPerAgent) {
|
|
76
|
+
ring.shift();
|
|
77
|
+
}
|
|
78
|
+
this.events.set(event.agentId, ring);
|
|
79
|
+
this.lifetimeEvents.set(
|
|
80
|
+
event.agentId,
|
|
81
|
+
(this.lifetimeEvents.get(event.agentId) ?? 0) + 1
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Record a successful (clean) operation. Reduces the agent's accrued score
|
|
86
|
+
* by `successCreditPerOp` (post-decay, floored at 0).
|
|
87
|
+
*
|
|
88
|
+
* Implemented as a synthetic *negative* event so that decay still applies:
|
|
89
|
+
* we push a sentinel with negative severity. `getScore` clamps to >=0.
|
|
90
|
+
*/
|
|
91
|
+
recordSuccess(agentId) {
|
|
92
|
+
if (this.successCreditPerOp <= 0) {
|
|
93
|
+
this.lifetimeSuccesses.set(
|
|
94
|
+
agentId,
|
|
95
|
+
(this.lifetimeSuccesses.get(agentId) ?? 0) + 1
|
|
96
|
+
);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const ring = this.events.get(agentId) ?? [];
|
|
100
|
+
ring.push({
|
|
101
|
+
agentId,
|
|
102
|
+
severity: -this.successCreditPerOp,
|
|
103
|
+
reason: "clean-validation",
|
|
104
|
+
timestamp: this.now()
|
|
105
|
+
});
|
|
106
|
+
if (ring.length > this.maxEventsPerAgent) {
|
|
107
|
+
ring.shift();
|
|
108
|
+
}
|
|
109
|
+
this.events.set(agentId, ring);
|
|
110
|
+
this.lifetimeSuccesses.set(
|
|
111
|
+
agentId,
|
|
112
|
+
(this.lifetimeSuccesses.get(agentId) ?? 0) + 1
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Compute the current decayed risk score for an agent (0-100).
|
|
117
|
+
*
|
|
118
|
+
* Each event contributes `severity * 0.5 ^ (age / halfLifeMs)`. Negative
|
|
119
|
+
* (success) events reduce the running total. Final score is clamped to
|
|
120
|
+
* [0, 100].
|
|
121
|
+
*/
|
|
122
|
+
getScore(agentId) {
|
|
123
|
+
const ring = this.events.get(agentId);
|
|
124
|
+
if (!ring || ring.length === 0) return 0;
|
|
125
|
+
const now = this.now();
|
|
126
|
+
let score = 0;
|
|
127
|
+
for (const ev of ring) {
|
|
128
|
+
const ageMs = Math.max(0, now - ev.timestamp);
|
|
129
|
+
const decay = Math.pow(0.5, ageMs / this.halfLifeMs);
|
|
130
|
+
score += ev.severity * decay;
|
|
131
|
+
}
|
|
132
|
+
return Math.max(0, Math.min(100, score));
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Classify an agent into a `RiskTier`. Pure function of `getScore`.
|
|
136
|
+
*/
|
|
137
|
+
getTier(agentId) {
|
|
138
|
+
const score = this.getScore(agentId);
|
|
139
|
+
if (score >= this.tierThresholds.quarantined) return "quarantined" /* QUARANTINED */;
|
|
140
|
+
if (score >= this.tierThresholds.high) return "high" /* HIGH */;
|
|
141
|
+
if (score >= this.tierThresholds.medium) return "medium" /* MEDIUM */;
|
|
142
|
+
return "low" /* LOW */;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Snapshot of an agent's current state (for diagnostics / dashboards).
|
|
146
|
+
*/
|
|
147
|
+
getSnapshot(agentId) {
|
|
148
|
+
const ring = this.events.get(agentId) ?? [];
|
|
149
|
+
const positiveEvents = ring.filter((e) => e.severity > 0);
|
|
150
|
+
const lastPositive = positiveEvents[positiveEvents.length - 1];
|
|
151
|
+
return {
|
|
152
|
+
agentId,
|
|
153
|
+
score: this.getScore(agentId),
|
|
154
|
+
tier: this.getTier(agentId),
|
|
155
|
+
recentEventCount: positiveEvents.length,
|
|
156
|
+
lifetimeEventCount: this.lifetimeEvents.get(agentId) ?? 0,
|
|
157
|
+
lifetimeSuccessCount: this.lifetimeSuccesses.get(agentId) ?? 0,
|
|
158
|
+
lastEventAt: lastPositive ? lastPositive.timestamp : null
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Force-set an agent's tier by clearing history and inserting a calibration
|
|
163
|
+
* event. Used by orchestrators to quarantine a known-bad agent or to
|
|
164
|
+
* reinstate a rehabilitated one.
|
|
165
|
+
*
|
|
166
|
+
* Note: this is an *administrative* operation, not a normal flow. The
|
|
167
|
+
* caller is responsible for authorization.
|
|
168
|
+
*
|
|
169
|
+
* The inserted event is severity = midpoint of the requested tier band
|
|
170
|
+
* so that small amounts of decay between `setTier` and the next read
|
|
171
|
+
* don't bump the agent into a lower tier.
|
|
172
|
+
*/
|
|
173
|
+
setTier(agentId, tier) {
|
|
174
|
+
this.events.delete(agentId);
|
|
175
|
+
if (tier === "low" /* LOW */) {
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
let severity;
|
|
179
|
+
switch (tier) {
|
|
180
|
+
case "medium" /* MEDIUM */:
|
|
181
|
+
severity = (this.tierThresholds.medium + this.tierThresholds.high) / 2;
|
|
182
|
+
break;
|
|
183
|
+
case "high" /* HIGH */:
|
|
184
|
+
severity = (this.tierThresholds.high + this.tierThresholds.quarantined) / 2;
|
|
185
|
+
break;
|
|
186
|
+
case "quarantined" /* QUARANTINED */:
|
|
187
|
+
severity = Math.min(100, this.tierThresholds.quarantined + 10);
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
this.recordEvent({
|
|
191
|
+
agentId,
|
|
192
|
+
severity,
|
|
193
|
+
reason: `administrative:set-tier:${tier}`,
|
|
194
|
+
timestamp: this.now()
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Clear all history for an agent. Resets to LOW tier.
|
|
199
|
+
*/
|
|
200
|
+
clear(agentId) {
|
|
201
|
+
this.events.delete(agentId);
|
|
202
|
+
this.lifetimeEvents.delete(agentId);
|
|
203
|
+
this.lifetimeSuccesses.delete(agentId);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Clear all state in the registry. Useful for tests.
|
|
207
|
+
*/
|
|
208
|
+
clearAll() {
|
|
209
|
+
this.events.clear();
|
|
210
|
+
this.lifetimeEvents.clear();
|
|
211
|
+
this.lifetimeSuccesses.clear();
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* List all agents currently tracked (have at least one event).
|
|
215
|
+
*/
|
|
216
|
+
listAgents() {
|
|
217
|
+
return Array.from(this.events.keys());
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Configured tier thresholds (read-only view).
|
|
221
|
+
*/
|
|
222
|
+
getThresholds() {
|
|
223
|
+
return { ...this.tierThresholds };
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Configured half-life in ms (read-only).
|
|
227
|
+
*/
|
|
228
|
+
getHalfLifeMs() {
|
|
229
|
+
return this.halfLifeMs;
|
|
230
|
+
}
|
|
231
|
+
// ---------------------------------------------------------------------------
|
|
232
|
+
// PRIVATE HELPERS
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
summarizeErrors(errors) {
|
|
235
|
+
if (errors.length === 0) return "no-errors";
|
|
236
|
+
if (errors.length === 1) return errors[0].code;
|
|
237
|
+
return `${errors[0].code}+${errors.length - 1}-more`;
|
|
238
|
+
}
|
|
239
|
+
};
|
|
240
|
+
globalRegistry = null;
|
|
241
|
+
DANGEROUS_OPERATIONS = [
|
|
242
|
+
"write",
|
|
243
|
+
"transform",
|
|
244
|
+
"execute"
|
|
245
|
+
];
|
|
246
|
+
TIER_COMPOSITION_RISK_CAP = {
|
|
247
|
+
["low" /* LOW */]: 50,
|
|
248
|
+
["medium" /* MEDIUM */]: 25,
|
|
249
|
+
["high" /* HIGH */]: 10,
|
|
250
|
+
["quarantined" /* QUARANTINED */]: -1
|
|
251
|
+
// sentinel: any composition denied
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
export { TIER_COMPOSITION_RISK_CAP, getAgentRiskRegistry, init_AgentRiskRegistry, isDangerousOperation };
|
|
257
|
+
//# sourceMappingURL=chunk-N75IH2HY.js.map
|
|
258
|
+
//# sourceMappingURL=chunk-N75IH2HY.js.map
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var chunkXB274MW5_cjs = require('./chunk-XB274MW5.cjs');
|
|
4
|
+
var chunkS3MDHNKB_cjs = require('./chunk-S3MDHNKB.cjs');
|
|
5
|
+
var chunkROHLEP2W_cjs = require('./chunk-ROHLEP2W.cjs');
|
|
6
|
+
var chunkKKP7JKN4_cjs = require('./chunk-KKP7JKN4.cjs');
|
|
7
|
+
var ans = require('@holoscript/core-types/ans');
|
|
8
|
+
|
|
9
|
+
// src/compiler/MultiLayerCompiler.ts
|
|
10
|
+
chunkXB274MW5_cjs.init_VRRCompiler();
|
|
11
|
+
chunkS3MDHNKB_cjs.init_ARCompiler();
|
|
12
|
+
chunkROHLEP2W_cjs.init_BabylonCompiler();
|
|
13
|
+
chunkKKP7JKN4_cjs.init_CompilerBase();
|
|
14
|
+
var MultiLayerCompiler = class extends chunkKKP7JKN4_cjs.CompilerBase {
|
|
15
|
+
constructor(options) {
|
|
16
|
+
super();
|
|
17
|
+
this.compilerName = "MultiLayerCompiler";
|
|
18
|
+
this.options = options;
|
|
19
|
+
}
|
|
20
|
+
getRequiredCapability() {
|
|
21
|
+
return ans.ANSCapabilityPath.MULTI_LAYER;
|
|
22
|
+
}
|
|
23
|
+
compile(composition, agentToken, outputPath) {
|
|
24
|
+
this.validateCompilerAccess(agentToken, outputPath);
|
|
25
|
+
const result = {
|
|
26
|
+
success: true,
|
|
27
|
+
warnings: [],
|
|
28
|
+
errors: []
|
|
29
|
+
};
|
|
30
|
+
if (this.options.targets.includes("ar")) {
|
|
31
|
+
const arCompiler = new chunkS3MDHNKB_cjs.ARCompiler({
|
|
32
|
+
target: "webxr",
|
|
33
|
+
minify: this.options.minify,
|
|
34
|
+
source_maps: this.options.source_maps,
|
|
35
|
+
features: { hit_test: true, image_tracking: true }
|
|
36
|
+
});
|
|
37
|
+
const arResult = arCompiler.compile(composition, agentToken);
|
|
38
|
+
result.ar = arResult;
|
|
39
|
+
if (!arResult.success) result.success = false;
|
|
40
|
+
}
|
|
41
|
+
if (this.options.targets.includes("vrr")) {
|
|
42
|
+
const vrrCompiler = new chunkXB274MW5_cjs.VRRCompiler({
|
|
43
|
+
target: "threejs",
|
|
44
|
+
minify: this.options.minify,
|
|
45
|
+
source_maps: this.options.source_maps,
|
|
46
|
+
performance: { target_fps: 60, max_players: 1e3, lazy_loading: true },
|
|
47
|
+
api_integrations: {}
|
|
48
|
+
// Configured upstream based on @reality_mirror traits
|
|
49
|
+
});
|
|
50
|
+
const vrrResult = vrrCompiler.compile(composition, agentToken);
|
|
51
|
+
result.vrr = vrrResult;
|
|
52
|
+
if (!vrrResult.success) result.success = false;
|
|
53
|
+
}
|
|
54
|
+
if (this.options.targets.includes("vr")) {
|
|
55
|
+
const vrCompiler = new chunkROHLEP2W_cjs.BabylonCompiler({});
|
|
56
|
+
try {
|
|
57
|
+
const vrResult = vrCompiler.compile(composition, agentToken);
|
|
58
|
+
result.vr = vrResult;
|
|
59
|
+
} catch (err) {
|
|
60
|
+
result.success = false;
|
|
61
|
+
result.errors.push(
|
|
62
|
+
`VR Compilation Error: ${err instanceof Error ? err.message : String(err)}`
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
exports.MultiLayerCompiler = MultiLayerCompiler;
|
|
71
|
+
//# sourceMappingURL=chunk-NCWCUZNS.cjs.map
|
|
72
|
+
//# sourceMappingURL=chunk-NCWCUZNS.cjs.map
|