@forgeax/engine-preview 0.1.34 → 0.1.36
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/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/vfx.mjs +2 -2
- package/dist/vfx.mjs.map +1 -1
- package/package.json +4 -4
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/host/preview-host.ts","../src/domains/subject.ts","../src/evidence/errors.ts","../src/evidence/manifest.ts","../src/evidence/oracle.ts","../src/evidence/report.ts","../src/host.ts","../src/kit/canonical.ts","../src/kit/presentation.ts","../src/kit/receipt.ts","../src/domains/material.ts","../src/material.ts","../src/domains/mesh.ts","../src/mesh.ts","../src/domains/texture.ts","../src/texture.ts","../src/domains/vfx.ts","../src/vfx.ts","../src/primitive.ts"],"names":["defineToolPlugin","isRecord","base","invalid","createPreviewHost","digest","value","defineTool","levels","requiredString","authoredBounds"],"mappings":";;;;;AA8DO,IAAM,qBAAA,GAAwB,qBAAkC,cAAc;AAE9E,SAAS,kBAAkB,IAAA,EAA2B;AAC3D,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,sBAAA;AAAA,IACN,SAAS,qBAAA,CAAsB,EAAA;AAAA,IAC/B,MAAM,GAAA,EAAK;AACT,MAAA,GAAA,CAAI,OAAA,CAAQ,qBAAA,CAAsB,EAAA,EAAI,IAAI,CAAA;AAAA,IAC5C;AAAA,GACF;AACF;AAEO,SAAS,eAAA,CAAgB,QAAoB,IAAA,EAA+B;AACjF,EAAA,OAAO,gBAAA,CAAiB,iBAAA,CAAkB,IAAI,CAAA,EAAG,OAAO,KAAK,CAAA;AAC/D;AAEO,SAAS,kBAAkB,KAAA,EAA2C;AAC3E,EAAA,IAAI,MAAA,GAAS,IAAA;AACb,EAAA,OAAO;AAAA,IACL,MAAM,YAAY,OAAA,EAAS;AACzB,MAAA,IAAI,CAAC,UAAU,KAAA,CAAM,MAAA,CAAO,SAAS,MAAM,IAAI,MAAM,+BAA+B,CAAA;AACpF,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,QAAQ,KAAK,CAAA;AAAA,MAC5B,CAAA,SAAE;AACA,QAAA,MAAA,GAAS,KAAA;AAAA,MACX;AAAA,IACF;AAAA,GACF;AACF;;;ACzEO,IAAM,6BAAA,GAAgC;AACtC,IAAM,yBAAA,GAA4B;AAClC,IAAM,yBAAA,GAA4B;AAElC,SAAS,sBAAsB,KAAA,EAAiC;AACrE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,MAAA,CAAO,aAAA,CAAc,KAAK,CAAA,IAC1B,KAAA,IAAS,yBAAA,IACT,KAAA,IAAS,yBAAA,IAAA,CACR,KAAA,GAAS,QAAQ,CAAA,MAAQ,CAAA;AAE9B;AAEA,SAAS,SAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,SAAS,KAAA,EAAiC;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,CAAA;AACrD;AAGA,SAAS,wBAAwB,KAAA,EAAyB;AACxD,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,KAAA;AAC7B,EAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AACtB,EAAA,IACE,CAAC,QAAA,CAAS,OAAO,CAAA,IACjB,CAAC,SAAS,OAAA,CAAQ,IAAI,CAAA,IACtB,CAAC,SAAS,OAAA,CAAQ,IAAI,KACtB,CAAC,QAAA,CAAS,QAAQ,MAAM,CAAA;AAExB,IAAA,OAAO,KAAA;AACT,EAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,YAAY,CAAA,IAAK,CAAC,QAAA,CAAS,KAAA,CAAM,YAAA,CAAa,IAAI,CAAA,EAAG,OAAO,KAAA;AAChF,EAAA,IACE,CAAC,QAAA,CAAS,KAAA,CAAM,MAAM,KACtB,CAAC,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA,IACpC,CAAC,QAAA,CAAS,KAAA,CAAM,OAAO,YAAY,CAAA;AAEnC,IAAA,OAAO,KAAA;AACT,EAAA,IAAI,CAAC,QAAA,CAAS,KAAA,CAAM,MAAM,CAAA,IAAK,CAAC,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,EAAG,OAAO,KAAA;AACtE,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA;AACtC;AAEO,IAAM,2BAAA,GAAmD;AAAA,EAC9D,MAAM,KAAA,EAAO;AACX,IAAA,OAAO,wBAAwB,KAAK,CAAA,GAChC,EAAE,EAAA,EAAI,IAAA,EAAM,OAAM,GAClB;AAAA,MACE,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EACE;AAAA,KACJ;AAAA,EACN,CAAA;AAAA,EACA,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,yBAAA,GAA6D;AAAA,EACxE,MAAM,KAAA,EAAO;AACX,IAAA,IACE,KAAA,KAAU,IAAA,IACV,OAAO,KAAA,KAAU,QAAA,IACjB,OAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA,KAAM,QAAA,EACtC;AACA,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,2BAAA,EAA4B;AAAA,IACzD;AACA,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AACtC,IAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,OAAO,wBAAA,EAAyB;AAC3E,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,KAAA,EAAO,MAAM,CAAA;AACtC,IAAA,IAAI,IAAA,KAAS,QAAW,OAAO,EAAE,IAAI,IAAA,EAAM,KAAA,EAAO,EAAE,IAAA,EAAK,EAAE;AAC3D,IAAA,OAAO,qBAAA,CAAsB,IAAI,CAAA,GAC7B,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,EAAK,EAAE,GAClC;AAAA,MACE,EAAA,EAAI,KAAA;AAAA,MACJ,KAAA,EAAO,CAAA,oCAAA,EAAuC,yBAAyB,CAAA,KAAA,EAAQ,yBAAyB,CAAA;AAAA,KAC1G;AAAA,EACN,CAAA;AAAA,EACA,UAAU,CAAA,+GAAA,EAAkH,yBAAyB,CAAA,WAAA,EAAc,yBAAyB,oEAAoE,6BAA6B,CAAA,IAAA;AAC/R,CAAA;AAEO,SAAS,kBACd,IAAA,EAC8C;AAC9C,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,GAAG,IAAI,CAAA,QAAA,CAAA;AAAA,IACX,KAAA,EAAO,WAAW,IAAI,CAAA,CAAA;AAAA,IACtB,OAAA,EAAS,eAAe,IAAI,CAAA,yCAAA,CAAA;AAAA,IAC5B,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,yBAAA;AAAA,IACZ,YAAA,EAAc,2BAAA;AAAA,IACd,QAAA,EAAU,CAAC,UAAA,EAAY,iBAAA,EAAmB,KAAK;AAAA,GACjD;AACF;AAiBO,SAAS,cAAA,CACd,IAAA,EACA,QAAA,EACA,MAAA,EACwB;AACxB,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,IAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA,EAAM,sGAAA;AAAA,MACN;AAAA;AACF,GACF;AACF;AAEO,SAAS,gBAAA,CACd,QAAA,EACA,KAAA,EACA,KAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAK,CAAA,GAAI,KAAA,GAAQ,MAAA;AACxC,EAAA,MAAM,YAAY,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,GAAW,MAAM,IAAA,GAAO,MAAA;AACjE,EAAA,MAAM,gBAAgB,OAAO,KAAA,EAAO,QAAA,KAAa,QAAA,GAAW,MAAM,QAAA,GAAW,MAAA;AAC7E,EAAA,MAAM,YAAY,OAAO,KAAA,EAAO,IAAA,KAAS,QAAA,GAAW,MAAM,IAAA,GAAO,MAAA;AACjE,EAAA,MAAM,cAAc,KAAA,EAAO,MAAA;AAC3B,EAAA,OAAO,cAAA,CAAe,oCAAoC,QAAA,EAAU;AAAA,IAClE,KAAA,EAAO,YAAA;AAAA,IACP,KAAA;AAAA,IACA,GAAI,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAU;AAAA,IAC/C,GAAI,aAAA,KAAkB,MAAA,GAAY,EAAC,GAAI,EAAE,aAAA,EAAc;AAAA,IACvD,GAAI,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAU;AAAA,IAC/C,GAAI,gBAAgB,MAAA,GAAY,KAAK,EAAE,WAAA,EAAa,WAAA,CAAY,WAAW,CAAA;AAAE,GAC9E,CAAA;AACH;AAEA,SAAS,YAAY,KAAA,EAA2B;AAC9C,EAAA,IAAI,KAAA,KAAU,QAAQ,OAAO,KAAA,KAAU,YAAY,OAAO,KAAA,KAAU,WAAW,OAAO,KAAA;AACtF,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,GAAG,OAAO,KAAA;AAChE,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,KAAA,KAAU,WAAA,CAAY,KAAK,CAAC,CAAA;AACxE,EAAA,IAAI,QAAA,CAAS,KAAK,CAAA,EAAG;AACnB,IAAA,OAAO,MAAA,CAAO,WAAA;AAAA,MACZ,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,CAAC,GAAA,EAAK,WAAA,CAAY,KAAK,CAAC,CAAC;AAAA,KACvE;AAAA,EACF;AACA,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;AAEO,SAAS,mBAAA,CACd,MACA,YAAA,EACA;AACA,EAAA,OAAOA,iBAAiB,EAAE,IAAA,EAAM,CAAA,gBAAA,EAAmB,IAAI,IAAI,KAAA,GAAQ;AAAA,EAAC,GAAE,EAAG;AAAA,IACvE;AAAA,GACD,CAAA;AACH;;;ACjKA,SAAS,6BAA6B,KAAA,EAAoD;AACxF,EAAA,OACE,KAAA,KAAU,gCAAA,IACV,KAAA,KAAU,kCAAA,IACV,KAAA,KAAU,gCAAA;AAEd;AAEA,SAASC,UAAS,KAAA,EAA8E;AAC9F,EAAA,OAAO,OAAO,UAAU,QAAA,IAAY,KAAA,KAAU,QAAQ,CAAC,KAAA,CAAM,QAAQ,KAAK,CAAA;AAC5E;AAEA,SAAS,mBAAmB,OAAA,EAAkE;AAC5F,EAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAC3B,EAAA,IACE,eAAe,UAAA,IACf,UAAA,KAAe,MAAA,IACf,UAAA,KAAe,SACf,UAAA,KAAe,SAAA;AAEf,IAAA,OAAO,MAAA;AACT,EAAA,OAAO,GAAG,UAAU,CAAA,QAAA,CAAA;AACtB;AAEA,SAAS,WAAW,KAAA,EAAqB;AACvC,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,MAAA,CAAO,KAAK,CAAC,CAAA,CAAE,CAAA;AACxE;AAEO,SAAS,+BACd,OAAA,EACqC;AACrC,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,oBAAA,EAAsB,OAAO,MAAA;AAClD,EAAA,MAAM,IAAA,GAAO,QAAQ,MAAA,CAAO,IAAA;AAC5B,EAAA,IAAI,CAAC,4BAAA,CAA6B,IAAI,CAAA,EAAG,OAAO,MAAA;AAChD,EAAA,MAAM,MAAA,GAASA,UAAS,OAAA,CAAQ,MAAA,CAAO,OAAO,CAAA,GAAI,OAAA,CAAQ,MAAA,CAAO,OAAA,GAAU,EAAC;AAC5E,EAAA,MAAMC,KAAAA,GAA+B;AAAA,IACnC,IAAA;AAAA,IACA,UAAU,OAAA,CAAQ,QAAA;AAAA,IAClB,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd;AAAA,GACF;AACA,EAAA,QAAQ,IAAA;AAAM,IACZ,KAAK,gCAAA,EAAkC;AACrC,MAAA,MAAM,SAAA,GAAY,mBAAmB,MAAM,CAAA;AAC3C,MAAA,OAAO;AAAA,QACL,OAAA,EAASA,KAAAA;AAAA,QACT,GAAI,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,oBAAoB,SAAA,EAAU;AAAA,QACnE,OAAA,EAAS;AAAA,UACP,GAAI,SAAA,KAAc,MAAA,GACd,EAAC,GACD;AAAA,YACE;AAAA,cACE,MAAA,EAAQ,kBAAA;AAAA,cACR,SAAA;AAAA,cACA,IAAA,EAAM;AAAA;AACR,WACF;AAAA,UACJ;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAM;AAAA,WACR;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAM;AAAA;AACR;AACF,OACF;AAAA,IACF;AAAA,IACA,KAAK,kCAAA;AACH,MAAA,OAAO;AAAA,QACL,OAAA,EAASA,KAAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP;AAAA,YACE,MAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAM;AAAA,WACR;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAM;AAAA,WACR;AAAA,UACA,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,qDAAA;AAAsD;AAChF,OACF;AAAA,IACF,KAAK,gCAAA;AACH,MAAA,OAAO;AAAA,QACL,OAAA,EAASA,KAAAA;AAAA,QACT,OAAA,EAAS;AAAA,UACP;AAAA,YACE,MAAA,EAAQ,kBAAA;AAAA,YACR,IAAA,EAAM;AAAA,WACR;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAM;AAAA,WACR;AAAA,UACA;AAAA,YACE,MAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAM;AAAA;AACR;AACF,OACF;AAAA;AAEJ,EAAA,OAAO,WAAW,IAAI,CAAA;AACxB;AC9FO,SAAS,4BAAA,GAAuD;AACrE,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,SAAA;AACJ,EAAA,OAAO;AAAA,IACL,MAAM,QAAA,EAAU;AACd,MAAA,MAAA,GAAS,8BAA8B,QAAQ,CAAA;AAAA,IACjD,CAAA;AAAA,IACA,QAAQ,aAAA,EAAe;AACrB,MAAA,IAAI,WAAW,MAAA,EAAW;AACxB,QAAA,MAAMC,QAAAA,GAAU,+BAAA;AAAA,UACd,EAAE,aAAA,EAAe,OAAA,EAAS,UAAU,MAAA,EAAoB,SAAA,EAAW,EAAC,EAAE;AAAA,UACtE;AAAA,SACF;AACA,QAAA,IAAIA,QAAAA,CAAQ,EAAA,EAAI,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAC3E,QAAA,OAAOA,QAAAA;AAAA,MACT;AACA,MAAA,MAAM,SAAA,GAAY,+BAAA,CAAgC,MAAA,EAAQ,aAAa,CAAA;AACvE,MAAA,IAAI,CAAC,UAAU,EAAA,EAAI;AACjB,QAAA,MAAA,GAAS,MAAA;AACT,QAAA,OAAO,SAAA;AAAA,MACT;AACA,MAAA,SAAA,GAAY,SAAA,CAAU,KAAA;AACtB,MAAA,MAAA,GAAS,MAAA;AACT,MAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU;AAAA,IACtC,CAAA;AAAA,IACA,OAAA,GAAU;AACR,MAAA,MAAA,GAAS,MAAA;AAAA,IACX,CAAA;AAAA,IACA,WAAW,MAAM;AAAA,GACnB;AACF;;;ACvCO,SAAS,oBAAoB,KAAA,EAIlB;AAChB,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,YAAA,EAAc,IAAA;AAAA,IACd,WAAW,KAAA,CAAM,SAAA;AAAA,IACjB,UAAA,EAAY,MAAM,UAAA,IAAc,CAAA;AAAA,IAChC,eAAA,EAAiB,IAAA;AAAA,IACjB,MAAA,EAAQ,EAAE,GAAG,KAAA,CAAM,MAAA;AAAO,GAC5B;AACF;AAEO,SAAS,oBAAoB,KAAA,EAKlB;AAChB,EAAA,OAAO;AAAA,IACL,MAAA,EAAQ,QAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,SAAA,EAAW,MAAM,SAAA,IAAa,CAAA;AAAA,IAC9B,UAAA,EAAY,MAAM,UAAA,IAAc,CAAA;AAAA,IAChC,eAAA,EAAiB,MAAM,eAAA,IAAmB,KAAA;AAAA,IAC1C,MAAA,EAAQ,EAAE,GAAG,KAAA,CAAM,MAAA;AAAO,GAC5B;AACF;AAmCA,SAAS,YAAA,CACP,IAAA,EACA,SAAA,EACA,QAAA,EACA,QAAA,EAC2C;AAC3C,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,wBACE,OAAO,SAAA,CAAU,aAAA,KAAkB,QAAA,GAAW,UAAU,aAAA,GAAgB,SAAA;AAAA,IAC1E,uBACE,OAAO,QAAA,CAAS,aAAA,KAAkB,QAAA,GAAW,SAAS,aAAA,GAAgB,SAAA;AAAA,IACxE,oBAAA,EAAsB,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,IAC9C,mBAAA,EAAqB,IAAA,CAAK,SAAA,CAAU,QAAQ;AAAA,GAC9C;AACF;AAEA,SAAS,aAAA,CACP,WACA,QAAA,EACoB;AACpB,EAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AACxC,IAAA,MAAM,cAAA,GAAiB,UAAU,GAAG,CAAA;AACpC,IAAA,MAAM,aAAA,GAAgB,SAAS,GAAG,CAAA;AAClC,IAAA,IACE,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,IAC5B,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,IAC3B,OAAO,cAAA,KAAmB,QAAA,IAC1B,OAAO,kBAAkB,QAAA,EACzB;AACA,MAAA,IAAI,IAAA,CAAK,UAAU,cAAc,CAAA,KAAM,KAAK,SAAA,CAAU,aAAa,GAAG,OAAO,GAAA;AAAA,IAC/E,CAAA,MAAA,IAAW,mBAAmB,aAAA,EAAe;AAC3C,MAAA,OAAO,GAAA;AAAA,IACT;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,uBAAuB,KAAA,EAA2C;AAChF,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AACxB,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA;AAClD,EAAA,MAAM,UAAU,KAAA,CAAM,QAAA,CAAS,eAAA,IAAmB,KAAA,CAAM,SAAS,SAAA,GAAY,CAAA;AAC7E,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,UAAA,EAAY,SAAA,EAAW,UAAU,QAAQ,CAAA;AACrE,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,CAAC,OAAA,EAAS;AACtC,IAAA,OAAO,mBAAA,CAAoB;AAAA,MACzB,SAAA,EAAW,MAAM,QAAA,CAAS,SAAA;AAAA,MAC1B,eAAA,EAAiB,MAAM,QAAA,CAAS,eAAA;AAAA,MAChC,QAAQ,EAAE,GAAG,QAAQ,eAAA,EAAiB,KAAA,CAAM,SAAS,eAAA;AAAgB,KACtE,CAAA;AAAA,EACH;AACA,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,SAAA,EAAW,MAAM,QAAA,CAAS,SAAA;AAAA,IAC1B,MAAA,EAAQ,EAAE,GAAG,MAAA,EAAQ,iBAAiB,IAAA;AAAK,GAC5C,CAAA;AACH;AAEO,SAAS,mBAAmB,KAAA,EAAuC;AACxE,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AACxB,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA;AAClD,EAAA,MAAM,UAAU,KAAA,CAAM,QAAA,CAAS,eAAA,IAAmB,KAAA,CAAM,SAAS,SAAA,GAAY,CAAA;AAC7E,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,EAAQ,SAAA,EAAW,UAAU,QAAQ,CAAA;AACjE,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,CAAC,OAAA,EAAS;AACtC,IAAA,OAAO,mBAAA,CAAoB;AAAA,MACzB,SAAA,EAAW,MAAM,QAAA,CAAS,SAAA;AAAA,MAC1B,eAAA,EAAiB,MAAM,QAAA,CAAS,eAAA;AAAA,MAChC,QAAQ,EAAE,GAAG,QAAQ,eAAA,EAAiB,KAAA,CAAM,SAAS,eAAA;AAAgB,KACtE,CAAA;AAAA,EACH;AACA,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,SAAA,EAAW,MAAM,QAAA,CAAS,SAAA;AAAA,IAC1B,MAAA,EAAQ,EAAE,GAAG,MAAA,EAAQ,iBAAiB,IAAA;AAAK,GAC5C,CAAA;AACH;AA8CA,SAAS,eAAe,KAAA,EAAwD;AAC9E,EAAA,OAAO,MAAA,CAAO,WAAA;AAAA,IACZ,MAAA,CAAO,QAAQ,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM;AAAA,MAC1C,GAAA;AAAA,MACA,KAAA,CAAM,QAAQ,KAAK,CAAA,GAAI,KAAK,SAAA,CAAU,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK;AAAA,KAC5D;AAAA,GACH;AACF;AAEA,SAAS,uBACP,IAAA,EACA,cAAA,EACA,eACA,OAAA,EACA,SAAA,EACA,YACA,eAAA,EACe;AACf,EAAA,MAAM,SAAA,GAAY,eAAe,cAAc,CAAA;AAC/C,EAAA,MAAM,QAAA,GAAW,eAAe,aAAa,CAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,aAAA,CAAc,SAAA,EAAW,QAAQ,CAAA;AAClD,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,IAAA;AAAA,IACA,UAAU,QAAA,IAAY,MAAA;AAAA,IACtB,sBAAA,EAAwB,UAAU,aAAA,IAAiB,SAAA;AAAA,IACnD,qBAAA,EAAuB,SAAS,aAAA,IAAiB,SAAA;AAAA,IACjD,oBAAA,EAAsB,IAAA,CAAK,SAAA,CAAU,SAAS,CAAA;AAAA,IAC9C,mBAAA,EAAqB,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AAAA,IAC5C,GAAG;AAAA,GACL;AACA,EAAA,IAAI,QAAA,KAAa,MAAA,IAAa,CAAC,OAAA,EAAS;AACtC,IAAA,OAAO,oBAAoB,EAAE,SAAA,EAAW,YAAY,eAAA,EAAiB,OAAA,EAAS,QAAQ,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,mBAAA,CAAoB,EAAE,SAAA,EAAW,UAAA,EAAY,QAAQ,CAAA;AAC9D;AAEO,SAAS,kBAAkB,KAAA,EAAsC;AACtE,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,MAAM,OAAA,GACJ,QAAA,CAAS,eAAA,IACT,QAAA,CAAS,UAAA,GAAa,KACtB,QAAA,CAAS,aAAA,GAAgB,CAAA,IACzB,QAAA,CAAS,cAAA,GAAiB,CAAA;AAC5B,EAAA,OAAO,sBAAA;AAAA,IACL,KAAA;AAAA,IACA,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,QAAA;AAAA,IACN,OAAA;AAAA,IACA,QAAA,CAAS,aAAA;AAAA,IACT,QAAA,CAAS,UAAA;AAAA,IACT;AAAA,MACE,iBAAiB,QAAA,CAAS,eAAA;AAAA,MAC1B,eAAe,QAAA,CAAS,aAAA;AAAA,MACxB,gBAAgB,QAAA,CAAS,cAAA;AAAA,MACzB,gBAAgB,QAAA,CAAS;AAAA;AAC3B,GACF;AACF;AAEO,SAAS,sBAAsB,KAAA,EAA0C;AAC9E,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,OAAO,sBAAA;AAAA,IACL,SAAA;AAAA,IACA,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,QAAA;AAAA,IACN,QAAA,CAAS,eAAA,IAAmB,QAAA,CAAS,SAAA,GAAY,CAAA;AAAA,IACjD,QAAA,CAAS,SAAA;AAAA,IACT,CAAA;AAAA,IACA;AAAA,MACE,iBAAiB,QAAA,CAAS,eAAA;AAAA,MAC1B,cAAc,QAAA,CAAS,YAAA;AAAA,MACvB,gBAAgB,QAAA,CAAS;AAAA;AAC3B,GACF;AACF;;;ACvQO,SAAS,4BACd,KAAA,EACuB;AACvB,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,+CAAA;AAAA,IACX,aAAA,EAAe,OAAA;AAAA,IACf,GAAG,KAAA;AAAA,IACH,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,MAC5C,GAAG,QAAA;AAAA,MACH,WAAA,EAAa,CAAC,GAAG,QAAA,CAAS,WAAW;AAAA,KACvC,CAAE;AAAA,GACJ;AACF;;;AC4DO,IAAM,yBAAA,GAAyD;AAAA,EACpE,UAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,aAAA,CACd,IAAA,EACA,QAAA,EACA,IAAA,EACA,MAAA,EAC2D;AAC3D,EAAA,OAAO,EAAE,IAAI,KAAA,EAAO,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,MAAA,EAAO,EAAE;AAC9D;AAOO,SAAS,yBAAA,CACd,OAAA,EACA,QAAA,EACA,MAAA,EAC2D;AAC3D,EAAA,OAAO,aAAA;AAAA,IACL,6BAAA;AAAA,IACA,wEAAA;AAAA,IACA,qFAAA;AAAA,IACA;AAAA,MACE,MAAA;AAAA,MACA,aAAa,OAAA,CAAQ,IAAA;AAAA,MACrB,aAAa,OAAA,CAAQ,IAAA;AAAA,MACrB,kBAAkB,QAAA,CAAS,QAAA;AAAA,MAC3B,gBAAgB,QAAA,CAAS,MAAA;AAAA,MACzB,gBAAA,EAAkB;AAAA;AACpB,GACF;AACF;AAEO,SAAS,mBAAA,CACd,OACA,OAAA,EAC8B;AAC9B,EAAA,IACE,KAAA,CAAM,QAAQ,IAAA,KAAS,OAAA,CAAQ,QAAQ,IAAA,IACvC,KAAA,CAAM,OAAA,CAAQ,IAAA,KAAS,OAAA,CAAQ,OAAA,CAAQ,QACvC,KAAA,CAAM,QAAA,CAAS,QAAA,KAAa,OAAA,CAAQ,QAAA,CAAS,QAAA,IAC7C,MAAM,QAAA,CAAS,MAAA,KAAW,OAAA,CAAQ,QAAA,CAAS,MAAA,EAC3C;AACA,IAAA,OAAO,aAAA;AAAA,MACL,mCAAA;AAAA,MACA,wDAAA;AAAA,MACA,gFAAA;AAAA,MACA;AAAA,QACE,WAAA,EAAa,QAAQ,OAAA,CAAQ,IAAA;AAAA,QAC7B,UAAA,EAAY,MAAM,OAAA,CAAQ,IAAA;AAAA,QAC1B,eAAA,EAAiB,QAAQ,QAAA,CAAS,MAAA;AAAA,QAClC,cAAA,EAAgB,MAAM,QAAA,CAAS;AAAA;AACjC,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,IAAI,GAAA,CAAI,KAAA,CAAM,SAAA,CAAU,IAAI,CAAC,QAAA,KAAa,QAAA,CAAS,IAAI,CAAC,CAAA;AACtE,EAAA,MAAM,OAAA,GAAU,0BAA0B,MAAA,CAAO,CAAC,SAAS,CAAC,KAAA,CAAM,GAAA,CAAI,IAAI,CAAC,CAAA;AAC3E,EAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,IAAA,OAAO,aAAA;AAAA,MACL,6BAAA;AAAA,MACA,4DAAA;AAAA,MACA,6DAAA;AAAA,MACA,EAAE,OAAA;AAAyC,KAC7C;AAAA,EACF;AACA,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAM;AAC3B;AAEO,IAAM,mBAAA,GAAN,cAAkC,KAAA,CAAM;AAAA,EACpC,IAAA,GAAO,gCAAA;AAAA,EACP,MAAA;AAAA,EAET,WAAA,CAAY,MAAA,EAA+B,QAAA,GAA8B,EAAC,EAAG;AAC3E,IAAA,KAAA;AAAA,MACE,QAAA,CAAS,WAAW,CAAA,GAChB,oDAAA,GACA,mCAAmC,QAAA,CAAS,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAC5D;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AACF;AAEA,SAAS,iBAAiB,MAAA,EAAwC;AAChE,EAAA,OAAO,MAAA,CAAO,OAAO,MAAM,CAAA,CAAE,KAAK,CAAC,KAAA,KAAU,UAAU,CAAC,CAAA;AAC1D;AAIO,SAASC,mBACd,cAAA,EACiC;AACjC,EAAA,IAAI,OAAA,IAAW,cAAA,EAAgB,OAAO,iBAAA,CAAwB,cAAc,CAAA;AAC5E,EAAA,MAAM,OAAA,GAAU,cAAA;AAChB,EAAA,MAAM,WAAA,GAAc,OAClB,OAAA,EACA,GAAA,KACiF;AACjF,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA;AAC1C,IAAA,IAAI,MAAA;AACJ,IAAA,IAAI;AACF,MAAA,MAAA,GAAS,MAAM,IAAI,OAAO,CAAA;AAAA,IAC5B,CAAA,SAAE;AACA,MAAA,MAAM,QAAQ,OAAA,EAAQ;AAAA,IACxB;AACA,IAAA,MAAM,OAAA,GAAgC,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAO,EAAG,QAAA,EAAU,EAAC,EAAE;AAC/E,IAAA,IAAI,gBAAA,CAAiB,OAAA,CAAQ,MAAM,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,mBAAA,CAAoB,OAAA,CAAQ,MAAA,EAAQ,QAAQ,QAAQ,CAAA;AAAA,IAChE;AACA,IAAA,OAAO,EAAE,KAAA,EAAO,MAAA,EAAQ,OAAA,EAAQ;AAAA,EAClC,CAAA;AAEA,EAAA,OAAO;AAAA,IACL;AAAA,GACF;AACF;;;AClMO,SAAS,6BAA6B,IAAA,EAAkD;AAC7F,EAAA,MAAM,UAAU,IAAA,KAAS,SAAA;AACzB,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,OAAA;AAAA,IACf,GAAA,EAAK,IAAA,KAAS,MAAA,GAAS,YAAA,GAAe,UAAU,YAAA,GAAe,eAAA;AAAA,IAC/D,WAAA,EAAa,UAAU,OAAA,GAAU,kBAAA;AAAA,IACjC,MAAA,EAAQ,UAAU,MAAA,GAAS,kBAAA;AAAA,IAC3B,QAAA,EAAU,UAAU,MAAA,GAAS,kBAAA;AAAA,IAC7B,gBAAA,EAAkB,UAAU,MAAA,GAAS,kBAAA;AAAA,IACrC,KAAA,EAAO,UAAU,qBAAA,GAAwB,gCAAA;AAAA,IACzC,MAAA,EAAQ,UAAU,sBAAA,GAAyB,gBAAA;AAAA,IAC3C,cAAc,CAAA,UAAA,EAAa,IAAI,CAAA,CAAA,EAAI,OAAA,GAAU,yBAAyB,gBAAgB,CAAA;AAAA,GACxF;AACF;AAEO,SAAS,sBAAsB,IAAA,EAA+C;AACnF,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,eAAA;AAAA,MACN,QAAA,EAAU,aAAA;AAAA,MACV,YAAA,EAAc;AAAA,KAChB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,QAAA,EAAU,IAAA,KAAS,MAAA,GAAS,YAAA,GAAe,eAAA;AAAA,IAC3C,QAAA,EAAU,kBAAA;AAAA,IACV,gBAAA,EAAkB,kBAAA;AAAA,IAClB,MAAA,EAAQ;AAAA,GACV;AACF;;;ACxBO,IAAM,qBAAA,GAA6C;AAAA,EACxD,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,eAAA;AAAA,EACV,QAAA,EAAU,kBAAA;AAAA,EACV,gBAAA,EAAkB,kBAAA;AAAA,EAClB,MAAA,EAAQ;AACV;AAEO,IAAM,iBAAA,GAAyC;AAAA,EACpD,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,YAAA;AAAA,EACV,QAAA,EAAU,kBAAA;AAAA,EACV,gBAAA,EAAkB,kBAAA;AAAA,EAClB,MAAA,EAAQ;AACV;AAEO,IAAM,gBAAA,GAAwC;AAE9C,IAAM,oBAAA,GAA4C;AAAA,EACvD,IAAA,EAAM,eAAA;AAAA,EACN,QAAA,EAAU,aAAA;AAAA,EACV,YAAA,EAAc;AAChB;;;ACSA,IAAM,aAAA,GAAgB,uBAAA;AAEtB,SAAS,QAAQ,KAAA,EAA8C;AAC7D,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,KAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,IAAA,EAAM,6BAAA;AAAA,MACN,QAAA,EAAU,+BAA+B,KAAK,CAAA,2CAAA,CAAA;AAAA,MAC9C,IAAA,EAAM,uHAAA;AAAA,MACN,MAAA,EAAQ,EAAE,KAAA,EAAO,KAAA,EAAO,SAAA;AAAU;AACpC,GACF;AACF;AAEA,SAASH,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEO,SAAS,4BAA4B,KAAA,EAA+C;AACzF,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,EAAG,OAAO,QAAQ,MAAM,CAAA;AAC3C,EAAA,IAAI,KAAA,CAAM,aAAA,KAAkB,OAAA,EAAS,OAAO,QAAQ,eAAe,CAAA;AACnE,EAAA,IAAI,MAAM,QAAA,KAAa,kDAAA;AACrB,IAAA,OAAO,QAAQ,UAAU,CAAA;AAC3B,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,EAAG,OAAO,QAAQ,QAAQ,CAAA;AAC9C,EAAA,IACE,OAAO,MAAA,CAAO,SAAA,KAAc,QAAA,IAC5B,CAAC,MAAA,CAAO,SAAA,CAAU,QAAA,CAAS,SAAS,CAAA,IACpC,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,IACvB,CAAC,aAAA,CAAc,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA,IACzC,CAAC,aAAA,CAAc,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,UAAU,CAAC,CAAA;AAE7C,IAAA,OAAO,QAAQ,QAAQ,CAAA;AACzB,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,IAAI,CAACA,SAAAA,CAAS,MAAM,CAAA,IAAK,CAAC,aAAA,CAAc,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAC,CAAA,IAAK,CAACA,SAAAA,CAAS,OAAO,KAAK,CAAA;AAC3F,IAAA,OAAO,QAAQ,QAAQ,CAAA;AACzB,EAAA,MAAM,cAAc,MAAA,CAAO,KAAA;AAC3B,EAAA,MAAM,YAAA,GAAuC;AAAA,IAC3C,aAAA,EAAe,OAAA;AAAA,IACf,GAAA,EAAK,eAAA;AAAA,IACL,WAAA,EAAa,kBAAA;AAAA,IACb,MAAA,EAAQ,kBAAA;AAAA,IACR,QAAA,EAAU,kBAAA;AAAA,IACV,gBAAA,EAAkB,kBAAA;AAAA,IAClB,KAAA,EAAO,gCAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,QAAQ,KAAK,MAAA,CAAO,OAAA,CAAQ,YAAY,CAAA,EAAG;AAC5D,IAAA,IAAI,WAAA,CAAY,KAAK,CAAA,KAAM,QAAA,SAAiB,OAAA,CAAQ,CAAA,aAAA,EAAgB,KAAK,CAAA,CAAE,CAAA;AAAA,EAC7E;AACA,EAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,EAAA,IACE,CAACA,SAAAA,CAAS,MAAM,CAAA,IAChB,OAAO,QAAA,KAAa,OAAA,IACpB,MAAA,CAAO,IAAA,KAAS,UAAA,IAChB,CAAC,aAAA,CAAc,IAAA,CAAK,OAAO,MAAA,CAAO,YAAY,CAAC,CAAA,IAC/C,CAAC,aAAA,CAAc,IAAA,CAAK,MAAA,CAAO,OAAO,UAAU,CAAC,CAAA,IAC7C,MAAA,CAAO,YAAA,KAAiB,MAAA,CAAO,MAAA,IAC/B,MAAA,CAAO,eAAe,MAAA,CAAO,UAAA;AAE7B,IAAA,OAAO,QAAQ,QAAQ,CAAA;AACzB,EAAA,MAAM,eAAe,KAAA,CAAM,OAAA;AAC3B,EAAA,IACE,CAACA,UAAS,YAAY,CAAA,IACtB,aAAa,IAAA,KAAS,yBAAA,IACtB,aAAa,IAAA,KAAS,sBAAA;AAEtB,IAAA,OAAO,QAAQ,SAAS,CAAA;AAC1B,EAAA,MAAM,YAAY,KAAA,CAAM,SAAA;AACxB,EAAA,IACE,CAACA,SAAAA,CAAS,SAAS,CAAA,IACnB,SAAA,CAAU,QAAQ,YAAA,IAClB,SAAA,CAAU,KAAA,KAAU,YAAA,IACpB,UAAU,GAAA,KAAQ,4BAAA,IAClB,UAAU,MAAA,KAAW,SAAA,IACrB,UAAU,IAAA,KAAS,mBAAA;AAEnB,IAAA,OAAO,QAAQ,WAAW,CAAA;AAC5B,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAA+C;AACpE;;;AClHA,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,OAAO,KAAA,EAAoC;AAClD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjE;AAEO,SAAS,uBAAuB,KAAA,EAKlB;AACnB,EAAA,IAAI,CAACA,UAAS,KAAA,CAAM,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,SAAS,UAAA,EAAY;AAC7D,IAAA,OAAO,cAAA,CAAe,kCAAkC,oCAAA,EAAsC;AAAA,MAC5F,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,UAAA,EACEA,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,KAAS,QAAA,GACjD,KAAA,CAAM,KAAA,CAAM,IAAA,GACZ;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,KAAA,CAAM,MAAA;AAC3B,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,IAAK,MAAA,CAAO,WAAW,CAAA,EAAG;AACjD,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,wCAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GACJ,MAAA,CAAO,IAAA,CAAK,CAAC,IAAA,KAAS;AACpB,IAAA,IAAI,CAACA,SAAAA,CAAS,IAAI,CAAA,EAAG,OAAO,KAAA;AAC5B,IAAA,MAAM,IAAA,GACJA,SAAAA,CAAS,IAAA,CAAK,WAAW,CAAA,IAAKA,SAAAA,CAAS,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA,GACxD,IAAA,CAAK,WAAA,CAAY,IAAA,GACjB,MAAA;AACN,IAAA,MAAM,IAAA,GAAO,IAAA,EAAM,SAAA,IAAa,IAAA,CAAK,IAAA;AACrC,IAAA,OAAO,CAAC,eAAA,CAAgB,IAAA,CAAK,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,EAC3C,CAAC,CAAA,IAAK,MAAA,CAAO,CAAC,CAAA;AAChB,EAAA,IAAI,CAACA,SAAAA,CAAS,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,IAAA,KAAS,QAAA,IAAY,CAACA,SAAAA,CAAS,KAAA,CAAM,OAAO,CAAA,EAAG;AAClF,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,0CAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,IAAI,OAAO,MAAM,OAAA,CAAQ,MAAA,KAAW,YAAY,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AACjF,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,oDAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,UAAA;AAC1B,EAAA,MAAM,UAAA,GAAaA,SAAAA,CAAS,KAAK,CAAA,GAAI,QAAQ,KAAA,CAAM,UAAA;AACnD,EAAA,MAAM,aAAA,GAAgB,OAAO,KAAA,CAAM,KAAA,CAAM,UAAU,KAAA,CAAM,MAAA,IAAU,YAAY,aAAa,CAAA;AAC5F,EAAA,MAAM,iBAAiB,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,cAAA,IAAkB,YAAY,cAAc,CAAA;AACtF,EAAA,MAAM,gBAAgB,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,aAAA,IAAiB,YAAY,aAAa,CAAA;AACnF,EAAA,IAAI,aAAA,KAAkB,MAAA,IAAa,cAAA,KAAmB,MAAA,IAAa,kBAAkB,MAAA,EAAW;AAC9F,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,2EAAA;AAAA,MACA,EAAE,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,CAAM,IAAA,EAAM,OAAO,YAAA;AAAa,KAC5D;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,aAAA;AAAA,MACA,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAA;AAAA,MACvB,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,cAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEA,eAAsB,sBAAA,CACpB,MACA,KAAA,EAQA;AACA,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA;AACnB,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,4DAAA;AAAA,MACA,EAAE,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,MAAM,KAAA;AAAM,KAChD;AACF,EAAA,MAAM,SAAS,MAAM,KAAA,CAAM,MAAA,CAAO,UAAA,CAAoC,KAAK,IAAI,CAAA;AAC/E,EAAA,IAAI,CAAC,MAAA,CAAO,EAAA;AACV,IAAA,OAAO,gBAAA;AAAA,MACL,4DAAA;AAAA,MACA,KAAA,CAAM,KAAA;AAAA,MACN,MAAA,CAAO;AAAA,KACT;AACF,EAAA,MAAM,YAAY,sBAAA,CAAuB;AAAA,IACvC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,GAAI,OAAO,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO;AAAA,IAC/D,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAC,GAAI,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA;AAAW,GAC5E,CAAA;AACD,EAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,IACE,CAAC,KAAA,CAAM,aAAA,IACP,CAAC,MAAM,UAAA,IACP,QAAA,KAAa,MAAA,IACb,QAAA,CAAS,aAAa,CAAA,IACtB,QAAA,CAAS,cAAA,IAAkB,CAAA,IAC3B,SAAS,WAAA,KAAgB,MAAA;AAEzB,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,uCAAA;AAAA,MACA,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,MAAM,KAAA;AAAM,KAC1C;AACF,EAAA,MAAM,QAAA,GAA4C;AAAA,IAChD,aAAA,EAAe,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,aAAa,CAAA,IAAK,EAAA;AAAA,IAC7D,OAAA,EAAS,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,OAAO,CAAA,IAAK,EAAA;AAAA,IACjD,IAAA,EAAM,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,IAAI,CAAA,IAAK,EAAA;AAAA,IAC3C,cAAA,EAAgB,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,cAAc,CAAA,IAAK,EAAA;AAAA,IAC/D,aAAA,EAAe,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,aAAa,CAAA,IAAK,EAAA;AAAA,IAC7D,eAAA,EAAiB,KAAA,CAAM,aAAA,IAAiB,KAAA,CAAM,UAAA;AAAA,IAC9C,WAAW,QAAA,CAAS,SAAA;AAAA,IACpB,gBAAgB,QAAA,CAAS;AAAA,GAC3B;AACA,EAAA,MAAM,SAAS,sBAAA,CAAuB,EAAE,WAAW,SAAA,CAAU,KAAA,EAAO,UAAU,CAAA;AAC9E,EAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,mEAAA;AAAA,MACA,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,MAAM,KAAA,EAAO,GAAG,OAAO,MAAA;AAAO,KAC1D;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,UAAA;AAAA,QACN,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,MAAA,EAAQ,UAAU,KAAA,CAAM;AAAA,OAC1B;AAAA,MACA,YAAA,EAAc,sBAAsB,UAAU,CAAA;AAAA,MAC9C,MAAA,EAAQ,6BAA6B,UAAU,CAAA;AAAA,MAC/C,MAAA;AAAA,MACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,KACjC;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,GACjC;AACF;;;ACpJA,IAAM,yBAAA,GAAgE;AAAA,EACpE,MAAM,KAAA,EAAO;AACX,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA;AACrC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,4CAAA,EAA6C;AAC1E,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,IAAI,QAAQ,OAAA,EAAS,IAAA,KAAS,mBAAmB,OAAO,OAAA,CAAQ,QAAQ,IAAA,KAAS,QAAA;AAC/E,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,kCAAA,EAAmC;AAChE,IAAA,IACE,OAAA,CAAQ,QAAA,KAAa,MAAA,IACrB,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,IAC/C,OAAO,OAAA,CAAQ,SAAS,MAAA,KAAW,QAAA;AAEnC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gCAAA,EAAiC;AAC9D,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,IACE,OAAA,KAAY,MAAA,IACZ,OAAA,CAAQ,IAAA,KAAS,OAAA,CAAQ,OAAA,CAAQ,IAAA,IACjC,OAAA,CAAQ,aAAA,CAAc,MAAA,KAAW,CAAA,IACjC,OAAA,CAAQ,SAAS,MAAA,KAAW,CAAA;AAE5B,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,qDAAA,EAAsD;AACnF,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,OAAA,EAAkC;AAAA,EAC9D,CAAA;AAAA,EACA,QAAA,EACE;AACJ,CAAA;AAEA,IAAM,2BAAA,GAAmD;AAAA,EACvD,OAAO,CAAC,KAAA,MAAW,EAAE,EAAA,EAAI,MAAM,KAAA,EAAM,CAAA;AAAA,EACrC,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,yBAAA,GAA4B;AAAA,EACvC,EAAA,EAAI,kBAAA;AAAA,EACJ,KAAA,EAAO,wBAAA;AAAA,EACP,OAAA,EAAS,0EAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,UAAA,EAAY,yBAAA;AAAA,EACZ,YAAA,EAAc,2BAAA;AAAA,EACd,QAAA,EAAU,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB,CAAA;AAAA,EAC/C,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,MAAM,WAAA,EAAY;AAAA,IACpD,QAAA,EAAU,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,IAC7C,gBAAA,EAAkB,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB;AAAA;AAE3D;AAEA,SAAS,sBACP,OAAA,EACqD;AACrD,EAAA,OAAO,OAAA,CAAQ,QAAQ,yBAAA,CAA0B,OAAA,CAAQ,SAAS,OAAA,CAAQ,QAAA,EAAU,UAAU,CAAC,CAAA;AACjG;AAEO,SAAS,kCACd,MAAA,GAA6E,OAAO,OAAA,KAClF,qBAAA,CAAsB,OAAO,CAAA,EACoB;AACnD,EAAA,OAAO,UAAA,CAAW,yBAAA,EAA2B,OAAO,OAAA,EAAS,OAAA,KAAY;AACvE,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,MAAA;AACvB,IAAA,IACE,MAAA,CAAO,MAAM,MAAA,CAAO,WAAA,KAAgB,QAAQ,OAAA,CAAQ,IAAA,IACpD,OAAO,KAAA,CAAM,MAAA,CAAO,yBAAyB,CAAA,IAC7C,MAAA,CAAO,MAAM,MAAA,CAAO,wBAAA,IAA4B,KAChD,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,YAAA,KAAiB,eAAA,EACrC;AACA,MAAA,OAAO,aAAA;AAAA,QACL,2BAAA;AAAA,QACA,oFAAA;AAAA,QACA,gFAAA;AAAA,QACA;AAAA,UACE,WAAA,EAAa,QAAQ,OAAA,CAAQ,IAAA;AAAA,UAC7B,iBAAA,EAAmB,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,WAAA;AAAA,UACvC,qBAAA,EAAuB,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO,qBAAA;AAAA,UAC3C,wBAAA,EAA0B,MAAA,CAAO,KAAA,CAAM,MAAA,CAAO;AAAA;AAChD,OACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,UAAU,KAAA,EAAM;AAAA,EAC5C,CAAC,CAAA;AACH;AAEO,IAAM,eAAA,GAAkB,UAAA;AAAA,EAAW,kBAAkB,UAAU,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,OAAA,KAAA,CAC7E,YAAY;AACX,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,qBAAqB,CAAA;AAClD,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,IAAA;AACrB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA,MAAY,OAAO,UAAA,KACnC,sBAAA,CAAuB,IAAA,EAAM;AAAA,QAC3B,GAAI,WAAW,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAO;AAAA,QACvE,GAAI,WAAW,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,UAAA,CAAW,QAAA,EAAS;AAAA,QAC7E,aAAA,EAAe,UAAA,CAAW,QAAA,EAAU,aAAA,KAAkB,IAAA;AAAA,QACtD,UAAA,EAAY,UAAA,CAAW,QAAA,EAAU,UAAA,KAAe,IAAA;AAAA,QAChD,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,GAAI,WAAW,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,UAAA,CAAW,SAAA;AAAU,OACjF;AAAA,KACH;AAAA,EACF,CAAA;AACF,CAAA;AACqC,mBAAA,CAAoB,UAAA,EAAY,eAAe;;;ACxHpF,SAASA,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAASI,QAAO,KAAA,EAAoC;AAClD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjE;AAEA,SAAS,aACP,WAAA,EACuE;AACvE,EAAA,MAAM,QAAQ,WAAA,CAAY,IAAA;AAC1B,EAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACpB,KAAA,CAAM,WAAW,CAAA,IACjB,KAAA,CAAM,KAAK,CAAC,KAAA,KAAU,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA;AAE1E,IAAA,OAAO,MAAA;AACT,EAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,GAAI,KAAA;AAC7C,EAAA,IAAI,OAAO,IAAA,IAAQ,IAAA,GAAO,IAAA,IAAQ,IAAA,GAAO,MAAM,OAAO,MAAA;AACtD,EAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAC5C;AAEO,SAAS,mBAAmB,KAAA,EAKd;AACnB,EAAA,IAAI,CAACJ,UAAS,KAAA,CAAM,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzD,IAAA,OAAO,cAAA,CAAe,kCAAkC,4BAAA,EAA8B;AAAA,MACpF,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,UAAA,EACEA,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,KAAS,QAAA,GACjD,KAAA,CAAM,KAAA,CAAM,IAAA,GACZ;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,IAAA;AAC9B,EAAA,MAAM,IAAA,GACJ,SAAA,YAAqB,YAAA,GAAe,CAAC,GAAG,SAAS,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,SAAA,GAAY,EAAC;AAC/F,EAAA,IACE,IAAA,CAAK,MAAA,KAAW,CAAA,IAChB,IAAA,CAAK,KAAK,CAAC,KAAA,KAAU,OAAO,KAAA,KAAU,YAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA,EACzE;AACA,IAAA,OAAO,cAAA,CAAe,oCAAoC,mCAAA,EAAqC;AAAA,MAC7F,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACA,EAAA,MAAM,CAAC,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,GAAI,IAAA;AAC7C,EAAA,IAAI,IAAA,GAAO,IAAA,IAAQ,IAAA,GAAO,IAAA,IAAQ,OAAO,IAAA,EAAM;AAC7C,IAAA,OAAO,cAAA,CAAe,oCAAoC,4BAAA,EAA8B;AAAA,MACtF,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,aAAA;AAC1B,EAAA,MAAM,SAAA,GAAY,MAAM,KAAA,CAAM,SAAA;AAC9B,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IAAK,KAAA,CAAM,WAAW,CAAA,EAAG;AAC/C,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,4CAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,IAAK,SAAA,CAAU,WAAW,CAAA,EAAG;AACvD,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,iDAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,KAAA,MAAW,WAAW,SAAA,EAAW;AAC/B,IAAA,IAAI,CAACA,SAAAA,CAAS,OAAO,CAAA,EAAG;AACtB,MAAA,OAAO,cAAA;AAAA,QACL,kCAAA;AAAA,QACA,oCAAA;AAAA,QACA;AAAA,UACE,KAAA,EAAO,SAAA;AAAA,UACP,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,KAAA,EAAO;AAAA;AACT,OACF;AAAA,IACF;AACA,IAAA,MAAM,eAAe,OAAA,CAAQ,YAAA;AAC7B,IAAA,MAAM,cAAc,OAAA,CAAQ,WAAA;AAC5B,IAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAC3B,IAAA,IACE,OAAO,YAAA,KAAiB,QAAA,IACxB,YAAA,GAAe,CAAA,IACf,gBAAgB,KAAA,CAAM,MAAA,IACtB,OAAO,WAAA,KAAgB,YACvB,OAAO,UAAA,KAAe,YACtB,WAAA,GAAc,CAAA,IACd,cAAc,CAAA,EACd;AACA,MAAA,OAAO,cAAA;AAAA,QACL,kCAAA;AAAA,QACA,mDAAA;AAAA,QACA;AAAA,UACE,KAAA,EAAO,SAAA;AAAA,UACP,MAAM,KAAA,CAAM,IAAA;AAAA,UACZ,KAAA,EAAO;AAAA;AACT,OACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,CAAM,UAAA;AAC1B,EAAA,MAAM,UAAA,GAAaA,SAAAA,CAAS,KAAK,CAAA,GAAI,QAAQ,KAAA,CAAM,UAAA;AACnD,EAAA,MAAM,aAAA,GAAgBI,QAAO,KAAA,CAAM,KAAA,CAAM,UAAU,KAAA,CAAM,MAAA,IAAU,YAAY,aAAa,CAAA;AAC5F,EAAA,MAAM,eAAeA,OAAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAA,IAAgB,YAAY,YAAY,CAAA;AAChF,EAAA,MAAM,cAAcA,OAAAA,CAAO,KAAA,CAAM,KAAA,CAAM,WAAA,IAAe,YAAY,WAAW,CAAA;AAC7E,EAAA,MAAM,gBAAgBA,OAAAA,CAAO,KAAA,CAAM,KAAA,CAAM,aAAA,IAAiB,YAAY,aAAa,CAAA;AACnF,EAAA,MAAM,aAAaA,OAAAA,CAAO,KAAA,CAAM,KAAA,CAAM,UAAA,IAAc,YAAY,UAAU,CAAA;AAC1E,EAAA,IACE,aAAA,KAAkB,UAClB,YAAA,KAAiB,MAAA,IACjB,gBAAgB,MAAA,IAChB,aAAA,KAAkB,MAAA,IAClB,UAAA,KAAe,MAAA,EACf;AACA,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,kFAAA;AAAA,MACA,EAAE,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,CAAM,IAAA,EAAM,OAAO,YAAA;AAAa,KAC5D;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,aAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,aAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAM,CAAC,IAAA,EAAM,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAAA,MACzC,cAAc,SAAA,CAAU,MAAA;AAAA,MACxB,mBAAmB,KAAA,CAAM;AAAA;AAC3B,GACF;AACF;AAEA,eAAsB,kBAAA,CACpB,MACA,KAAA,EAQA;AACA,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA;AACnB,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,4DAAA;AAAA,MACA,EAAE,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,MAAM,KAAA;AAAM,KAChD;AACF,EAAA,MAAM,SAAS,MAAM,KAAA,CAAM,MAAA,CAAO,UAAA,CAAoC,KAAK,IAAI,CAAA;AAC/E,EAAA,IAAI,CAAC,MAAA,CAAO,EAAA;AACV,IAAA,OAAO,gBAAA;AAAA,MACL,wDAAA;AAAA,MACA,KAAA,CAAM,KAAA;AAAA,MACN,MAAA,CAAO;AAAA,KACT;AACF,EAAA,MAAM,YAAY,kBAAA,CAAmB;AAAA,IACnC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,GAAI,OAAO,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO;AAAA,IAC/D,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAC,GAAI,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA;AAAW,GAC5E,CAAA;AACD,EAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,IACE,CAAC,KAAA,CAAM,aAAA,IACP,CAAC,MAAM,UAAA,IACP,QAAA,KAAa,MAAA,IACb,QAAA,CAAS,aAAa,CAAA,IACtB,QAAA,CAAS,cAAA,IAAkB,CAAA,IAC3B,SAAS,WAAA,KAAgB,MAAA;AAEzB,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,uCAAA;AAAA,MACA,EAAE,KAAA,EAAO,UAAA,EAAY,KAAA,EAAO,MAAM,KAAA;AAAM,KAC1C;AACF,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,QAAA,CAAS,WAAW,CAAA;AAC9C,EAAA,MAAM,YAAA,GAAe,SAAS,WAAA,CAAY,YAAA;AAC1C,EAAA,MAAM,iBAAA,GAAoB,SAAS,WAAA,CAAY,iBAAA;AAC/C,EAAA,IACE,SAAS,MAAA,IACT,OAAO,iBAAiB,QAAA,IACxB,OAAO,sBAAsB,QAAA,EAC7B;AACA,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,uEAAA;AAAA,MACA,EAAE,KAAA,EAAO,sBAAA,EAAwB,KAAA,EAAO,MAAM,KAAA;AAAM,KACtD;AAAA,EACF;AACA,EAAA,MAAM,QAAA,GAAwC;AAAA,IAC5C,GAAG,SAAA,CAAU,KAAA;AAAA,IACb,aAAA,EAAeA,OAAAA,CAAO,QAAA,CAAS,WAAA,CAAY,aAAa,CAAA,IAAK,EAAA;AAAA,IAC7D,YAAA,EAAcA,OAAAA,CAAO,QAAA,CAAS,WAAA,CAAY,YAAY,CAAA,IAAK,EAAA;AAAA,IAC3D,WAAA,EAAaA,OAAAA,CAAO,QAAA,CAAS,WAAA,CAAY,WAAW,CAAA,IAAK,EAAA;AAAA,IACzD,aAAA,EAAeA,OAAAA,CAAO,QAAA,CAAS,WAAA,CAAY,aAAa,CAAA,IAAK,EAAA;AAAA,IAC7D,UAAA,EAAYA,OAAAA,CAAO,QAAA,CAAS,WAAA,CAAY,UAAU,CAAA,IAAK,EAAA;AAAA,IACvD,IAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA,EAAiB,KAAA,CAAM,aAAA,IAAiB,KAAA,CAAM,UAAA;AAAA,IAC9C,WAAW,QAAA,CAAS,SAAA;AAAA,IACpB,gBAAgB,QAAA,CAAS;AAAA,GAC3B;AACA,EAAA,MAAM,SAAS,kBAAA,CAAmB,EAAE,WAAW,SAAA,CAAU,KAAA,EAAO,UAAU,CAAA;AAC1E,EAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,+DAAA;AAAA,MACA,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,MAAM,KAAA,EAAO,GAAG,OAAO,MAAA;AAAO,KAC1D;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAiB,IAAA,EAAM,KAAK,IAAA,EAAM,MAAA,EAAQ,SAAA,CAAU,KAAA,CAAM,aAAA,EAAc;AAAA,MACzF,YAAA,EAAc,sBAAsB,MAAM,CAAA;AAAA,MAC1C,MAAA,EAAQ,6BAA6B,MAAM,CAAA;AAAA,MAC3C,MAAA;AAAA,MACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,KACjC;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,GACjC;AACF;;;ACrNA,IAAM,qBAAA,GAAwD;AAAA,EAC5D,MAAM,KAAA,EAAO;AACX,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA;AACrC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,wCAAA,EAAyC;AACtE,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAI,QAAQ,OAAA,EAAS,IAAA,KAAS,eAAe,OAAO,OAAA,CAAQ,QAAQ,IAAA,KAAS,QAAA;AAC3E,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,8BAAA,EAA+B;AAC5D,IAAA,IACE,OAAA,CAAQ,QAAA,KAAa,MAAA,IACrB,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,IAC/C,OAAO,OAAA,CAAQ,SAAS,MAAA,KAAW,QAAA;AAEnC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gCAAA,EAAiC;AAC9D,IAAA,IACE,OAAA,KAAY,UACZ,OAAA,CAAQ,IAAA,KAAS,QAAQ,OAAA,CAAQ,IAAA,IACjC,QAAQ,YAAA,CAAa,MAAA,KAAW,KAChC,OAAA,CAAQ,WAAA,CAAY,WAAW,CAAA,IAC/B,OAAA,CAAQ,UAAU,MAAA,KAAW,CAAA,IAC7B,QAAQ,SAAA,CAAU,IAAA;AAAA,MAChB,CAAC,OAAA,KAAY,OAAA,CAAQ,EAAA,CAAG,MAAA,KAAW,KAAK,OAAA,CAAQ,WAAA,IAAe,CAAA,IAAK,OAAA,CAAQ,UAAA,IAAc;AAAA,SAE5F,OAAA,CAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,CAACC,MAAAA,KAAU,CAAC,MAAA,CAAO,QAAA,CAASA,MAAK,CAAC,CAAA,IACxD,QAAQ,IAAA,CAAK,GAAA,CAAI,KAAK,CAACA,MAAAA,KAAU,CAAC,MAAA,CAAO,SAASA,MAAK,CAAC,KACxD,OAAA,CAAQ,IAAA,CAAK,IAAI,IAAA,CAAK,CAACA,MAAAA,EAAO,KAAA,KAAUA,WAAU,OAAA,CAAQ,IAAA,CAAK,IAAI,KAAK,CAAA,IAAK,OAAO,GAAA,CAAI,CAAA;AAExF,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,iDAAA,EAAkD;AAC/E,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,OAAA,EAA8B;AAAA,EAC1D,CAAA;AAAA,EACA,QAAA,EACE;AACJ,CAAA;AAEA,IAAM,uBAAA,GAA+C;AAAA,EACnD,OAAO,CAAC,KAAA,MAAW,EAAE,EAAA,EAAI,MAAM,KAAA,EAAM,CAAA;AAAA,EACrC,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,qBAAA,GAAwB;AAAA,EACnC,EAAA,EAAI,cAAA;AAAA,EACJ,KAAA,EAAO,oBAAA;AAAA,EACP,OAAA,EAAS,wEAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,UAAA,EAAY,qBAAA;AAAA,EACZ,YAAA,EAAc,uBAAA;AAAA,EACd,QAAA,EAAU,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB,CAAA;AAAA,EAC/C,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,MAAM,WAAA,EAAY;AAAA,IAChD,QAAA,EAAU,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,IAC7C,gBAAA,EAAkB,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB;AAAA;AAE3D;AAEA,SAAS,kBACP,OAAA,EACiD;AACjD,EAAA,OAAO,OAAA,CAAQ,QAAQ,yBAAA,CAA0B,OAAA,CAAQ,SAAS,OAAA,CAAQ,QAAA,EAAU,MAAM,CAAC,CAAA;AAC7F;AAEO,SAAS,8BACd,MAAA,GAAqE,OAAO,OAAA,KAC1E,iBAAA,CAAkB,OAAO,CAAA,EACoB;AAC/C,EAAA,OAAOC,UAAAA,CAAW,qBAAA,EAAuB,OAAO,OAAA,EAAS,OAAA,KAAY;AACnE,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,MAAA;AACvB,IAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,MAAA;AAC5B,IAAA,IACE,MAAA,CAAO,gBAAgB,OAAA,CAAQ,OAAA,CAAQ,QACvC,MAAA,CAAO,YAAA,KAAiB,OAAO,oBAAA,IAC/B,MAAA,CAAO,iBAAiB,OAAA,CAAQ,OAAA,CAAQ,UAAU,MAAA,IAClD,MAAA,CAAO,gBACL,OAAA,CAAQ,OAAA,CAAQ,UAAU,MAAA,CAAO,CAAC,KAAK,OAAA,KAAY,GAAA,GAAM,QAAQ,WAAA,EAAa,CAAC,KACjF,MAAA,CAAO,UAAA,KACL,QAAQ,OAAA,CAAQ,SAAA,CAAU,OAAO,CAAC,GAAA,EAAK,YAAY,GAAA,GAAM,OAAA,CAAQ,YAAY,CAAC,CAAA,IAChF,MAAA,CAAO,OAAA,KAAY,MAAA,EACnB;AACA,MAAA,OAAO,aAAA;AAAA,QACL,2BAAA;AAAA,QACA,uEAAA;AAAA,QACA,4FAAA;AAAA,QACA;AAAA,UACE,WAAA,EAAa,QAAQ,OAAA,CAAQ,IAAA;AAAA,UAC7B,mBAAmB,MAAA,CAAO,WAAA;AAAA,UAC1B,oBAAA,EAAsB,OAAA,CAAQ,OAAA,CAAQ,SAAA,CAAU,MAAA;AAAA,UAChD,oBAAoB,MAAA,CAAO,YAAA;AAAA,UAC3B,SAAS,MAAA,CAAO;AAAA;AAClB,OACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,UAAU,KAAA,EAAM;AAAA,EAC5C,CAAC,CAAA;AACH;AAEO,IAAM,WAAA,GAAcA,UAAAA;AAAA,EAAW,kBAAkB,MAAM,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,OAAA,KAAA,CACrE,YAAY;AACX,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,qBAAqB,CAAA;AAClD,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,IAAA;AACrB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA,MAAY,OAAO,UAAA,KACnC,kBAAA,CAAmB,IAAA,EAAM;AAAA,QACvB,GAAI,WAAW,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAO;AAAA,QACvE,GAAI,WAAW,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,UAAA,CAAW,QAAA,EAAS;AAAA,QAC7E,aAAA,EAAe,UAAA,CAAW,QAAA,EAAU,aAAA,KAAkB,IAAA;AAAA,QACtD,UAAA,EAAY,UAAA,CAAW,QAAA,EAAU,UAAA,KAAe,IAAA;AAAA,QAChD,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,GAAI,WAAW,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,UAAA,CAAW,SAAA;AAAU,OACjF;AAAA,KACH;AAAA,EACF,CAAA;AACF,CAAA;AACiC,mBAAA,CAAoB,MAAA,EAAQ,WAAW;;;ACjJxE,SAASN,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAAS,cAAA,CAAe,OAAgC,KAAA,EAAmC;AACzF,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAK,CAAA;AACzB,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjE;AAEA,SAAS,cAAA,CAAe,OAAgC,KAAA,EAAmC;AACzF,EAAA,MAAM,KAAA,GAAQ,MAAM,KAAK,CAAA;AACzB,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,OAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,MAAA;AACvE;AAEA,SAAS,gBAAA,CACP,OACA,eAAA,EACoB;AACpB,EAAA,MAAM,OAAOA,SAAAA,CAAS,KAAA,CAAM,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AACjD,EAAA,IAAI,IAAA,EAAM,SAAS,QAAA,EAAU;AAC3B,IAAA,MAAMO,OAAAA,GAAS,cAAA,CAAe,IAAA,EAAM,YAAY,CAAA;AAChD,IAAA,OAAOA,OAAAA,KAAW,UAAa,MAAA,CAAO,SAAA,CAAUA,OAAM,CAAA,IAAKA,OAAAA,GAAS,IAAIA,OAAAA,GAAS,MAAA;AAAA,EACnF;AACA,EAAA,IAAI,MAAM,IAAA,KAAS,UAAA,SAAmB,IAAA,EAAM,IAAA,KAAS,SAAS,CAAA,GAAI,MAAA;AAClE,EAAA,MAAM,CAAC,KAAA,EAAO,MAAM,IAAI,eAAA,IAAmB,CAAC,QAAW,MAAS,CAAA;AAChE,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,MAAA,KAAW,MAAA,EAAW,OAAO,MAAA;AACxD,EAAA,MAAM,QAAQP,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,GAAI,MAAM,KAAA,GAAQ,MAAA;AACpD,EAAA,MAAM,MAAA,GAAS,UAAU,MAAA,IAAaA,SAAAA,CAAS,MAAM,MAAM,CAAA,GAAI,MAAM,MAAA,GAAS,MAAA;AAC9E,EAAA,MAAM,KAAA,GACJ,KAAA,EAAO,aAAA,KAAkB,IAAA,IAAQ,MAAA,KAAW,SACvC,cAAA,CAAe,MAAA,EAAQ,OAAO,CAAA,IAAK,CAAA,GACpC,CAAA;AACN,EAAA,IAAI,OAAA,GAAU,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,QAAQ,KAAK,CAAA;AAC3C,EAAA,IAAI,MAAA,GAAS,CAAA;AACb,EAAA,OAAO,UAAU,CAAA,EAAG;AAClB,IAAA,OAAA,GAAU,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,OAAA,GAAU,CAAC,CAAC,CAAA;AAC7C,IAAA,MAAA,IAAU,CAAA;AAAA,EACZ;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,sBAAsB,KAAA,EAAmE;AAChG,EAAA,OACE,UAAU,OAAA,IAAW,KAAA,KAAU,aAAA,IAAiB,KAAA,KAAU,oBAAoB,KAAA,KAAU,OAAA;AAE5F;AAEA,SAAS,eAAA,CACP,MACA,MAAA,EACsD;AACtD,EAAA,MAAM,KAAA,GACJ,gBAAgB,UAAA,IAAc,IAAA,YAAgB,oBAC1C,CAAC,GAAG,IAAI,CAAA,GACR,KAAA,CAAM,QAAQ,IAAI,CAAA,IAAK,KAAK,KAAA,CAAM,CAAC,UAAU,OAAO,KAAA,KAAU,QAAQ,CAAA,GACpE,IAAA,GACA,MAAA;AACR,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,MAAA;AACtD,EAAA,MAAM,gBAAA,GAAmB,MAAA,EAAQ,WAAA,EAAY,IAAK,EAAA;AAClD,EAAA,MAAM,aAAA,GAAgB,iBAAiB,UAAA,CAAW,GAAG,KAAK,CAAC,gBAAA,CAAiB,WAAW,IAAI,CAAA;AAC3F,EAAA,IAAI,MAAM,KAAA,CAAM,CAAC,UAAU,KAAA,KAAU,CAAC,GAAG,OAAO,OAAA;AAChD,EAAA,IAAI,eAAe,OAAO,gBAAA;AAI1B,EAAA,IAAI,iBAAiB,UAAA,CAAW,MAAM,KAAK,gBAAA,CAAiB,UAAA,CAAW,MAAM,CAAA,EAAG;AAC9E,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,GAAG,KAAA,KAAA,CAAW,KAAA,GAAQ,CAAA,IAAK,CAAA,KAAM,CAAC,CAAA;AAC9D,IAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,KAAA,CAAM,KAAA,CAAM,CAAC,KAAA,KAAU,KAAA,KAAU,CAAC,CAAA,EAAG,OAAO,aAAA;AAAA,EACtE;AACA,EAAA,OAAO,OAAA;AACT;AAIA,SAAS,iBAAA,CAAkB,aAA0B,KAAA,EAAmC;AACtF,EAAA,MAAM,KAAA,GAAQ,YAAY,KAAK,CAAA;AAC/B,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjE;AAEA,SAAS,sBAAsB,WAAA,EAAiE;AAC9F,EAAA,MAAM,QAAQ,WAAA,CAAY,UAAA;AAC1B,EAAA,IACE,CAAC,MAAM,OAAA,CAAQ,KAAK,KACpB,KAAA,CAAM,MAAA,KAAW,KACjB,KAAA,CAAM,IAAA,CAAK,CAAC,KAAA,KAAU,OAAO,UAAU,QAAA,IAAY,CAAC,OAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,IAAS,CAAC,CAAA;AAEzF,IAAA,OAAO,MAAA;AACT,EAAA,OAAO,CAAC,KAAA,CAAM,CAAC,CAAA,EAAa,KAAA,CAAM,CAAC,CAAW,CAAA;AAChD;AAEA,SAAS,wBACP,WAAA,EACsD;AACtD,EAAA,MAAM,QAAQ,WAAA,CAAY,YAAA;AAC1B,EAAA,OAAO,qBAAA,CAAsB,KAAK,CAAA,GAAI,KAAA,GAAQ,MAAA;AAChD;AAEO,SAAS,sBAAsB,KAAA,EAKjB;AACnB,EAAA,IAAI,CAACA,UAAS,KAAA,CAAM,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,SAAS,SAAA,EAAW;AAC5D,IAAA,OAAO,cAAA,CAAe,kCAAkC,kCAAA,EAAoC;AAAA,MAC1F,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,UAAA,EACEA,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,KAAS,QAAA,GACjD,KAAA,CAAM,KAAA,CAAM,IAAA,GACZ;AAAA,KACP,CAAA;AAAA,EACH;AACA,EAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,EAAA,MAAM,cAAc,KAAA,CAAM,UAAA;AAC1B,EAAA,MAAM,UAAA,GAAaA,SAAAA,CAAS,WAAW,CAAA,GAAI,cAAc,KAAA,CAAM,UAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAClB,cAAA,CAAe,KAAA,EAAO,KAAK,CAAA,IAAK,cAAA,CAAe,UAAA,IAAc,EAAC,EAAG,KAAK,CAAA;AACxE,EAAA,MAAM,gBAAgB,UAAA,CAAW,QAAQ,KAAK,KAAA,CAAM,MAAA,IAAU,WAAW,eAAe,CAAA;AACxF,EAAA,MAAM,WAAA,GAAc,WAAW,aAAa,CAAA;AAC5C,EAAA,MAAM,QAAA,GAAW,WAAW,UAAU,CAAA;AACtC,EAAA,MAAM,aAAA,GAAgB,WAAW,eAAe,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,WAAW,QAAQ,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,WAAW,YAAY,CAAA;AAC1C,EAAA,MAAM,MAAA,GAAS,WAAW,QAAQ,CAAA;AAClC,EAAA,MAAM,QAAQA,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,GAAI,MAAM,KAAA,GAAQ,MAAA;AACpD,EAAA,MAAM,MAAA,GAAS,UAAU,MAAA,IAAaA,SAAAA,CAAS,MAAM,MAAM,CAAA,GAAI,MAAM,MAAA,GAAS,MAAA;AAC9E,EAAA,MAAM,eAAA,GACJ,MAAA,KAAW,MAAA,GACP,CAAC,cAAA,CAAe,MAAA,EAAQ,OAAO,CAAA,EAAG,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAC,CAAA,GAClE,MAAA;AACN,EAAA,MAAM,kBAAkB,KAAA,CAAM,UAAA;AAC9B,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,eAAe,IAC5C,eAAA,GACA,eAAA,GAAkB,CAAC,CAAA,KAAM,MAAA,IAAa,eAAA,CAAgB,CAAC,CAAA,KAAM,MAAA,GAC3D,eAAA,GACA,CAAC,cAAA,CAAe,KAAA,EAAO,OAAO,CAAA,EAAG,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAC,CAAA;AACtE,EAAA,MAAM,eAAeA,SAAAA,CAAS,KAAA,CAAM,IAAI,CAAA,GAAI,MAAM,IAAA,GAAO,MAAA;AACzD,EAAA,MAAM,mBACJ,YAAA,EAAc,IAAA,KAAS,WAAW,cAAA,CAAe,YAAA,EAAc,YAAY,CAAA,GAAI,MAAA;AACjF,EAAA,IACE,YAAA,EAAc,IAAA,KAAS,QAAA,KACtB,gBAAA,KAAqB,MAAA,IAAa,CAAC,MAAA,CAAO,SAAA,CAAU,gBAAgB,CAAA,IAAK,gBAAA,IAAoB,CAAA,CAAA,EAC9F;AACA,IAAA,OAAO,cAAA,CAAe,oCAAoC,kCAAA,EAAoC;AAAA,MAC5F,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACA,EAAA,MAAM,QAAA,GACJ,gBAAA,CAAiB,KAAA,EAAO,eAAe,CAAA,IACvC,eAAe,KAAA,EAAO,UAAU,CAAA,IAChC,cAAA,CAAe,KAAA,EAAO,eAAe,KACrC,cAAA,CAAe,UAAA,IAAc,EAAC,EAAG,UAAU,CAAA,IAC3C,eAAe,UAAA,IAAc,EAAC,EAAG,eAAe,CAAA,IAChD,CAAA;AACF,EAAA,MAAM,YAAA,GACJ,WAAW,cAAc,CAAA,IAAK,gBAAgB,KAAA,CAAM,IAAA,EAAM,MAAM,CAAA,IAAK,MAAA;AACvE,EAAA,IACE,kBAAkB,MAAA,IAClB,WAAA,KAAgB,MAAA,IAChB,QAAA,KAAa,UACb,aAAA,KAAkB,MAAA,IAClB,MAAA,KAAW,MAAA,IACX,eAAe,MAAA,IACf,MAAA,KAAW,UACX,UAAA,CAAW,MAAA,KAAW,KACtB,UAAA,CAAW,IAAA;AAAA,IACT,CAAC,KAAA,KAAU,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA,IAAK,KAAA,IAAS;AAAA,GAC/E,IACA,CAAC,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,IAC1B,QAAA,IAAY,CAAA,IACZ,CAAC,qBAAA,CAAsB,YAAY,CAAA,EACnC;AACA,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,iDAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,MAAM,CAAC,KAAA,GAAQ,CAAA,EAAG,MAAA,GAAS,CAAC,CAAA,GAAI,UAAA;AAChC,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,aAAA;AAAA,MACA,WAAA;AAAA,MACA,UAAA,EAAY,CAAC,KAAA,EAAO,MAAM,CAAA;AAAA,MAC1B,MAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,MAAA;AAAA,MACA,aAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEA,eAAsB,qBAAA,CACpB,MACA,KAAA,EAMA;AACA,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA;AACnB,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,uCAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,gBAAA;AAAA,QACP,OAAO,KAAA,CAAM;AAAA;AACf,KACF;AACF,EAAA,MAAM,SAAS,MAAM,KAAA,CAAM,MAAA,CAAO,UAAA,CAAoC,KAAK,IAAI,CAAA;AAC/E,EAAA,IAAI,CAAC,MAAA,CAAO,EAAA;AACV,IAAA,OAAO,gBAAA;AAAA,MACL,iDAAA;AAAA,MACA,KAAA,CAAM,KAAA;AAAA,MACN,MAAA,CAAO;AAAA,KACT;AACF,EAAA,MAAM,YAAY,qBAAA,CAAsB;AAAA,IACtC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,GAAI,OAAO,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO;AAAA,IAC/D,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAC,GAAI,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA;AAAW,GAC5E,CAAA;AACD,EAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,MAAM,SAAA,GAAY,QAAA,EAAU,OAAA,EAAS,SAAA,IAAa,UAAU,SAAA,IAAa,CAAA;AACzE,EAAA,IACE,QAAA,EAAU,aAAA,KAAkB,IAAA,IAC5B,QAAA,CAAS,UAAA,KAAe,QACxB,SAAA,IAAa,CAAA,IACb,QAAA,CAAS,WAAA,KAAgB,MAAA,EACzB;AACA,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,uEAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,UAAA;AAAA,QACP,OAAO,KAAA,CAAM;AAAA;AACf,KACF;AAAA,EACF;AACA,EAAA,MAAM,cAAc,QAAA,CAAS,WAAA;AAC7B,EAAA,MAAM,oBAAA,GAAuB,wBAAwB,WAAW,CAAA;AAChE,EAAA,IAAI,yBAAyB,MAAA,EAAW;AACtC,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,iEAAA;AAAA,MACA,EAAE,KAAA,EAAO,sBAAA,EAAwB,KAAA,EAAO,MAAM,KAAA;AAAM,KACtD;AAAA,EACF;AACA,EAAA,IAAI,WAAA,CAAY,4BAA4B,IAAA,EAAM;AAChD,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,wEAAA;AAAA,MACA,EAAE,KAAA,EAAO,0BAAA,EAA4B,KAAA,EAAO,MAAM,KAAA;AAAM,KAC1D;AAAA,EACF;AACA,EAAA,MAAM,QAAA,GAA2C;AAAA,IAC/C,aAAA,EAAe,iBAAA,CAAkB,WAAA,EAAa,eAAe,CAAA,IAAK,EAAA;AAAA,IAClE,WAAA,EAAa,iBAAA,CAAkB,WAAA,EAAa,aAAa,CAAA,IAAK,EAAA;AAAA,IAC9D,YAAY,qBAAA,CAAsB,WAAW,CAAA,IAAK,CAAC,GAAG,CAAC,CAAA;AAAA,IACvD,MAAA,EAAQ,iBAAA,CAAkB,WAAA,EAAa,QAAQ,CAAA,IAAK,EAAA;AAAA,IACpD,UAAA,EAAY,iBAAA,CAAkB,WAAA,EAAa,YAAY,CAAA,IAAK,EAAA;AAAA,IAC5D,UAAU,OAAO,WAAA,CAAY,QAAA,KAAa,QAAA,GAAW,YAAY,QAAA,GAAW,CAAA;AAAA,IAC5E,QAAA,EAAU,iBAAA,CAAkB,WAAA,EAAa,UAAU,CAAA,IAAK,EAAA;AAAA,IACxD,MAAA,EAAQ,iBAAA,CAAkB,WAAA,EAAa,QAAQ,CAAA,IAAK,EAAA;AAAA,IACpD,aAAA,EAAe,iBAAA,CAAkB,WAAA,EAAa,eAAe,CAAA,IAAK,EAAA;AAAA,IAClE,eAAA,EAAiB,QAAA,CAAS,aAAA,IAAiB,QAAA,CAAS,UAAA;AAAA,IACpD,SAAA;AAAA,IACA,gBAAgB,QAAA,CAAS,cAAA;AAAA,IACzB,YAAA,EAAc;AAAA,GAChB;AACA,EAAA,MAAM,SAAS,qBAAA,CAAsB,EAAE,WAAW,SAAA,CAAU,KAAA,EAAO,UAAU,CAAA;AAC7E,EAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,0EAAA;AAAA,MACA,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,MAAM,KAAA,EAAO,GAAG,OAAO,MAAA;AAAO,KAC1D;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,EAAE,IAAA,EAAM,SAAA,EAAoB,IAAA,EAAM,KAAK,IAAA,EAAM,MAAA,EAAQ,SAAA,CAAU,KAAA,CAAM,aAAA,EAAc;AAAA,MAC5F,YAAA,EAAc,sBAAsB,SAAS,CAAA;AAAA,MAC7C,MAAA,EAAQ,6BAA6B,SAAS,CAAA;AAAA,MAC9C,MAAM,EAAE,UAAA,EAAY,gBAAgB,MAAA,EAAQ,YAAA,EAAc,OAAO,eAAA,EAAgB;AAAA,MACjF,OAAA,EAAS,EAAE,MAAA,EAAQ,SAAA,CAAU,MAAM,MAAA,EAAQ,MAAA,EAAQ,SAAA,CAAU,KAAA,CAAM,aAAA,EAAc;AAAA,MACjF,MAAA;AAAA,MACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,KACjC;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,GACjC;AACF;;;AClRA,IAAM,wBAAA,GAA8D;AAAA,EAClE,MAAM,KAAA,EAAO;AACX,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA;AACrC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,2CAAA,EAA4C;AACzE,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAI,QAAQ,OAAA,EAAS,IAAA,KAAS,kBAAkB,OAAO,OAAA,CAAQ,QAAQ,IAAA,KAAS,QAAA;AAC9E,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,iCAAA,EAAkC;AAC/D,IAAA,IACE,OAAA,CAAQ,QAAA,KAAa,MAAA,IACrB,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,IAC/C,OAAO,OAAA,CAAQ,SAAS,MAAA,KAAW,QAAA;AAEnC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gCAAA,EAAiC;AAC9D,IAAA,IACE,OAAA,KAAY,MAAA,IACZ,OAAA,CAAQ,IAAA,KAAS,OAAA,CAAQ,OAAA,CAAQ,IAAA,IACjC,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,KAAK,CAAA,IACnC,OAAA,CAAQ,KAAA,GAAQ,CAAA,IAChB,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA,IACpC,OAAA,CAAQ,MAAA,GAAS,CAAA,IACjB,OAAA,CAAQ,MAAA,CAAO,MAAA,KAAW,CAAA,IAC1B,CAAC,CAAC,QAAA,EAAU,MAAA,EAAQ,KAAK,CAAA,CAAE,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA,IACtD,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,SAAS,CAAA,IACvC,OAAA,CAAQ,SAAA,GAAY,CAAA,IACpB,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,QAAQ,CAAA,IACtC,OAAA,CAAQ,QAAA,GAAW,CAAA,IACnB,OAAA,CAAQ,QAAA,GAAW,CAAA;AAEnB,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,KAAA,EAAO;AAAA,OACT;AACF,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,OAAA,EAAiC;AAAA,EAC7D,CAAA;AAAA,EACA,QAAA,EACE;AACJ,CAAA;AAEA,IAAM,0BAAA,GAAkD;AAAA,EACtD,OAAO,CAAC,KAAA,MAAW,EAAE,EAAA,EAAI,MAAM,KAAA,EAAM,CAAA;AAAA,EACrC,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,wBAAA,GAA2B;AAAA,EACtC,EAAA,EAAI,iBAAA;AAAA,EACJ,KAAA,EAAO,uBAAA;AAAA,EACP,OAAA,EAAS,6EAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,UAAA,EAAY,wBAAA;AAAA,EACZ,YAAA,EAAc,0BAAA;AAAA,EACd,QAAA,EAAU,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB,CAAA;AAAA,EAC/C,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,EAAE,IAAA,EAAM,cAAA,EAAgB,MAAM,WAAA,EAAY;AAAA,IACnD,QAAA,EAAU,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,IAC7C,gBAAA,EAAkB,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB;AAAA;AAE3D;AAEA,SAAS,qBACP,OAAA,EACoD;AACpD,EAAA,OAAO,OAAA,CAAQ,QAAQ,yBAAA,CAA0B,OAAA,CAAQ,SAAS,OAAA,CAAQ,QAAA,EAAU,SAAS,CAAC,CAAA;AAChG;AAEO,SAAS,iCACd,MAAA,GAA2E,OAAO,OAAA,KAChF,oBAAA,CAAqB,OAAO,CAAA,EACoB;AAClD,EAAA,OAAOM,UAAAA,CAAW,wBAAA,EAA0B,OAAO,OAAA,EAAS,OAAA,KAAY;AACtE,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,MAAA;AACvB,IAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,MAAA;AAC5B,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,IACE,MAAA,CAAO,gBAAgB,OAAA,CAAQ,OAAA,CAAQ,QACvC,MAAA,CAAO,KAAA,KAAU,QAAQ,KAAA,IACzB,MAAA,CAAO,WAAW,OAAA,CAAQ,MAAA,IAC1B,OAAO,MAAA,KAAW,OAAA,CAAQ,UAC1B,MAAA,CAAO,UAAA,KAAe,QAAQ,UAAA,IAC9B,MAAA,CAAO,UAAU,OAAA,CAAQ,KAAA,IACzB,OAAO,SAAA,KAAc,OAAA,CAAQ,aAC7B,MAAA,CAAO,QAAA,KAAa,QAAQ,QAAA,IAC5B,MAAA,CAAO,gBAAgB,OAAA,CAAQ,KAAA,GAAQ,QAAQ,MAAA,IAC/C,MAAA,CAAO,iBAAiB,CAAA,IACxB,MAAA,CAAO,yBAAyB,CAAA,EAChC;AACA,MAAA,OAAO,aAAA;AAAA,QACL,2BAAA;AAAA,QACA,4EAAA;AAAA,QACA,8EAAA;AAAA,QACA;AAAA,UACE,WAAA,EAAa,QAAQ,OAAA,CAAQ,IAAA;AAAA,UAC7B,mBAAmB,MAAA,CAAO,WAAA;AAAA,UAC1B,gBAAgB,OAAA,CAAQ,MAAA;AAAA,UACxB,cAAc,MAAA,CAAO,MAAA;AAAA,UACrB,oBAAoB,OAAA,CAAQ,UAAA;AAAA,UAC5B,kBAAkB,MAAA,CAAO,UAAA;AAAA,UACzB,mBAAA,EAAqB,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,MAAA;AAAA,UAC7C,mBAAmB,MAAA,CAAO;AAAA;AAC5B,OACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,UAAU,KAAA,EAAM;AAAA,EAC5C,CAAC,CAAA;AACH;AAEO,IAAM,iBAAiBA,UAAAA,CAAW,iBAAA,CAAkB,SAAS,CAAA,EAAG,CAAC,MAAM,OAAA,KAAY;AACxF,EAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,qBAAqB,CAAA;AAClD,EAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,IAAA;AACrB,EAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA,IAAY,OAAO,UAAA,KACnC,qBAAA,CAAsB,IAAA,EAAM;AAAA,MAC1B,GAAI,WAAW,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAO;AAAA,MACvE,GAAI,WAAW,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,UAAA,CAAW,QAAA,EAAS;AAAA,MAC7E,OAAO,UAAA,CAAW,KAAA;AAAA,MAClB,GAAI,WAAW,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,UAAA,CAAW,SAAA;AAAU,KACjF;AAAA,GACH;AACF,CAAC,CAAA;AACmC,mBAAA,CAAoB,SAAA,EAAW,cAAc;;;ACzJjF,SAASN,UAAS,KAAA,EAAkD;AAClE,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,IAAA;AAChD;AAEA,SAASQ,gBAAe,KAAA,EAAoC;AAC1D,EAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,IAAI,KAAA,GAAQ,MAAA;AACjE;AAEA,SAAS,YAAA,CAAa,OAAgB,MAAA,EAAsC;AAC1E,EAAA,IACE,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,IACpB,KAAA,CAAM,WAAW,MAAA,IACjB,KAAA,CAAM,KAAK,CAAC,KAAA,KAAU,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAC,CAAA;AAE1E,IAAA,OAAO,MAAA;AACT,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,eACP,QAAA,EACuE;AACvE,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA,QAAA;AACX,EAAA,IAAI,IAAA,GAAO,CAAA,QAAA;AACX,EAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,IAAA,MAAM,SAAS,OAAA,CAAQ,MAAA;AACvB,IAAA,IAAI,CAACR,UAAS,MAAM,CAAA,IAAK,OAAO,MAAA,CAAO,IAAA,KAAS,UAAU,OAAO,MAAA;AACjE,IAAA,IAAI,MAAA,CAAO,SAAS,QAAA,EAAU;AAC5B,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,CAAO,MAAA,EAAQ,CAAC,CAAA;AAC5C,MAAA,MAAM,SAAS,MAAA,CAAO,MAAA;AACtB,MAAA,IACE,MAAA,KAAW,MAAA,IACX,OAAO,MAAA,KAAW,QAAA,IAClB,CAAC,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA,IACvB,MAAA,GAAS,CAAA;AAET,QAAA,OAAO,MAAA;AACT,MAAA,MAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,MAAA;AAClB,MAAA,IAAI,MAAM,MAAA,IAAa,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,QAAW,OAAO,MAAA;AAClE,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,CAAA;AAChC,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,CAAA;AAChC,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,CAAA;AAChC,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,CAAA;AAChC,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,CAAA;AAChC,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,CAAA,GAAI,MAAM,CAAA;AAChC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,CAAO,SAAS,MAAA,EAAQ;AAC1B,MAAA,MAAM,GAAA,GAAM,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA;AACtC,MAAA,MAAM,GAAA,GAAM,YAAA,CAAa,MAAA,CAAO,GAAA,EAAK,CAAC,CAAA;AACtC,MAAA,IACE,GAAA,KAAQ,MAAA,IACR,GAAA,KAAQ,MAAA,IACR,GAAA,CAAI,IAAA,CAAK,CAAC,KAAA,EAAO,KAAA,KAAU,KAAA,IAAS,GAAA,CAAI,KAAK,KAAK,KAAA,CAAM,CAAA;AAExD,QAAA,OAAO,MAAA;AACT,MAAA,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,GAAI,GAAA;AACxB,MAAA,MAAM,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,GAAI,GAAA;AACxB,MAAA,IACE,GAAA,KAAQ,MAAA,IACR,GAAA,KAAQ,MAAA,IACR,GAAA,KAAQ,UACR,GAAA,KAAQ,MAAA,IACR,GAAA,KAAQ,MAAA,IACR,GAAA,KAAQ,MAAA;AAER,QAAA,OAAO,MAAA;AACT,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AACzB,MAAA;AAAA,IACF;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,CAAE,KAAA,CAAM,MAAA,CAAO,QAAQ,GAAG,OAAO,MAAA;AACzE,EAAA,OAAO,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAI,CAAA;AAC5C;AAEA,SAAS,WAAW,KAAA,EAAoC;AACtD,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,KAAK,CAAA;AACpC,EAAA,OAAO,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,CAAQ,MAAA,GAAS,IAAI,OAAA,GAAU,MAAA;AACvE;AAEO,SAAS,kBAAkB,KAAA,EAKb;AACnB,EAAA,IAAI,CAACA,UAAS,KAAA,CAAM,KAAK,KAAK,KAAA,CAAM,KAAA,CAAM,SAAS,iBAAA,EAAmB;AACpE,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,iDAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,UAAA,EACEA,SAAAA,CAAS,KAAA,CAAM,KAAK,CAAA,IAAK,OAAO,KAAA,CAAM,KAAA,CAAM,IAAA,KAAS,QAAA,GACjD,KAAA,CAAM,KAAA,CAAM,IAAA,GACZ;AAAA;AACR,KACF;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,KAAA,CAAM,aAAA,KAAkB,CAAA,EAAG;AACnC,IAAA,OAAO,cAAA,CAAe,oCAAoC,iCAAA,EAAmC;AAAA,MAC3F,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACA,EAAA,MAAM,OAAA,GAAU,MAAM,KAAA,CAAM,OAAA;AAC5B,EAAA,MAAM,kBAAA,GAAqBQ,eAAAA,CAAe,KAAA,CAAM,KAAA,CAAM,kBAAkB,CAAA;AACxE,EAAA,IAAI,CAACR,SAAAA,CAAS,OAAO,CAAA,IAAK,OAAA,CAAQ,WAAW,uBAAA,EAAyB;AACpE,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,wCAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,IACE,uBAAuB,MAAA,IACvBQ,eAAAA,CAAe,OAAA,CAAQ,WAAW,MAAM,kBAAA,EACxC;AACA,IAAA,OAAO,cAAA,CAAe,oCAAoC,+BAAA,EAAiC;AAAA,MACzF,KAAA,EAAO,SAAA;AAAA,MACP,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACA,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,OAAA,CAAQ,QAAQ,CAAA,GAAI,OAAA,CAAQ,WAAW,EAAC;AAC1E,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,MAAA,CAAOR,SAAQ,CAAA;AAC5C,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,KAAA,CAAM,QAAQ,CAAA,GAClD,KAAA,CAAM,KAAA,CAAM,QAAA,CAAS,MAAA,CAAOA,SAAQ,IACpC,EAAC;AACL,EAAA,IACE,QAAA,CAAS,MAAA,KAAW,CAAA,IACpB,QAAA,CAAS,MAAA,KAAW,YAAY,MAAA,IAChC,WAAA,CAAY,MAAA,KAAW,QAAA,CAAS,MAAA,EAChC;AACA,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,wEAAA;AAAA,MACA,EAAE,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,CAAM,IAAA,EAAM,OAAO,UAAA;AAAW,KAC1D;AAAA,EACF;AACA,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,OAAO,CAAA,IAAK,QAAA,CAAS,SAAQ,EAAG;AACjD,IAAA,MAAM,EAAA,GAAKQ,eAAAA,CAAe,OAAA,CAAQ,EAAE,CAAA;AACpC,IAAA,MAAM,MAAA,GAASA,eAAAA,CAAe,OAAA,CAAQ,MAAM,CAAA;AAC5C,IAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,IAAA,IACE,EAAA,KAAO,UACP,MAAA,KAAW,MAAA,IACX,OAAO,QAAA,KAAa,QAAA,IACpB,CAAC,MAAA,CAAO,aAAA,CAAc,QAAQ,CAAA,IAC9B,QAAA,IAAY,KACZ,CAACR,SAAAA,CAAS,OAAO,CAAA,IACjB,OAAA,CAAQ,QAAA,KAAa,KAAA,IACrB,CAACA,SAAAA,CAAS,QAAQ,QAAQ,CAAA,IAC1B,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,IACxB,CAACA,UAAS,WAAA,CAAY,KAAK,CAAC,CAAA,IAC5B,WAAA,CAAY,KAAK,CAAA,CAAE,EAAA,KAAO,MAC1B,WAAA,CAAY,KAAK,CAAA,CAAE,QAAA,KAAa,QAAA,EAChC;AACA,MAAA,OAAO,cAAA;AAAA,QACL,kCAAA;AAAA,QACA,iEAAA;AAAA,QACA,EAAE,OAAO,SAAA,EAAW,IAAA,EAAM,MAAM,IAAA,EAAM,KAAA,EAAO,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA,CAAA;AAAI,OACpE;AAAA,IACF;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,eAAe,QAAQ,CAAA;AACtC,EAAA,IAAI,WAAW,MAAA,EAAW;AACxB,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,oCAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,SAAA;AAAA,QACP,MAAM,KAAA,CAAM,IAAA;AAAA,QACZ,KAAA,EAAO;AAAA;AACT,KACF;AAAA,EACF;AACA,EAAA,MAAM,aAAA,GAAgB,UAAA;AAAA,IACpB,QAAA,CAAS,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,MAAA,EAAQ,QAAA,EAAS,MAAO,EAAE,EAAA,EAAI,MAAA,EAAQ,QAAA,EAAS,CAAE;AAAA,GACvE;AACA,EAAA,MAAM,YAAA,GAAe,UAAA,CAAW,QAAA,CAAS,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,QAAA,EAAS,MAAO,EAAE,EAAA,EAAI,QAAA,GAAW,CAAC,CAAA;AACtF,EAAA,MAAM,YAAA,GAAe,UAAA;AAAA,IACnB,QAAA,CAAS,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,MAAA,EAAQ,aAAA,EAAc,MAAO,EAAE,EAAA,EAAI,MAAA,EAAQ,aAAA,EAAc,CAAE;AAAA,GACjF;AACA,EAAA,MAAM,cAAA,GAAiB,UAAA;AAAA,IACrB,SAAS,GAAA,CAAI,CAAC,EAAE,EAAA,EAAI,WAAU,MAAO;AAAA,MACnC,EAAA;AAAA,MACA,WAAY,SAAA,CAAiC,MAAA,CAAOA,SAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,QAAA,MAAc;AAAA,QAC/E,MAAM,QAAA,CAAS,IAAA;AAAA,QACf,OAAA,EAAS,SAAS,OAAA,IAAW;AAAA,OAC/B,CAAE;AAAA,KACJ,CAAE;AAAA,GACJ;AACA,EAAA,IACE,kBAAkB,MAAA,IAClB,YAAA,KAAiB,UACjB,YAAA,KAAiB,MAAA,IACjB,mBAAmB,MAAA,EACnB;AACA,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,wFAAA;AAAA,MACA,EAAE,KAAA,EAAO,SAAA,EAAW,MAAM,KAAA,CAAM,IAAA,EAAM,OAAO,kBAAA;AAAmB,KAClE;AAAA,EACF;AACA,EAAA,MAAM,UAAA,GAAaA,UAAS,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA,GAAI,KAAA,CAAM,KAAA,CAAM,UAAA,GAAa,KAAA,CAAM,UAAA;AACrF,EAAA,MAAM,aAAA,GACJQ,eAAAA,CAAe,KAAA,CAAM,KAAA,CAAM,MAAM,CAAA,IACjCA,eAAAA,CAAe,KAAA,CAAM,MAAM,CAAA,IAC3BA,eAAAA,CAAe,UAAA,EAAY,aAAa,CAAA,IACxC,kBAAA;AACF,EAAA,MAAM,kBAAA,GAAqBA,eAAAA,CAAe,UAAA,EAAY,kBAAkB,CAAA;AACxE,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,aAAA,EAAe,kBAAA;AAAA,MACf,cAAA;AAAA,MACA,GAAI,kBAAA,KAAuB,MAAA,GAAY,EAAC,GAAI,EAAE,kBAAA,EAAmB;AAAA,MACjE,cAAA,EAAgB;AAAA;AAClB,GACF;AACF;AAEA,eAAsB,iBAAA,CACpB,MACA,KAAA,EAMA;AACA,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA;AACnB,IAAA,OAAO,cAAA;AAAA,MACL,kCAAA;AAAA,MACA,uCAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,gBAAA;AAAA,QACP,OAAO,KAAA,CAAM;AAAA;AACf,KACF;AACF,EAAA,MAAM,SAAS,MAAM,KAAA,CAAM,MAAA,CAAO,UAAA,CAAoC,KAAK,IAAI,CAAA;AAC/E,EAAA,IAAI,CAAC,MAAA,CAAO,EAAA;AACV,IAAA,OAAO,gBAAA;AAAA,MACL,6CAAA;AAAA,MACA,KAAA,CAAM,KAAA;AAAA,MACN,MAAA,CAAO;AAAA,KACT;AACF,EAAA,MAAM,YAAY,iBAAA,CAAkB;AAAA,IAClC,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,OAAO,MAAA,CAAO,KAAA;AAAA,IACd,GAAI,OAAO,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAO;AAAA,IAC/D,GAAI,OAAO,UAAA,KAAe,MAAA,GAAY,EAAC,GAAI,EAAE,UAAA,EAAY,MAAA,CAAO,UAAA;AAAW,GAC5E,CAAA;AACD,EAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,MAAM,OAAA,GAAU,MAAM,QAAA,EAAU,GAAA;AAChC,EAAA,IACE,QAAA,EAAU,aAAA,KAAkB,IAAA,IAC5B,QAAA,CAAS,UAAA,KAAe,QACxB,OAAA,KAAY,MAAA,IACZ,QAAA,CAAS,WAAA,KAAgB,MAAA,EACzB;AACA,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,iDAAA;AAAA,MACA;AAAA,QACE,KAAA,EAAO,UAAA;AAAA,QACP,OAAO,KAAA,CAAM;AAAA;AACf,KACF;AAAA,EACF;AACA,EAAA,MAAM,cAAc,QAAA,CAAS,WAAA;AAC7B,EAAA,MAAM,cAAA,GAAiB,CAAC,KAAA,KACtB,OAAO,WAAA,CAAY,KAAK,CAAA,KAAM,QAAA,GAAY,WAAA,CAAY,KAAK,CAAA,GAAe,EAAA;AAC5E,EAAA,MAAMC,kBAAiB,WAAA,CAAY,cAAA;AACnC,EAAA,MAAM,OAAO,WAAA,CAAY,IAAA;AACzB,EAAA,MAAM,aAAa,WAAA,CAAY,UAAA;AAC/B,EAAA,MAAM,iBAAiB,WAAA,CAAY,cAAA;AACnC,EAAA,IACE,CAAC,MAAM,OAAA,CAAQA,eAAc,KAC7BA,eAAAA,CAAe,MAAA,KAAW,CAAA,IAC1BA,eAAAA,CAAe,IAAA,CAAK,CAAC,UAAU,OAAO,KAAA,KAAU,YAAY,CAAC,MAAA,CAAO,SAAS,KAAK,CAAC,CAAA,IACnF,OAAO,IAAA,KAAS,QAAA,IAChB,OAAO,UAAA,KAAe,QAAA,IACtB,OAAO,cAAA,KAAmB,QAAA,IAC1B,CAAC,MAAA,CAAO,SAAA,CAAU,cAAc,CAAA,IAChC,cAAA,IAAkB,CAAA,IAClB,CAAC,MAAA,CAAO,QAAA,CAAS,IAAI,CAAA,IACrB,CAAC,OAAO,QAAA,CAAS,UAAU,CAAA,IAC3B,UAAA,IAAc,CAAA,EACd;AACA,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,0EAAA;AAAA,MACA,EAAE,KAAA,EAAO,sBAAA,EAAwB,KAAA,EAAO,MAAM,KAAA;AAAM,KACtD;AAAA,EACF;AACA,EAAA,MAAM,QAAA,GAAuC;AAAA,IAC3C,GAAG,SAAA,CAAU,KAAA;AAAA,IACb,aAAA,EAAe,eAAe,eAAe,CAAA;AAAA,IAC7C,kBAAA,EAAoB,eAAe,oBAAoB,CAAA;AAAA,IACvD,aAAA,EAAe,eAAe,eAAe,CAAA;AAAA,IAC7C,YAAA,EAAc,eAAe,cAAc,CAAA;AAAA,IAC3C,YAAA,EAAc,eAAe,cAAc,CAAA;AAAA,IAC3C,aAAA,EAAe,eAAe,eAAe,CAAA;AAAA,IAC7C,cAAA,EAAgB,eAAe,gBAAgB,CAAA;AAAA,IAC/C,GAAI,cAAA,CAAe,oBAAoB,CAAA,KAAM,EAAA,GACzC,EAAC,GACD,EAAE,kBAAA,EAAoB,cAAA,CAAe,oBAAoB,CAAA,EAAE;AAAA,IAC/D,cAAA,EAAgBA,eAAAA;AAAA,IAQhB,IAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA,EAAiB,QAAA,CAAS,aAAA,IAAiB,QAAA,CAAS,UAAA;AAAA,IACpD,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,eAAe,OAAA,CAAQ,aAAA;AAAA,IACvB,gBAAgB,OAAA,CAAQ,cAAA;AAAA,IACxB,gBAAgB,QAAA,CAAS;AAAA,GAC3B;AACA,EAAA,MAAM,SAAS,iBAAA,CAAkB,EAAE,WAAW,SAAA,CAAU,KAAA,EAAO,UAAU,CAAA;AACzE,EAAA,IAAI,MAAA,CAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO,cAAA;AAAA,MACL,gCAAA;AAAA,MACA,0EAAA;AAAA,MACA,EAAE,OAAO,QAAA,EAAU,KAAA,EAAO,MAAM,KAAA,EAAO,GAAG,OAAO,MAAA;AAAO,KAC1D;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,IAAA;AAAA,IACJ,KAAA,EAAO;AAAA,MACL,OAAA,EAAS,EAAE,IAAA,EAAM,KAAA,EAAgB,IAAA,EAAM,KAAK,IAAA,EAAM,MAAA,EAAQ,SAAA,CAAU,KAAA,CAAM,aAAA,EAAc;AAAA,MACxF,YAAA,EAAc,sBAAsB,KAAK,CAAA;AAAA,MACzC,MAAA,EAAQ,6BAA6B,KAAK,CAAA;AAAA,MAC1C,cAAA,EAAgB,UAAU,KAAA,CAAM,cAAA;AAAA,MAChC,QAAA,EAAU;AAAA,QACR,IAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA,EAAQ;AAAA,OACV;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,KACjC;AAAA,IACA,SAAA,EAAW,KAAA,CAAM,SAAA,IAAa;AAAC,GACjC;AACF;;;AC1VA,IAAM,oBAAA,GAAsD;AAAA,EAC1D,MAAM,KAAA,EAAO;AACX,IAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA;AACrC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,uCAAA,EAAwC;AACrE,IAAA,MAAM,OAAA,GAAU,KAAA;AAChB,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAC3B,IAAA,IAAI,QAAQ,OAAA,EAAS,IAAA,KAAS,yBAAyB,OAAO,OAAA,CAAQ,QAAQ,IAAA,KAAS,QAAA;AACrF,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,wCAAA,EAAyC;AACtE,IAAA,IACE,OAAA,CAAQ,QAAA,KAAa,MAAA,IACrB,CAAC,MAAA,CAAO,aAAA,CAAc,OAAA,CAAQ,QAAA,CAAS,QAAQ,CAAA,IAC/C,OAAO,OAAA,CAAQ,SAAS,MAAA,KAAW,QAAA;AAEnC,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,gCAAA,EAAiC;AAC9D,IAAA,IACE,YAAY,MAAA,IACZ,OAAA,CAAQ,IAAA,KAAS,OAAA,CAAQ,QAAQ,IAAA,IACjC,OAAA,CAAQ,YAAA,CAAa,MAAA,KAAW,KAChC,UAAA,KAAe,MAAA,IACf,CAAC,MAAA,CAAO,aAAA,CAAc,WAAW,IAAI,CAAA,IACrC,UAAA,CAAW,YAAA,IAAgB,KAC3B,CAAC,MAAA,CAAO,QAAA,CAAS,UAAA,CAAW,YAAY,CAAA,IACxC,CAAC,MAAA,CAAO,aAAA,CAAc,WAAW,MAAM,CAAA,IACvC,WAAW,MAAA,GAAS,CAAA,IACpB,WAAW,MAAA,GAAS,GAAA;AAEpB,MAAA,OAAO,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,4DAAA,EAA6D;AAC1F,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,OAAA,EAA6B;AAAA,EACzD,CAAA;AAAA,EACA,QAAA,EACE;AACJ,CAAA;AAEA,IAAM,sBAAA,GAA8C;AAAA,EAClD,OAAO,CAAC,KAAA,MAAW,EAAE,EAAA,EAAI,MAAM,KAAA,EAAM,CAAA;AAAA,EACrC,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,oBAAA,GAAuB;AAAA,EAClC,EAAA,EAAI,aAAA;AAAA,EACJ,KAAA,EAAO,+BAAA;AAAA,EACP,OAAA,EAAS,mFAAA;AAAA,EACT,KAAA,EAAO,QAAA;AAAA,EACP,UAAA,EAAY,oBAAA;AAAA,EACZ,YAAA,EAAc,sBAAA;AAAA,EACd,QAAA,EAAU,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB,CAAA;AAAA,EAC/C,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,QAAA;AAAA,IACP,OAAA,EAAS,EAAE,IAAA,EAAM,qBAAA,EAAuB,MAAM,WAAA,EAAY;AAAA,IAC1D,QAAA,EAAU,EAAE,QAAA,EAAU,CAAA,EAAG,QAAQ,WAAA,EAAY;AAAA,IAC7C,gBAAA,EAAkB,CAAC,UAAA,EAAY,KAAA,EAAO,iBAAiB;AAAA;AAE3D;AAEO,SAAS,uBAAuB,OAAA,EAAoC;AACzE,EAAA,OAAO,CAAA,WAAA,EAAc,OAAA,CAAQ,OAAA,CAAQ,YAAY,IAAI,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,CAAA,EAAI,QAAQ,UAAA,CAAW,YAAY,CAAA,CAAA,EAAI,OAAA,CAAQ,WAAW,MAAM,CAAA,CAAA;AAC9I;AAEA,SAAS,iBACP,OAAA,EACgD;AAChD,EAAA,OAAO,OAAA,CAAQ,QAAQ,yBAAA,CAA0B,OAAA,CAAQ,SAAS,OAAA,CAAQ,QAAA,EAAU,KAAK,CAAC,CAAA;AAC5F;AAEO,SAAS,6BACd,MAAA,GAAmE,OAAO,OAAA,KACxE,gBAAA,CAAiB,OAAO,CAAA,EACoB;AAC9C,EAAA,OAAOH,UAAAA,CAAW,oBAAA,EAAsB,OAAO,OAAA,EAAS,OAAA,KAAY;AAClE,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,EAAS,OAAO,CAAA;AAC5C,IAAA,IAAI,CAAC,MAAA,CAAO,EAAA,EAAI,OAAO,MAAA;AACvB,IAAA,MAAM,MAAA,GAAS,OAAO,KAAA,CAAM,MAAA;AAC5B,IAAA,MAAM,cAAA,GAAiB,uBAAuB,OAAO,CAAA;AACrD,IAAA,IACE,OAAO,WAAA,KAAgB,OAAA,CAAQ,OAAA,CAAQ,IAAA,IACvC,OAAO,IAAA,KAAS,OAAA,CAAQ,UAAA,CAAW,IAAA,IACnC,OAAO,YAAA,KAAiB,OAAA,CAAQ,WAAW,YAAA,IAC3C,MAAA,CAAO,WAAW,OAAA,CAAQ,UAAA,CAAW,MAAA,IACrC,MAAA,CAAO,iBAAiB,OAAA,CAAQ,UAAA,CAAW,UAC3C,MAAA,CAAO,SAAA,KAAc,QAAQ,UAAA,CAAW,MAAA,IACxC,MAAA,CAAO,mBAAA,CAAoB,WAAW,CAAA,IACtC,MAAA,CAAO,wBAAwB,cAAA,IAC/B,MAAA,CAAO,yBAAyB,CAAA,EAChC;AACA,MAAA,OAAO,aAAA;AAAA,QACL,2BAAA;AAAA,QACA,6FAAA;AAAA,QACA,wEAAA;AAAA,QACA;AAAA,UACE,WAAA,EAAa,QAAQ,OAAA,CAAQ,IAAA;AAAA,UAC7B,mBAAmB,MAAA,CAAO,WAAA;AAAA,UAC1B,cAAA;AAAA,UACA,cAAc,MAAA,CAAO,mBAAA;AAAA,UACrB,cAAc,MAAA,CAAO,YAAA;AAAA,UACrB,WAAW,MAAA,CAAO;AAAA;AACpB,OACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,mBAAA,CAAoB,MAAA,CAAO,KAAA,EAAO,OAAO,CAAA;AAC3D,IAAA,IAAI,CAAC,SAAA,CAAU,EAAA,EAAI,OAAO,SAAA;AAC1B,IAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,KAAA,EAAO,UAAU,KAAA,EAAM;AAAA,EAC5C,CAAC,CAAA;AACH;AAEO,IAAM,UAAA,GAAaA,UAAAA;AAAA,EAAW,kBAAkB,KAAK,CAAA;AAAA,EAAG,CAAC,IAAA,EAAM,OAAA,KAAA,CACnE,YAAY;AACX,IAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,OAAA,CAAQ,qBAAqB,CAAA;AAClD,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,EAAI,OAAO,IAAA;AACrB,IAAA,OAAO,KAAK,KAAA,CAAM,WAAA;AAAA,MAAY,OAAO,UAAA,KACnC,iBAAA,CAAkB,IAAA,EAAM;AAAA,QACtB,GAAI,WAAW,MAAA,KAAW,MAAA,GAAY,EAAC,GAAI,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAO;AAAA,QACvE,GAAI,WAAW,QAAA,KAAa,MAAA,GAAY,EAAC,GAAI,EAAE,QAAA,EAAU,UAAA,CAAW,QAAA,EAAS;AAAA,QAC7E,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,GAAI,WAAW,SAAA,KAAc,MAAA,GAAY,EAAC,GAAI,EAAE,SAAA,EAAW,UAAA,CAAW,SAAA;AAAU,OACjF;AAAA,KACH;AAAA,EACF,CAAA;AACF,CAAA;AACgC,mBAAA,CAAoB,KAAA,EAAO,UAAU;;;ACpI9D,SAAS,eAAA,CAAgB,WAAA,EAAqB,QAAA,GAAW,CAAA,EAAoB;AAClF,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,IAAK,CAAC,OAAO,aAAA,CAAc,QAAQ,CAAA,IAAK,QAAA,GAAW,CAAA,EAAG;AAC/E,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,EAAE,QAAA,EAAU,MAAA,EAAQ,oBAAoB,WAAW,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,EAAG;AAC3E;AAEO,SAAS,0BAAA,CACd,MACA,OAAA,EAC6B;AAC7B,EAAA,IAAI,OAAA,CAAQ,SAAS,UAAA,IAAc,OAAA,CAAQ,WAAW,MAAA,IAAa,OAAA,CAAQ,OAAO,MAAA,KAAW,CAAA;AAC3F,IAAA,OAAO,MAAA;AACT,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,OAAA;AACnC,EAAA,IAAI,CAAC,SAAS,MAAA,IAAU,OAAA,CAAQ,eAAe,MAAA,IAAa,OAAA,CAAQ,WAAW,MAAA,KAAW,CAAA;AACxF,IAAA,OAAO,MAAA;AACT,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,aAAA,EAAe,CAAA,iBAAA,EAAoB,OAAA,CAAQ,MAAM,CAAA,CAAA;AAAA,IACjD,UAAU,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAC,SAAA,KAAc,UAAU,IAAI;AAAA,GAChE;AACF;AAEO,SAAS,sBAAA,CAAuB,MAAc,OAAA,EAA6C;AAChG,EAAA,IACE,OAAA,CAAQ,IAAA,KAAS,MAAA,IACjB,OAAA,CAAQ,QAAA,CAAS,MAAA,KAAW,CAAA,IAC5B,CAAC,OAAA,CAAQ,IAAA,IACT,OAAA,CAAQ,IAAA,CAAK,MAAA,KAAW,CAAA;AAExB,IAAA,OAAO,MAAA;AACT,EAAA,MAAM,UAAU,OAAA,CAAQ,OAAA,EAAS,MAAA,IAAU,OAAA,CAAQ,SAAS,MAAA,GAAS,CAAA;AACrE,EAAA,MAAM,CAAC,MAAM,IAAA,EAAM,IAAA,EAAM,MAAM,IAAA,EAAM,IAAI,IAAI,OAAA,CAAQ,IAAA;AACrD,EAAA,IACE,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,UACT,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,MAAA,IACT,IAAA,KAAS,MAAA;AAET,IAAA,OAAO,MAAA;AACT,EAAA,MAAM,SAAA,GACJ,OAAA,CAAQ,SAAA,CAAU,MAAA,GAAS,CAAA,GACvB,QAAQ,SAAA,CAAU,GAAA,CAAI,CAAC,OAAA,EAAS,KAAA,MAAW;AAAA,IACzC,EAAA,EAAI,WAAW,KAAK,CAAA,CAAA;AAAA,IACpB,aAAa,OAAA,CAAQ,WAAA;AAAA,IACrB,YAAY,OAAA,CAAQ;AAAA,GACtB,CAAE,CAAA,GACF,CAAC,EAAE,EAAA,EAAI,MAAA,EAAQ,WAAA,EAAa,OAAA,CAAQ,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,UAAA,EAAY,SAAS,CAAA;AACpF,EAAA,IAAI,SAAA,CAAU,KAAK,CAAC,OAAA,KAAY,QAAQ,WAAA,IAAe,CAAA,IAAK,OAAA,CAAQ,UAAA,IAAc,CAAC,CAAA;AACjF,IAAA,OAAO,MAAA;AACT,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,YAAA,EAAc,CAAA,cAAA,EAAiB,OAAA,CAAQ,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,IACtD,WAAA,EAAa,gBAAgB,OAAO,CAAA,CAAA;AAAA,IACpC,SAAA;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,GAAA,EAAK,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA;AAAA,MACtB,GAAA,EAAK,CAAC,IAAA,EAAM,IAAA,EAAM,IAAI;AAAA;AACxB,GACF;AACF;AAEA,SAAS,eAAe,QAAA,EAAiC;AACvD,EAAA,IACE,CAAC,MAAA,CAAO,aAAA,CAAc,QAAA,CAAS,QAAQ,CAAA,IACvC,QAAA,CAAS,QAAA,GAAW,CAAA,IACpB,QAAA,CAAS,MAAA,CAAO,MAAA,KAAW,CAAA;AAE3B,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AACtE;AAEA,SAAS,aAAA,CAAc,WAAA,EAAqB,WAAA,EAAqB,MAAA,EAAsB;AACrF,EAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,IAAK,WAAA,KAAgB,WAAA;AAC9C,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,uDAAA,CAAyD,CAAA;AACtF;AAEA,SAAS,YAAY,WAAA,EAA6B;AAChD,EAAA,IAAI,WAAA,KAAgB,oBAAoB,OAAO,eAAA;AAC/C,EAAA,IAAI,WAAA,KAAgB,gBAAgB,OAAO,WAAA;AAC3C,EAAA,IAAI,WAAA,KAAgB,eAAe,OAAO,qBAAA;AAC1C,EAAA,OAAO,cAAA;AACT;AAEA,SAAS,IAAA,CAMP,WAAA,EACA,WAAA,EACA,QAAA,EACA,SACA,KAAA,EACiE;AACjE,EAAA,cAAA,CAAe,QAAQ,CAAA;AACvB,EAAA,aAAA,CAAc,WAAA,EAAa,OAAA,CAAQ,IAAA,EAAM,WAAW,CAAA;AACpD,EAAA,OAAO,OAAO,MAAA,CAAO;AAAA,IACnB,GAAG,KAAA;AAAA,IACH,WAAA;AAAA,IACA,MAAA,EAAQ,QAAA;AAAA,IACR,SAAS,EAAE,IAAA,EAAM,YAAY,WAAW,CAAA,EAAG,MAAM,WAAA,EAAY;AAAA,IAC7D,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACH;AAEO,SAAS,+BAA+B,KAAA,EAIlB;AAC3B,EAAA,IAAI,KAAA,CAAM,QAAQ,aAAA,CAAc,MAAA,KAAW,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,MAAA,KAAW,CAAA;AAChF,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AACxE,EAAA,OAAO,IAAA;AAAA,IACL,yBAAA,CAA0B,EAAA;AAAA,IAC1B,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM,QAAA;AAAA,IACN,KAAA,CAAM,OAAA;AAAA,IACN;AAAC,GACH;AACF;AAEO,SAAS,2BAA2B,KAAA,EAIlB;AACvB,EAAA,IACE,KAAA,CAAM,OAAA,CAAQ,YAAA,CAAa,MAAA,KAAW,CAAA,IACtC,KAAA,CAAM,OAAA,CAAQ,WAAA,CAAY,MAAA,KAAW,CAAA,IACrC,KAAA,CAAM,OAAA,CAAQ,UAAU,MAAA,KAAW,CAAA;AAEnC,IAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAC9E,EAAA,OAAO,IAAA;AAAA,IACL,qBAAA,CAAsB,EAAA;AAAA,IACtB,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM,QAAA;AAAA,IACN,KAAA,CAAM,OAAA;AAAA,IACN;AAAC,GACH;AACF;AAEO,SAAS,0BAA0B,KAAA,EAKlB;AACtB,EAAA,IAAI,MAAM,OAAA,CAAQ,YAAA,CAAa,WAAW,CAAA,IAAK,KAAA,CAAM,WAAW,MAAA,GAAS,CAAA;AACvE,IAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAC9E,EAAA,OAAO,IAAA;AAAA,IACL,oBAAA,CAAqB,EAAA;AAAA,IACrB,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM,QAAA;AAAA,IACN,KAAA,CAAM,OAAA;AAAA,IACN,EAAE,UAAA,EAAY,KAAA,CAAM,UAAA;AAAW,GACjC;AACF;AAEO,SAAS,8BAA8B,KAAA,EAIlB;AAC1B,EAAA,IACE,MAAM,OAAA,CAAQ,KAAA,GAAQ,KACtB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,IACvB,KAAA,CAAM,QAAQ,MAAA,CAAO,MAAA,KAAW,KAChC,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,IAC1B,KAAA,CAAM,QAAQ,QAAA,GAAW,CAAA;AAEzB,IAAA,MAAM,IAAI,MAAM,yEAAyE,CAAA;AAC3F,EAAA,OAAO,IAAA;AAAA,IACL,wBAAA,CAAyB,EAAA;AAAA,IACzB,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM,QAAA;AAAA,IACN,KAAA,CAAM,OAAA;AAAA,IACN;AAAC,GACH;AACF","file":"index.mjs","sourcesContent":["import { defineToolPlugin, type Plugin, type ToolPlugin } from '@forgeax/engine-plugin';\nimport {\n type ArtifactRef,\n defineToolCapability,\n type SnapshotRef,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface PreviewAssetLoadResult<TAsset = unknown> {\n readonly ok: true;\n readonly value: TAsset;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}\n\nexport interface PreviewAssetLoadFailure {\n readonly ok: false;\n readonly error: unknown;\n}\n\nexport interface PreviewAssetRegistry {\n readonly loadByGuid: <TAsset = unknown>(\n guid: string,\n ) => Promise<PreviewAssetLoadResult<TAsset> | PreviewAssetLoadFailure>;\n}\n\nexport interface PreviewRenderRuntime {\n readonly rendererReady: boolean;\n readonly worldReady: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n /**\n * Facts read back from the real render/asset owner path. Domain executors\n * must not manufacture observed identity from the requested subject.\n */\n readonly observation?: Readonly<Record<string, string | number | boolean | readonly number[]>>;\n readonly vfx?: {\n readonly dispatches: number;\n readonly indirectDraws: number;\n readonly subjectOutputs: number;\n };\n readonly texture?: {\n readonly drawCalls: number;\n };\n}\n\nexport interface PreviewHostMechanisms {\n readonly runId: string;\n readonly snapshot: SnapshotRef;\n readonly projectRoot: string;\n readonly backend: 'webgpu';\n readonly signal: AbortSignal;\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly artifacts?: readonly ArtifactRef[];\n}\n\nexport interface PreviewHost {\n readonly withSession: <T>(\n execute: (mechanisms: PreviewHostMechanisms) => Promise<T>,\n ) => Promise<T>;\n}\n\nexport const previewHostCapability = defineToolCapability<PreviewHost>('preview.host');\n\nexport function previewHostPlugin(host: PreviewHost): Plugin {\n return {\n name: 'forgeax-preview-host',\n provide: previewHostCapability.id,\n apply(ctx) {\n ctx.provide(previewHostCapability.id, host);\n },\n };\n}\n\nexport function bindPreviewHost(plugin: ToolPlugin, host: PreviewHost): ToolPlugin {\n return defineToolPlugin(previewHostPlugin(host), plugin.tools);\n}\n\nexport function createPreviewHost(input: PreviewHostMechanisms): PreviewHost {\n let active = true;\n return {\n async withSession(execute) {\n if (!active || input.signal.aborted) throw new Error('preview-host-session-terminal');\n try {\n return await execute(input);\n } finally {\n active = false;\n }\n },\n };\n}\n","import { defineToolPlugin } from '@forgeax/engine-plugin';\nimport type {\n JsonValue,\n ToolContribution,\n ToolDescriptor,\n ToolExecutionContext,\n ToolSchema,\n} from '@forgeax/engine-tool-runtime';\nimport { previewHostCapability } from '../host/preview-host.js';\nimport type { PreviewSubjectKind } from '../kit/presentation.js';\n\nexport interface ResourcePreviewArgs {\n readonly guid: string;\n /** Square screenshot edge in device pixels. Defaults to 512 and must be a power of two. */\n readonly size?: number;\n}\n\nexport const RESOURCE_PREVIEW_DEFAULT_SIZE = 512;\nexport const RESOURCE_PREVIEW_MIN_SIZE = 64;\nexport const RESOURCE_PREVIEW_MAX_SIZE = 4096;\n\nexport function isResourcePreviewSize(value: unknown): value is number {\n return (\n typeof value === 'number' &&\n Number.isSafeInteger(value) &&\n value >= RESOURCE_PREVIEW_MIN_SIZE &&\n value <= RESOURCE_PREVIEW_MAX_SIZE &&\n (value & (value - 1)) === 0\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\n/** Keep the public result contract concrete at the ToolRuntime boundary. */\nfunction isResourcePreviewResult(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const subject = value.subject;\n if (\n !isRecord(subject) ||\n !isString(subject.kind) ||\n !isString(subject.guid) ||\n !isString(subject.digest)\n )\n return false;\n if (!isRecord(value.presentation) || !isString(value.presentation.kind)) return false;\n if (\n !isRecord(value.recipe) ||\n !isString(value.recipe.schemaVersion) ||\n !isString(value.recipe.recipeDigest)\n )\n return false;\n if (!isRecord(value.oracle) || !isString(value.oracle.status)) return false;\n return Array.isArray(value.artifacts);\n}\n\nexport const resourcePreviewResultSchema: ToolSchema<unknown> = {\n parse(value) {\n return isResourcePreviewResult(value)\n ? { ok: true, value }\n : {\n ok: false,\n error:\n 'resource preview result must include subject, presentation, recipe, oracle, and artifacts',\n };\n },\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"presentation\",\"recipe\",\"oracle\",\"artifacts\"]}',\n};\n\nexport const resourcePreviewArgsSchema: ToolSchema<ResourcePreviewArgs> = {\n parse(value) {\n if (\n value === null ||\n typeof value !== 'object' ||\n typeof Reflect.get(value, 'guid') !== 'string'\n ) {\n return { ok: false, error: 'expected { guid: string }' };\n }\n const guid = Reflect.get(value, 'guid');\n if (guid.length === 0) return { ok: false, error: 'guid must not be empty' };\n const size = Reflect.get(value, 'size');\n if (size === undefined) return { ok: true, value: { guid } };\n return isResourcePreviewSize(size)\n ? { ok: true, value: { guid, size } }\n : {\n ok: false,\n error: `size must be a power of two between ${RESOURCE_PREVIEW_MIN_SIZE} and ${RESOURCE_PREVIEW_MAX_SIZE}`,\n };\n },\n describe: `{\"type\":\"object\",\"required\":[\"guid\"],\"properties\":{\"guid\":{\"type\":\"string\"},\"size\":{\"type\":\"integer\",\"minimum\":${RESOURCE_PREVIEW_MIN_SIZE},\"maximum\":${RESOURCE_PREVIEW_MAX_SIZE},\"description\":\"square power-of-two screenshot edge; defaults to ${RESOURCE_PREVIEW_DEFAULT_SIZE}\"}}}`,\n};\n\nexport function subjectDescriptor(\n kind: PreviewSubjectKind,\n): ToolDescriptor<ResourcePreviewArgs, unknown> {\n return {\n id: `${kind}.preview`,\n title: `Preview ${kind}`,\n summary: `Preview one ${kind} asset in the Engine-owned resource host.`,\n realm: 'host',\n argsSchema: resourcePreviewArgsSchema,\n resultSchema: resourcePreviewResultSchema,\n evidence: ['rhi-tape', 'profile-capture', 'png'],\n };\n}\n\nexport type SubjectExecutor = (args: ResourcePreviewArgs, context: ToolExecutionContext) => unknown;\n\nexport interface ResourceSubjectFailure {\n readonly ok: false;\n readonly error: {\n readonly code:\n | 'resource-preview-subject-invalid'\n | 'resource-preview-kind-mismatch'\n | 'resource-preview-oracle-failed';\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, JsonValue>>;\n };\n}\n\nexport function subjectFailure(\n code: ResourceSubjectFailure['error']['code'],\n expected: string,\n detail: Readonly<Record<string, JsonValue>>,\n): ResourceSubjectFailure {\n return {\n ok: false,\n error: {\n code,\n expected,\n hint: 'Load the requested GUID through AssetRegistry.loadByGuid and repair the owner facts before retrying.',\n detail,\n },\n };\n}\n\nexport function assetLoadFailure(\n expected: string,\n runId: string,\n error: unknown,\n): ResourceSubjectFailure {\n const owner = isRecord(error) ? error : undefined;\n const ownerCode = typeof owner?.code === 'string' ? owner.code : undefined;\n const ownerExpected = typeof owner?.expected === 'string' ? owner.expected : undefined;\n const ownerHint = typeof owner?.hint === 'string' ? owner.hint : undefined;\n const ownerDetail = owner?.detail;\n return subjectFailure('resource-preview-subject-invalid', expected, {\n phase: 'asset-load',\n runId,\n ...(ownerCode === undefined ? {} : { ownerCode }),\n ...(ownerExpected === undefined ? {} : { ownerExpected }),\n ...(ownerHint === undefined ? {} : { ownerHint }),\n ...(ownerDetail === undefined ? {} : { ownerDetail: toJsonValue(ownerDetail) }),\n });\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return value;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (Array.isArray(value)) return value.map((entry) => toJsonValue(entry));\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, toJsonValue(entry)]),\n );\n }\n return String(value);\n}\n\nexport function nativePreviewPlugin(\n kind: PreviewSubjectKind,\n contribution: ToolContribution<ResourcePreviewArgs, unknown>,\n) {\n return defineToolPlugin({ name: `forgeax-preview-${kind}`, apply() {} }, [\n contribution as ToolContribution<unknown, unknown>,\n ]);\n}\n\nexport async function failUnboundSubject(\n kind: PreviewSubjectKind,\n args: ResourcePreviewArgs,\n context: ToolExecutionContext,\n): Promise<unknown> {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) => ({\n ...subjectFailure(\n 'resource-preview-subject-invalid',\n `${kind} asset ${args.guid} to be bound by its owner before rendering`,\n { phase: 'subject-binding', runId: mechanisms.runId },\n ),\n }));\n}\n","import type { JsonValue, ToolRecoveryAction, ToolRuntimeError } from '@forgeax/engine-tool-runtime';\n\nexport type ResourcePreviewFailureCode =\n | 'resource-preview-kind-mismatch'\n | 'resource-preview-subject-invalid'\n | 'resource-preview-oracle-failed';\n\nexport interface ResourcePreviewFailure {\n readonly code: ResourcePreviewFailureCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, JsonValue>>;\n}\n\nexport interface ResourcePreviewRecovery {\n readonly failure: ResourcePreviewFailure;\n readonly suggestedOperation?: string;\n readonly actions: readonly ToolRecoveryAction[];\n}\n\nfunction isResourcePreviewFailureCode(value: string): value is ResourcePreviewFailureCode {\n return (\n value === 'resource-preview-kind-mismatch' ||\n value === 'resource-preview-subject-invalid' ||\n value === 'resource-preview-oracle-failed'\n );\n}\n\nfunction isRecord(value: JsonValue | undefined): value is { readonly [key: string]: JsonValue } {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction suggestedOperation(payload: Readonly<Record<string, JsonValue>>): string | undefined {\n const actualKind = payload.actualKind;\n if (\n actualKind !== 'material' &&\n actualKind !== 'mesh' &&\n actualKind !== 'vfx' &&\n actualKind !== 'texture'\n )\n return undefined;\n return `${actualKind}.preview`;\n}\n\nfunction exhaustive(value: never): never {\n throw new Error(`unhandled resource preview failure: ${String(value)}`);\n}\n\nexport function describeResourcePreviewFailure(\n failure: ToolRuntimeError,\n): ResourcePreviewRecovery | undefined {\n if (failure.code !== 'tool-domain-failed') return undefined;\n const code = failure.detail.code;\n if (!isResourcePreviewFailureCode(code)) return undefined;\n const detail = isRecord(failure.detail.payload) ? failure.detail.payload : {};\n const base: ResourcePreviewFailure = {\n code,\n expected: failure.expected,\n hint: failure.hint,\n detail,\n };\n switch (code) {\n case 'resource-preview-kind-mismatch': {\n const operation = suggestedOperation(detail);\n return {\n failure: base,\n ...(operation === undefined ? {} : { suggestedOperation: operation }),\n actions: [\n ...(operation === undefined\n ? []\n : [\n {\n action: 'switch-operation' as const,\n operation,\n hint: 'Run the suggested operation for the loaded asset kind.',\n },\n ]),\n {\n action: 'repair-owner',\n hint: 'Repair the asset owner kind facts and reload the GUID.',\n },\n {\n action: 'stop',\n hint: 'Stop when the GUID does not belong to a supported preview kind.',\n },\n ],\n };\n }\n case 'resource-preview-subject-invalid':\n return {\n failure: base,\n actions: [\n {\n action: 'repair-owner',\n hint: 'Repair the owner facts or recook the subject, then retry.',\n },\n {\n action: 'retry',\n hint: 'Retry the same operation after the producer publishes a new digest.',\n },\n { action: 'stop', hint: 'Stop when the owner cannot produce a valid subject.' },\n ],\n };\n case 'resource-preview-oracle-failed':\n return {\n failure: base,\n actions: [\n {\n action: 'inspect-evidence',\n hint: 'Inspect the report and RHI diagnostics before retrying.',\n },\n {\n action: 'retry',\n hint: 'Retry only after the renderer or binding producer is repaired.',\n },\n {\n action: 'stop',\n hint: 'Stop publication when fresh evidence still falsifies the oracle.',\n },\n ],\n };\n }\n return exhaustive(code);\n}\n","import {\n createPreviewArtifactManifest,\n type PreviewArtifactManifest,\n type PreviewArtifactManifestValidation,\n type PreviewArtifactRole,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\n\nexport {\n createPreviewArtifactManifest,\n type PreviewArtifactIdentity,\n type PreviewArtifactKind,\n type PreviewArtifactManifest,\n type PreviewArtifactManifestEntry,\n type PreviewArtifactManifestValidation,\n type PreviewArtifactRole,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface AtomicPreviewPublisher {\n readonly stage: (manifest: PreviewArtifactManifest) => void;\n readonly publish: (\n requiredRoles: readonly PreviewArtifactRole[],\n ) => PreviewArtifactManifestValidation;\n readonly discard: () => void;\n readonly published: () => PreviewArtifactManifest | undefined;\n}\n\n/** In-memory atomic boundary shared by Browser, Dawn, and visible carriers. */\nexport function createAtomicPreviewPublisher(): AtomicPreviewPublisher {\n let staged: PreviewArtifactManifest | undefined;\n let committed: PreviewArtifactManifest | undefined;\n return {\n stage(manifest) {\n staged = createPreviewArtifactManifest(manifest);\n },\n publish(requiredRoles) {\n if (staged === undefined) {\n const invalid = validatePreviewArtifactManifest(\n { schemaVersion: '2.0.0', identity: undefined as never, artifacts: [] },\n requiredRoles,\n );\n if (invalid.ok) throw new Error('preview publisher rejected an empty stage');\n return invalid;\n }\n const validated = validatePreviewArtifactManifest(staged, requiredRoles);\n if (!validated.ok) {\n staged = undefined;\n return validated;\n }\n committed = validated.value;\n staged = undefined;\n return { ok: true, value: committed };\n },\n discard() {\n staged = undefined;\n },\n published: () => committed,\n };\n}\n","export type PreviewOracleStatus = PreviewOracle['status'];\n\nexport type PreviewOracle =\n | {\n readonly status: 'passed';\n readonly subjectBound: true;\n readonly drawCalls: number;\n readonly dispatches: number;\n readonly rendererHealthy: true;\n readonly detail: Record<string, string | number | boolean>;\n }\n | {\n readonly status: 'failed';\n readonly subjectBound: false;\n readonly drawCalls: number;\n readonly dispatches: number;\n readonly rendererHealthy: boolean;\n readonly detail: Record<string, string | number | boolean>;\n };\n\nexport function passedPreviewOracle(input: {\n readonly drawCalls: number;\n readonly dispatches?: number;\n readonly detail: Record<string, string | number | boolean>;\n}): PreviewOracle {\n return {\n status: 'passed',\n subjectBound: true,\n drawCalls: input.drawCalls,\n dispatches: input.dispatches ?? 0,\n rendererHealthy: true,\n detail: { ...input.detail },\n };\n}\n\nexport function failedPreviewOracle(input: {\n readonly drawCalls?: number;\n readonly dispatches?: number;\n readonly rendererHealthy?: boolean;\n readonly detail: Record<string, string | number | boolean>;\n}): PreviewOracle {\n return {\n status: 'failed',\n subjectBound: false,\n drawCalls: input.drawCalls ?? 0,\n dispatches: input.dispatches ?? 0,\n rendererHealthy: input.rendererHealthy ?? false,\n detail: { ...input.detail },\n };\n}\n\nexport interface MaterialOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly program: string;\n readonly pass: string;\n readonly bindingsDigest: string;\n readonly closureDigest: string;\n };\n readonly observed: MaterialOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n };\n}\n\nexport interface MeshOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly vertexDigest: string;\n readonly indexDigest: string;\n readonly submeshDigest: string;\n readonly aabbDigest: string;\n readonly aabb?: readonly [number, number, number, number, number, number];\n readonly submeshCount?: number;\n readonly materialSlotCount?: number;\n };\n readonly observed: MeshOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n };\n}\n\nfunction oracleDetail(\n kind: 'material' | 'mesh',\n requested: Record<string, unknown>,\n observed: Record<string, unknown>,\n mismatch: string | undefined,\n): Record<string, string | number | boolean> {\n return {\n kind,\n mismatch: mismatch ?? 'none',\n requestedSubjectDigest:\n typeof requested.subjectDigest === 'string' ? requested.subjectDigest : 'unknown',\n observedSubjectDigest:\n typeof observed.subjectDigest === 'string' ? observed.subjectDigest : 'unknown',\n requestedOwnerDigest: JSON.stringify(requested),\n observedOwnerDigest: JSON.stringify(observed),\n };\n}\n\nfunction firstMismatch(\n requested: Record<string, unknown>,\n observed: Record<string, unknown>,\n): string | undefined {\n for (const key of Object.keys(requested)) {\n const requestedValue = requested[key];\n const observedValue = observed[key];\n if (\n Array.isArray(requestedValue) ||\n Array.isArray(observedValue) ||\n typeof requestedValue === 'object' ||\n typeof observedValue === 'object'\n ) {\n if (JSON.stringify(requestedValue) !== JSON.stringify(observedValue)) return key;\n } else if (requestedValue !== observedValue) {\n return key;\n }\n }\n return undefined;\n}\n\nexport function evaluateMaterialOracle(input: MaterialOracleInput): PreviewOracle {\n const requested = input.requested as unknown as Record<string, string>;\n const observed = input.observed as unknown as Record<string, string>;\n const mismatch = firstMismatch(requested, observed);\n const healthy = input.observed.rendererHealthy && input.observed.drawCalls > 0;\n const detail = oracleDetail('material', requested, observed, mismatch);\n if (mismatch !== undefined || !healthy) {\n return failedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n rendererHealthy: input.observed.rendererHealthy,\n detail: { ...detail, rendererHealthy: input.observed.rendererHealthy },\n });\n }\n return passedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n detail: { ...detail, rendererHealthy: true },\n });\n}\n\nexport function evaluateMeshOracle(input: MeshOracleInput): PreviewOracle {\n const requested = input.requested as unknown as Record<string, string>;\n const observed = input.observed as unknown as Record<string, string>;\n const mismatch = firstMismatch(requested, observed);\n const healthy = input.observed.rendererHealthy && input.observed.drawCalls > 0;\n const detail = oracleDetail('mesh', requested, observed, mismatch);\n if (mismatch !== undefined || !healthy) {\n return failedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n rendererHealthy: input.observed.rendererHealthy,\n detail: { ...detail, rendererHealthy: input.observed.rendererHealthy },\n });\n }\n return passedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n detail: { ...detail, rendererHealthy: true },\n });\n}\n\nexport interface VfxOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly programFingerprint: string;\n readonly emitterDigest: string;\n readonly sampleDigest: string;\n readonly boundsDigest: string;\n readonly computeDigest: string;\n readonly indirectDigest: string;\n readonly contactSheetDigest?: string;\n readonly authoredBounds?: readonly [number, number, number, number, number, number];\n readonly seed?: number;\n readonly fixedDelta?: number;\n readonly timelineFrames?: number;\n };\n readonly observed: VfxOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly dispatches: number;\n readonly indirectDraws: number;\n readonly subjectOutputs: number;\n readonly nonBlackPixels: number;\n };\n}\n\nexport interface TextureOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly boundDigest: string;\n readonly dimensions: readonly [number, number];\n readonly format: string;\n readonly colorSpace: string;\n readonly mipCount: number;\n readonly uvDigest: string;\n readonly filter: string;\n readonly bindingDigest: string;\n };\n readonly observed: TextureOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n readonly payloadClass: 'black' | 'transparent' | 'single-channel' | 'color';\n };\n}\n\nfunction identityRecord(input: Record<string, unknown>): Record<string, string> {\n return Object.fromEntries(\n Object.entries(input).map(([key, value]) => [\n key,\n Array.isArray(value) ? JSON.stringify(value) : String(value),\n ]),\n );\n}\n\nfunction evaluateIdentityOracle(\n kind: 'vfx' | 'texture',\n requestedInput: Record<string, unknown>,\n observedInput: Record<string, unknown>,\n healthy: boolean,\n drawCalls: number,\n dispatches: number,\n detailOverrides: Record<string, string | number | boolean>,\n): PreviewOracle {\n const requested = identityRecord(requestedInput);\n const observed = identityRecord(observedInput);\n const mismatch = firstMismatch(requested, observed);\n const detail = {\n kind,\n mismatch: mismatch ?? 'none',\n requestedSubjectDigest: requested.subjectDigest ?? 'unknown',\n observedSubjectDigest: observed.subjectDigest ?? 'unknown',\n requestedOwnerDigest: JSON.stringify(requested),\n observedOwnerDigest: JSON.stringify(observed),\n ...detailOverrides,\n };\n if (mismatch !== undefined || !healthy) {\n return failedPreviewOracle({ drawCalls, dispatches, rendererHealthy: healthy, detail });\n }\n return passedPreviewOracle({ drawCalls, dispatches, detail });\n}\n\nexport function evaluateVfxOracle(input: VfxOracleInput): PreviewOracle {\n const observed = input.observed;\n const healthy =\n observed.rendererHealthy &&\n observed.dispatches > 0 &&\n observed.indirectDraws > 0 &&\n observed.subjectOutputs > 0;\n return evaluateIdentityOracle(\n 'vfx',\n input.requested,\n input.observed,\n healthy,\n observed.indirectDraws,\n observed.dispatches,\n {\n rendererHealthy: observed.rendererHealthy,\n indirectDraws: observed.indirectDraws,\n subjectOutputs: observed.subjectOutputs,\n nonBlackPixels: observed.nonBlackPixels,\n },\n );\n}\n\nexport function evaluateTextureOracle(input: TextureOracleInput): PreviewOracle {\n const observed = input.observed;\n return evaluateIdentityOracle(\n 'texture',\n input.requested,\n input.observed,\n observed.rendererHealthy && observed.drawCalls > 0,\n observed.drawCalls,\n 0,\n {\n rendererHealthy: observed.rendererHealthy,\n payloadClass: observed.payloadClass,\n nonBlackPixels: observed.nonBlackPixels,\n },\n );\n}\n","import type { SnapshotRef } from '@forgeax/engine-tool-runtime';\nimport type { PreviewPresentation, PreviewSubject } from '../kit/presentation.js';\nimport type { PreviewArtifactManifestEntry } from './manifest.js';\nimport type { PreviewOracle } from './oracle.js';\n\nexport interface ResourcePreviewReport {\n readonly mediaType: 'application/vnd.forgeax.resource-preview+json';\n readonly schemaVersion: '1.0.0';\n readonly runId: string;\n readonly snapshot: SnapshotRef;\n readonly subject: PreviewSubject;\n readonly presentation: PreviewPresentation;\n readonly oracle: PreviewOracle;\n readonly artifacts: readonly PreviewArtifactManifestEntry[];\n}\n\nexport function createResourcePreviewReport(\n input: Omit<ResourcePreviewReport, 'mediaType' | 'schemaVersion'>,\n): ResourcePreviewReport {\n return {\n mediaType: 'application/vnd.forgeax.resource-preview+json',\n schemaVersion: '1.0.0',\n ...input,\n artifacts: input.artifacts.map((artifact) => ({\n ...artifact,\n derivedFrom: [...artifact.derivedFrom],\n })),\n };\n}\n","import type {\n ArtifactRef,\n JsonValue,\n SnapshotRef,\n ToolDomainFailure,\n ToolEvidenceKind,\n ToolExecutionContext,\n ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport {\n createPreviewHost as createNativePreviewHost,\n type PreviewHost as NativePreviewHost,\n type PreviewHostMechanisms,\n} from './host/preview-host.js';\n\nexport interface PreviewHostRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n}\n\nexport interface PreviewAssetBinding {\n readonly guid: string;\n readonly bytes: number;\n}\n\nexport interface PreviewFrameInput {\n readonly frame: number;\n readonly deltaSeconds: number;\n}\n\nexport interface PreviewCapture {\n readonly digest: string;\n readonly bytes: number;\n}\n\nexport interface PreviewResourceCensus {\n readonly worlds: number;\n readonly renderers: number;\n readonly canvases: number;\n readonly leases: number;\n}\n\nexport interface PreviewCleanupReport {\n readonly census: PreviewResourceCensus;\n readonly failures: readonly string[];\n}\n\n/**\n * The only resource surface exposed to a preview contribution. The adapter owns\n * the actual Engine resources; callers receive POD bindings and bounded actions.\n */\nexport interface PreviewHostSession {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly loadAsset: (guid: string) => Promise<PreviewAssetBinding>;\n readonly frame: (input: PreviewFrameInput) => Promise<void>;\n readonly capture: () => Promise<PreviewCapture & { readonly artifact?: ArtifactRef }>;\n readonly census: () => PreviewResourceCensus;\n readonly dispose: () => Promise<void>;\n}\n\nexport interface PreviewHostAdapter {\n readonly open: (request: PreviewHostRequest) => PreviewHostSession | Promise<PreviewHostSession>;\n}\n\nexport interface PreviewHost {\n readonly withSession: <TResult>(\n request: PreviewHostRequest,\n run: (session: PreviewHostSession) => TResult | Promise<TResult>,\n ) => Promise<{ readonly value: TResult; readonly cleanup: PreviewCleanupReport }>;\n}\n\nexport interface PreviewDomainValue<TReport = unknown> {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly report: TReport;\n readonly artifacts: readonly ArtifactRef[];\n}\n\nexport type PreviewDomainResult<TReport = unknown> =\n | { readonly ok: true; readonly value: PreviewDomainValue<TReport> }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n\nexport type PreviewDomainRunner<TRequest, TReport = unknown> = (\n request: TRequest,\n context: ToolExecutionContext,\n) => Promise<PreviewDomainResult<TReport>>;\n\nexport const REQUIRED_PREVIEW_EVIDENCE: readonly ToolEvidenceKind[] = [\n 'rhi-tape',\n 'png',\n 'profile-capture',\n];\n\nexport function domainFailure(\n code: string,\n expected: string,\n hint: string,\n detail: Record<string, JsonValue>,\n): { readonly ok: false; readonly error: ToolDomainFailure } {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\n/**\n * The default contribution is deliberately fail-closed. A real Project GUID\n * loader must install a PreviewHost/Browser/Dawn runner; a data-only request\n * must never manufacture PNG, RHI, or profile references from its arguments.\n */\nexport function previewRuntimeUnavailable(\n subject: ToolSubjectRef,\n snapshot: SnapshotRef,\n domain: string,\n): { readonly ok: false; readonly error: ToolDomainFailure } {\n return domainFailure(\n 'preview-runtime-unavailable',\n 'a Project GUID cold-load and an active PreviewHost/Browser/Dawn runner',\n 'Install the Project preview provider and retry; no synthetic artifact is published.',\n {\n domain,\n subjectKind: subject.kind,\n subjectGuid: subject.guid,\n snapshotRevision: snapshot.revision,\n snapshotDigest: snapshot.digest,\n requiredEvidence: REQUIRED_PREVIEW_EVIDENCE as unknown as JsonValue,\n },\n );\n}\n\nexport function validateDomainValue<TReport>(\n value: PreviewDomainValue<TReport>,\n request: PreviewHostRequest,\n): PreviewDomainResult<TReport> {\n if (\n value.subject.kind !== request.subject.kind ||\n value.subject.guid !== request.subject.guid ||\n value.snapshot.revision !== request.snapshot.revision ||\n value.snapshot.digest !== request.snapshot.digest\n ) {\n return domainFailure(\n 'preview-subject-identity-mismatch',\n 'the terminal subject and snapshot to match the request',\n 'Repair the domain producer so evidence remains bound to the requested subject.',\n {\n requestGuid: request.subject.guid,\n resultGuid: value.subject.guid,\n requestSnapshot: request.snapshot.digest,\n resultSnapshot: value.snapshot.digest,\n },\n );\n }\n const kinds = new Set(value.artifacts.map((artifact) => artifact.kind));\n const missing = REQUIRED_PREVIEW_EVIDENCE.filter((kind) => !kinds.has(kind));\n if (missing.length > 0) {\n return domainFailure(\n 'preview-evidence-incomplete',\n 'one subject-bound artifact for each required evidence kind',\n 'Repair the RHI, PNG, and profile producers before retrying.',\n { missing: missing as unknown as JsonValue },\n );\n }\n return { ok: true, value };\n}\n\nexport class PreviewCleanupError extends Error {\n readonly code = 'preview-cleanup-live-resources';\n readonly census: PreviewResourceCensus;\n\n constructor(census: PreviewResourceCensus, failures: readonly string[] = []) {\n super(\n failures.length === 0\n ? 'preview session left live resources after disposal'\n : `preview session cleanup failed: ${failures.join('; ')}`,\n );\n this.name = 'PreviewCleanupError';\n this.census = census;\n }\n}\n\nfunction hasLiveResources(census: PreviewResourceCensus): boolean {\n return Object.values(census).some((count) => count !== 0);\n}\n\nexport function createPreviewHost(adapter: PreviewHostAdapter): PreviewHost;\nexport function createPreviewHost(input: PreviewHostMechanisms): NativePreviewHost;\nexport function createPreviewHost(\n adapterOrInput: PreviewHostAdapter | PreviewHostMechanisms,\n): PreviewHost | NativePreviewHost {\n if ('runId' in adapterOrInput) return createNativePreviewHost(adapterOrInput);\n const adapter = adapterOrInput;\n const withSession = async <TResult>(\n request: PreviewHostRequest,\n run: (session: PreviewHostSession) => TResult | Promise<TResult>,\n ): Promise<{ readonly value: TResult; readonly cleanup: PreviewCleanupReport }> => {\n const session = await adapter.open(request);\n let result: TResult;\n try {\n result = await run(session);\n } finally {\n await session.dispose();\n }\n const cleanup: PreviewCleanupReport = { census: session.census(), failures: [] };\n if (hasLiveResources(cleanup.census)) {\n throw new PreviewCleanupError(cleanup.census, cleanup.failures);\n }\n return { value: result, cleanup };\n };\n\n return {\n withSession,\n };\n}\n","import type { PreviewPresentation, PreviewSubjectKind } from './presentation.js';\n\nexport interface CanonicalPreviewRecipe {\n readonly schemaVersion: '1.0.0';\n readonly rig:\n | Extract<PreviewPresentation, { readonly kind: 'lit-asset' }>['geometry']\n | 'asset-quad';\n readonly environment: 'engine-canonical' | 'black';\n readonly skybox: 'engine-canonical' | 'none';\n readonly skylight: 'engine-canonical' | 'none';\n readonly directionalLight: 'engine-canonical' | 'none';\n readonly stage: 'neutral-material-checker-unlit' | 'texture-unlit-black';\n readonly camera: 'bounds-derived' | 'texture-orthographic';\n readonly recipeDigest: string;\n}\n\nexport function createCanonicalPreviewRecipe(kind: PreviewSubjectKind): CanonicalPreviewRecipe {\n const texture = kind === 'texture';\n return {\n schemaVersion: '1.0.0',\n rig: kind === 'mesh' ? 'asset-mesh' : texture ? 'asset-quad' : 'handle-sphere',\n environment: texture ? 'black' : 'engine-canonical',\n skybox: texture ? 'none' : 'engine-canonical',\n skylight: texture ? 'none' : 'engine-canonical',\n directionalLight: texture ? 'none' : 'engine-canonical',\n stage: texture ? 'texture-unlit-black' : 'neutral-material-checker-unlit',\n camera: texture ? 'texture-orthographic' : 'bounds-derived',\n recipeDigest: `canonical:${kind}:${texture ? 'texture-orthographic' : 'bounds-derived'}`,\n };\n}\n\nexport function canonicalPresentation(kind: PreviewSubjectKind): PreviewPresentation {\n if (kind === 'texture') {\n return {\n kind: 'texture-unlit',\n geometry: 'aspect-quad',\n checkerboard: 'linear-alpha',\n };\n }\n return {\n kind: 'lit-asset',\n geometry: kind === 'mesh' ? 'asset-mesh' : 'handle-sphere',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n skybox: 'engine-canonical',\n };\n}\n","export type PreviewSubject =\n | { readonly kind: 'material'; readonly guid: string; readonly digest: string }\n | { readonly kind: 'mesh'; readonly guid: string; readonly digest: string }\n | { readonly kind: 'vfx'; readonly guid: string; readonly digest: string }\n | { readonly kind: 'texture'; readonly guid: string; readonly digest: string };\n\nexport type PreviewSubjectKind = PreviewSubject['kind'];\n\nexport type PreviewPresentation =\n | {\n readonly kind: 'lit-asset';\n readonly geometry: 'handle-sphere' | 'asset-mesh';\n readonly skylight: 'engine-canonical';\n readonly directionalLight: 'engine-canonical';\n readonly skybox: 'engine-canonical';\n }\n | {\n readonly kind: 'texture-unlit';\n readonly geometry: 'aspect-quad';\n readonly checkerboard: 'linear-alpha';\n };\n\nexport const MATERIAL_PRESENTATION: PreviewPresentation = {\n kind: 'lit-asset',\n geometry: 'handle-sphere',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n skybox: 'engine-canonical',\n};\n\nexport const MESH_PRESENTATION: PreviewPresentation = {\n kind: 'lit-asset',\n geometry: 'asset-mesh',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n skybox: 'engine-canonical',\n};\n\nexport const VFX_PRESENTATION: PreviewPresentation = MATERIAL_PRESENTATION;\n\nexport const TEXTURE_PRESENTATION: PreviewPresentation = {\n kind: 'texture-unlit',\n geometry: 'aspect-quad',\n checkerboard: 'linear-alpha',\n};\n","export interface CanonicalKitReceipt {\n readonly schemaVersion: '1.0.0';\n readonly producer: 'packages/preview/scripts/build-canonical-kit.mjs';\n readonly source: {\n readonly sourceKey: string;\n readonly guid: string;\n readonly digest: string;\n readonly metaDigest: string;\n };\n readonly recipe: {\n readonly digest: string;\n readonly value: {\n readonly schemaVersion: '1.0.0';\n readonly rig: 'handle-sphere';\n readonly environment: 'engine-canonical';\n readonly skybox: 'engine-canonical';\n readonly skylight: 'engine-canonical';\n readonly directionalLight: 'engine-canonical';\n readonly stage: 'neutral-material-checker-unlit';\n readonly camera: 'bounds-derived';\n };\n };\n readonly cooked: {\n readonly importer: 'image';\n readonly kind: 'equirect';\n readonly sourceDigest: string;\n readonly metaDigest: string;\n };\n readonly package: {\n readonly name: '@forgeax/engine-preview';\n readonly root: 'assets/canonical-kit';\n };\n readonly transport: {\n readonly dev: 'pluginPack';\n readonly build: 'pluginPack';\n readonly sdk: 'files/assets/canonical-kit';\n readonly source: 'sky.hdr';\n readonly meta: 'sky.hdr.meta.json';\n };\n}\n\nexport type CanonicalKitReceiptValidation =\n | { readonly ok: true; readonly value: CanonicalKitReceipt }\n | {\n readonly ok: false;\n readonly error: {\n readonly code: 'preview-kit-receipt-invalid';\n readonly expected: string;\n readonly hint: string;\n readonly detail: { readonly field: string; readonly phase: 'receipt' };\n };\n };\n\nconst digestPattern = /^sha256:[0-9a-f]{64}$/;\n\nfunction invalid(field: string): CanonicalKitReceiptValidation {\n return {\n ok: false,\n error: {\n code: 'preview-kit-receipt-invalid',\n expected: `canonical kit receipt field ${field} to be producer-owned and content-addressed`,\n hint: 'Run the canonical kit producer and consume its current receipt; do not derive identity from a path or project preset.',\n detail: { field, phase: 'receipt' },\n },\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function validateCanonicalKitReceipt(value: unknown): CanonicalKitReceiptValidation {\n if (!isRecord(value)) return invalid('root');\n if (value.schemaVersion !== '1.0.0') return invalid('schemaVersion');\n if (value.producer !== 'packages/preview/scripts/build-canonical-kit.mjs')\n return invalid('producer');\n const source = value.source;\n if (!isRecord(source)) return invalid('source');\n if (\n typeof source.sourceKey !== 'string' ||\n !source.sourceKey.endsWith('sky.hdr') ||\n typeof source.guid !== 'string' ||\n !digestPattern.test(String(source.digest)) ||\n !digestPattern.test(String(source.metaDigest))\n )\n return invalid('source');\n const recipe = value.recipe;\n if (!isRecord(recipe) || !digestPattern.test(String(recipe.digest)) || !isRecord(recipe.value))\n return invalid('recipe');\n const recipeValue = recipe.value;\n const recipeFields: Record<string, string> = {\n schemaVersion: '1.0.0',\n rig: 'handle-sphere',\n environment: 'engine-canonical',\n skybox: 'engine-canonical',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n stage: 'neutral-material-checker-unlit',\n camera: 'bounds-derived',\n };\n for (const [field, expected] of Object.entries(recipeFields)) {\n if (recipeValue[field] !== expected) return invalid(`recipe.value.${field}`);\n }\n const cooked = value.cooked;\n if (\n !isRecord(cooked) ||\n cooked.importer !== 'image' ||\n cooked.kind !== 'equirect' ||\n !digestPattern.test(String(cooked.sourceDigest)) ||\n !digestPattern.test(String(cooked.metaDigest)) ||\n cooked.sourceDigest !== source.digest ||\n cooked.metaDigest !== source.metaDigest\n )\n return invalid('cooked');\n const packageValue = value.package;\n if (\n !isRecord(packageValue) ||\n packageValue.name !== '@forgeax/engine-preview' ||\n packageValue.root !== 'assets/canonical-kit'\n )\n return invalid('package');\n const transport = value.transport;\n if (\n !isRecord(transport) ||\n transport.dev !== 'pluginPack' ||\n transport.build !== 'pluginPack' ||\n transport.sdk !== 'files/assets/canonical-kit' ||\n transport.source !== 'sky.hdr' ||\n transport.meta !== 'sky.hdr.meta.json'\n )\n return invalid('transport');\n return { ok: true, value: value as unknown as CanonicalKitReceipt };\n}\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateMaterialOracle, type MaterialOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface MaterialSubjectInspection {\n readonly subjectDigest: string;\n readonly program: string;\n readonly pass: string;\n readonly bindingsDigest: string;\n readonly closureDigest: string;\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: MaterialSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction digest(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nexport function inspectMaterialSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'material') {\n return subjectFailure('resource-preview-kind-mismatch', 'a MaterialAsset with kind material', {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n });\n }\n const passes = input.asset.passes;\n if (!Array.isArray(passes) || passes.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'a MaterialAsset with at least one pass',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'passes',\n },\n );\n }\n const first =\n passes.find((pass) => {\n if (!isRecord(pass)) return false;\n const tags =\n isRecord(pass.renderState) && isRecord(pass.renderState.tags)\n ? pass.renderState.tags\n : undefined;\n const mode = tags?.LightMode ?? pass.name;\n return !/shadow|depth/i.test(String(mode));\n }) ?? passes[0];\n if (!isRecord(first) || typeof first.name !== 'string' || !isRecord(first.program)) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every material pass to declare a program',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'passes[0]',\n },\n );\n }\n if (typeof first.program.module !== 'string' || first.program.module.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the material program module identity to be present',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'passes[0].program.module',\n },\n );\n }\n const owner = input.asset.ownerFacts;\n const ownerFacts = isRecord(owner) ? owner : input.ownerFacts;\n const subjectDigest = digest(input.asset.digest ?? input.digest ?? ownerFacts?.subjectDigest);\n const bindingsDigest = digest(input.asset.bindingsDigest ?? ownerFacts?.bindingsDigest);\n const closureDigest = digest(input.asset.closureDigest ?? ownerFacts?.closureDigest);\n if (subjectDigest === undefined || bindingsDigest === undefined || closureDigest === undefined) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the MaterialAsset owner to publish subject, bindings, and closure digests',\n { phase: 'subject', guid: input.guid, field: 'ownerFacts' },\n );\n }\n return {\n ok: true,\n value: {\n subjectDigest,\n program: first.program.module,\n pass: first.name,\n bindingsDigest,\n closureDigest,\n },\n };\n}\n\nexport async function executeMaterialPreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly rendererReady: boolean;\n readonly worldReady: boolean;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'resource preview host to expose the existing AssetRegistry',\n { phase: 'asset-registry', runId: input.runId },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the requested material',\n input.runId,\n loaded.error,\n );\n const inspected = inspectMaterialSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n if (\n !input.rendererReady ||\n !input.worldReady ||\n renderer === undefined ||\n renderer.drawCalls <= 0 ||\n renderer.nonBlackPixels <= 0 ||\n renderer.observation === undefined\n )\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World and Renderer to be ready',\n { phase: 'renderer', runId: input.runId },\n );\n const observed: MaterialOracleInput['observed'] = {\n subjectDigest: digest(renderer.observation.subjectDigest) ?? '',\n program: digest(renderer.observation.program) ?? '',\n pass: digest(renderer.observation.pass) ?? '',\n bindingsDigest: digest(renderer.observation.bindingsDigest) ?? '',\n closureDigest: digest(renderer.observation.closureDigest) ?? '',\n rendererHealthy: input.rendererReady && input.worldReady,\n drawCalls: renderer.drawCalls,\n nonBlackPixels: renderer.nonBlackPixels,\n };\n const oracle = evaluateMaterialOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered material observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: {\n kind: 'material' as const,\n guid: args.guid,\n digest: inspected.value.subjectDigest,\n },\n presentation: canonicalPresentation('material'),\n recipe: createCanonicalPreviewRecipe('material'),\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { executeMaterialPreview } from './domains/material.js';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport interface MaterialBinding {\n readonly guid: string;\n readonly programDigest: string;\n readonly bindings: readonly string[];\n}\n\nexport interface MaterialPreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: MaterialBinding;\n}\n\nexport interface MaterialPreviewReport {\n readonly kind: 'material';\n readonly bindingGuid: string;\n readonly programDigest: string;\n readonly backgroundNonBlackPixels: number;\n readonly subjectNonBlackPixels: number;\n readonly presentation: 'sphere-studio';\n}\n\nconst materialPreviewArgsSchema: ToolSchema<MaterialPreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a material preview request object' };\n const request = value as Partial<MaterialPreviewRequest>;\n if (request.subject?.kind !== 'MaterialAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a MaterialAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n const binding = request.binding;\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n binding.programDigest.length === 0 ||\n binding.bindings.length === 0\n )\n return { ok: false, error: 'expected a bound MaterialAsset program and bindings' };\n return { ok: true, value: request as MaterialPreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"MaterialAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"programDigest\",\"bindings\"]}}}',\n};\n\nconst materialPreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const materialPreviewDescriptor = {\n id: 'material.preview',\n title: 'Preview material asset',\n summary: 'Renders one bound MaterialAsset on the fixed studio sphere presentation.',\n realm: 'engine' as const,\n argsSchema: materialPreviewArgsSchema,\n resultSchema: materialPreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'MaterialAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nfunction defaultMaterialRunner(\n request: MaterialPreviewRequest,\n): Promise<PreviewDomainResult<MaterialPreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'material'));\n}\n\nexport function createMaterialPreviewContribution(\n runner: PreviewDomainRunner<MaterialPreviewRequest, MaterialPreviewReport> = async (request) =>\n defaultMaterialRunner(request),\n): ToolContribution<MaterialPreviewRequest, unknown> {\n return defineTool(materialPreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n if (\n result.value.report.bindingGuid !== request.subject.guid ||\n result.value.report.subjectNonBlackPixels <= 0 ||\n result.value.report.backgroundNonBlackPixels <= 0 ||\n result.value.report.presentation !== 'sphere-studio'\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'the requested material subject to render with a non-background studio presentation',\n 'Reject fallback geometry, disconnected bindings, and background-only captures.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: result.value.report.bindingGuid,\n subjectNonBlackPixels: result.value.report.subjectNonBlackPixels,\n backgroundNonBlackPixels: result.value.report.backgroundNonBlackPixels,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const materialPreview = defineTool(subjectDescriptor('material'), (args, context) =>\n (async () => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeMaterialPreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n rendererReady: mechanisms.renderer?.rendererReady === true,\n worldReady: mechanisms.renderer?.worldReady === true,\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n })(),\n);\nexport const materialPreviewPlugin = nativePreviewPlugin('material', materialPreview);\nexport default materialPreviewPlugin;\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateMeshOracle, type MeshOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface MeshSubjectInspection {\n readonly subjectDigest: string;\n readonly vertexDigest: string;\n readonly indexDigest: string;\n readonly submeshDigest: string;\n readonly aabbDigest: string;\n readonly aabb: readonly [number, number, number, number, number, number];\n readonly submeshCount: number;\n readonly materialSlotCount: number;\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: MeshSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction digest(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction observedAabb(\n observation: Readonly<Record<string, string | number | boolean | readonly number[]>>,\n): readonly [number, number, number, number, number, number] | undefined {\n const value = observation.aabb;\n if (\n !Array.isArray(value) ||\n value.length !== 6 ||\n value.some((entry) => typeof entry !== 'number' || !Number.isFinite(entry))\n )\n return undefined;\n const [minX, minY, minZ, maxX, maxY, maxZ] = value;\n if (minX > maxX || minY > maxY || minZ > maxZ) return undefined;\n return [minX, minY, minZ, maxX, maxY, maxZ];\n}\n\nexport function inspectMeshSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'mesh') {\n return subjectFailure('resource-preview-kind-mismatch', 'a MeshAsset with kind mesh', {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n });\n }\n const aabbValue = input.asset.aabb;\n const aabb =\n aabbValue instanceof Float32Array ? [...aabbValue] : Array.isArray(aabbValue) ? aabbValue : [];\n if (\n aabb.length !== 6 ||\n aabb.some((value) => typeof value !== 'number' || !Number.isFinite(value))\n ) {\n return subjectFailure('resource-preview-subject-invalid', 'a finite six-value MeshAsset AABB', {\n phase: 'subject',\n guid: input.guid,\n field: 'aabb',\n });\n }\n const [minX, minY, minZ, maxX, maxY, maxZ] = aabb;\n if (minX > maxX || minY > maxY || minZ > maxZ) {\n return subjectFailure('resource-preview-subject-invalid', 'a non-empty MeshAsset AABB', {\n phase: 'subject',\n guid: input.guid,\n field: 'aabb',\n });\n }\n const slots = input.asset.materialSlots;\n const submeshes = input.asset.submeshes;\n if (!Array.isArray(slots) || slots.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every mesh submesh to have a material slot',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'materialSlots',\n },\n );\n }\n if (!Array.isArray(submeshes) || submeshes.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every MeshAsset to declare at least one submesh',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'submeshes',\n },\n );\n }\n for (const submesh of submeshes) {\n if (!isRecord(submesh)) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'each mesh submesh to be structured',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'submeshes',\n },\n );\n }\n const materialSlot = submesh.materialSlot;\n const indexOffset = submesh.indexOffset;\n const indexCount = submesh.indexCount;\n if (\n typeof materialSlot !== 'number' ||\n materialSlot < 0 ||\n materialSlot >= slots.length ||\n typeof indexOffset !== 'number' ||\n typeof indexCount !== 'number' ||\n indexOffset < 0 ||\n indexCount <= 0\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every submesh range and material slot to be valid',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'submeshes',\n },\n );\n }\n }\n const owner = input.asset.ownerFacts;\n const ownerFacts = isRecord(owner) ? owner : input.ownerFacts;\n const subjectDigest = digest(input.asset.digest ?? input.digest ?? ownerFacts?.subjectDigest);\n const vertexDigest = digest(input.asset.vertexDigest ?? ownerFacts?.vertexDigest);\n const indexDigest = digest(input.asset.indexDigest ?? ownerFacts?.indexDigest);\n const submeshDigest = digest(input.asset.submeshDigest ?? ownerFacts?.submeshDigest);\n const aabbDigest = digest(input.asset.aabbDigest ?? ownerFacts?.aabbDigest);\n if (\n subjectDigest === undefined ||\n vertexDigest === undefined ||\n indexDigest === undefined ||\n submeshDigest === undefined ||\n aabbDigest === undefined\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the MeshAsset owner to publish vertex, index, submesh, AABB, and subject digests',\n { phase: 'subject', guid: input.guid, field: 'ownerFacts' },\n );\n }\n return {\n ok: true,\n value: {\n subjectDigest,\n vertexDigest,\n indexDigest,\n submeshDigest,\n aabbDigest,\n aabb: [minX, minY, minZ, maxX, maxY, maxZ],\n submeshCount: submeshes.length,\n materialSlotCount: slots.length,\n },\n };\n}\n\nexport async function executeMeshPreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly rendererReady: boolean;\n readonly worldReady: boolean;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'resource preview host to expose the existing AssetRegistry',\n { phase: 'asset-registry', runId: input.runId },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the requested mesh',\n input.runId,\n loaded.error,\n );\n const inspected = inspectMeshSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n if (\n !input.rendererReady ||\n !input.worldReady ||\n renderer === undefined ||\n renderer.drawCalls <= 0 ||\n renderer.nonBlackPixels <= 0 ||\n renderer.observation === undefined\n )\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World and Renderer to be ready',\n { phase: 'renderer', runId: input.runId },\n );\n const aabb = observedAabb(renderer.observation);\n const submeshCount = renderer.observation.submeshCount;\n const materialSlotCount = renderer.observation.materialSlotCount;\n if (\n aabb === undefined ||\n typeof submeshCount !== 'number' ||\n typeof materialSlotCount !== 'number'\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered mesh observation to include AABB and material-slot facts',\n { phase: 'renderer-observation', runId: input.runId },\n );\n }\n const observed: MeshOracleInput['observed'] = {\n ...inspected.value,\n subjectDigest: digest(renderer.observation.subjectDigest) ?? '',\n vertexDigest: digest(renderer.observation.vertexDigest) ?? '',\n indexDigest: digest(renderer.observation.indexDigest) ?? '',\n submeshDigest: digest(renderer.observation.submeshDigest) ?? '',\n aabbDigest: digest(renderer.observation.aabbDigest) ?? '',\n aabb,\n submeshCount,\n materialSlotCount,\n rendererHealthy: input.rendererReady && input.worldReady,\n drawCalls: renderer.drawCalls,\n nonBlackPixels: renderer.nonBlackPixels,\n };\n const oracle = evaluateMeshOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered mesh observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: { kind: 'mesh' as const, guid: args.guid, digest: inspected.value.subjectDigest },\n presentation: canonicalPresentation('mesh'),\n recipe: createCanonicalPreviewRecipe('mesh'),\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { executeMeshPreview } from './domains/mesh.js';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport interface MeshSubmeshBinding {\n readonly id: string;\n readonly vertexCount: number;\n readonly indexCount: number;\n}\n\nexport interface MeshAabb {\n readonly min: readonly [number, number, number];\n readonly max: readonly [number, number, number];\n}\n\nexport interface MeshBinding {\n readonly guid: string;\n readonly vertexDigest: string;\n readonly indexDigest: string;\n readonly submeshes: readonly MeshSubmeshBinding[];\n readonly aabb: MeshAabb;\n}\n\nexport interface MeshPreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: MeshBinding;\n}\n\nexport interface MeshPreviewReport {\n readonly kind: 'mesh';\n readonly bindingGuid: string;\n readonly submeshCount: number;\n readonly expectedSubmeshCount: number;\n readonly vertexCount: number;\n readonly indexCount: number;\n readonly framing: 'aabb' | 'inverted-aabb';\n}\n\nconst meshPreviewArgsSchema: ToolSchema<MeshPreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a mesh preview request object' };\n const request = value as Partial<MeshPreviewRequest>;\n const binding = request.binding;\n if (request.subject?.kind !== 'MeshAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a MeshAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n binding.vertexDigest.length === 0 ||\n binding.indexDigest.length === 0 ||\n binding.submeshes.length === 0 ||\n binding.submeshes.some(\n (submesh) => submesh.id.length === 0 || submesh.vertexCount <= 0 || submesh.indexCount <= 0,\n ) ||\n binding.aabb.min.some((value) => !Number.isFinite(value)) ||\n binding.aabb.max.some((value) => !Number.isFinite(value)) ||\n binding.aabb.min.some((value, index) => value >= (binding.aabb.max[index] ?? Number.NaN))\n )\n return { ok: false, error: 'expected complete mesh buffers and a valid AABB' };\n return { ok: true, value: request as MeshPreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"MeshAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"vertexDigest\",\"indexDigest\",\"submeshes\",\"aabb\"]}}}',\n};\n\nconst meshPreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const meshPreviewDescriptor = {\n id: 'mesh.preview',\n title: 'Preview mesh asset',\n summary: 'Draws every bound mesh submesh with neutral material and AABB framing.',\n realm: 'engine' as const,\n argsSchema: meshPreviewArgsSchema,\n resultSchema: meshPreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'MeshAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nfunction defaultMeshRunner(\n request: MeshPreviewRequest,\n): Promise<PreviewDomainResult<MeshPreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'mesh'));\n}\n\nexport function createMeshPreviewContribution(\n runner: PreviewDomainRunner<MeshPreviewRequest, MeshPreviewReport> = async (request) =>\n defaultMeshRunner(request),\n): ToolContribution<MeshPreviewRequest, unknown> {\n return defineTool(meshPreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n const report = result.value.report;\n if (\n report.bindingGuid !== request.subject.guid ||\n report.submeshCount !== report.expectedSubmeshCount ||\n report.submeshCount !== request.binding.submeshes.length ||\n report.vertexCount !==\n request.binding.submeshes.reduce((sum, submesh) => sum + submesh.vertexCount, 0) ||\n report.indexCount !==\n request.binding.submeshes.reduce((sum, submesh) => sum + submesh.indexCount, 0) ||\n report.framing !== 'aabb'\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'all requested submeshes and the source AABB to drive the presentation',\n 'Reject partial geometry, fallback meshes, and inverted framing before publishing evidence.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: report.bindingGuid,\n expectedSubmeshCount: request.binding.submeshes.length,\n actualSubmeshCount: report.submeshCount,\n framing: report.framing,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const meshPreview = defineTool(subjectDescriptor('mesh'), (args, context) =>\n (async () => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeMeshPreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n rendererReady: mechanisms.renderer?.rendererReady === true,\n worldReady: mechanisms.renderer?.worldReady === true,\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n })(),\n);\nexport const meshPreviewPlugin = nativePreviewPlugin('mesh', meshPreview);\nexport default meshPreviewPlugin;\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateTextureOracle, type TextureOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface TextureSubjectInspection {\n readonly subjectDigest: string;\n readonly boundDigest: string;\n readonly dimensions: readonly [number, number];\n readonly format: string;\n readonly colorSpace: string;\n readonly mipCount: number;\n readonly uvDigest: string;\n readonly filter: string;\n readonly bindingDigest: string;\n readonly payloadClass: TextureOracleInput['observed']['payloadClass'];\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: TextureSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction requiredString(asset: Record<string, unknown>, field: string): string | undefined {\n const value = asset[field];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction requiredNumber(asset: Record<string, unknown>, field: string): number | undefined {\n const value = asset[field];\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction authoredMipCount(\n asset: Record<string, unknown>,\n shapeDimensions: readonly (number | undefined)[] | undefined,\n): number | undefined {\n const mips = isRecord(asset.mips) ? asset.mips : undefined;\n if (mips?.kind === 'packed') {\n const levels = requiredNumber(mips, 'levelCount');\n return levels !== undefined && Number.isInteger(levels) && levels > 0 ? levels : undefined;\n }\n if (mips?.kind !== 'generate') return mips?.kind === 'none' ? 1 : undefined;\n const [width, height] = shapeDimensions ?? [undefined, undefined];\n if (width === undefined || height === undefined) return undefined;\n const shape = isRecord(asset.shape) ? asset.shape : undefined;\n const extent = shape !== undefined && isRecord(shape.extent) ? shape.extent : undefined;\n const depth =\n shape?.viewDimension === '3d' && extent !== undefined\n ? (requiredNumber(extent, 'depth') ?? 1)\n : 1;\n let largest = Math.max(width, height, depth);\n let levels = 1;\n while (largest > 1) {\n largest = Math.max(1, Math.floor(largest / 2));\n levels += 1;\n }\n return levels;\n}\n\nfunction isTexturePayloadClass(value: unknown): value is TextureSubjectInspection['payloadClass'] {\n return (\n value === 'black' || value === 'transparent' || value === 'single-channel' || value === 'color'\n );\n}\n\nfunction classifyPayload(\n data: unknown,\n format: string | undefined,\n): TextureSubjectInspection['payloadClass'] | undefined {\n const bytes =\n data instanceof Uint8Array || data instanceof Uint8ClampedArray\n ? [...data]\n : Array.isArray(data) && data.every((value) => typeof value === 'number')\n ? data\n : undefined;\n if (bytes === undefined || bytes.length === 0) return undefined;\n const normalizedFormat = format?.toLowerCase() ?? '';\n const singleChannel = normalizedFormat.startsWith('r') && !normalizedFormat.startsWith('rg');\n if (bytes.every((value) => value === 0)) return 'black';\n if (singleChannel) return 'single-channel';\n // RG carries two color/data channels and has no alpha lane. Only the\n // explicitly four-channel formats below permit a transparent classification;\n // compressed and packed formats remain an opaque color observation here.\n if (normalizedFormat.startsWith('rgba') || normalizedFormat.startsWith('bgra')) {\n const alpha = bytes.filter((_, index) => (index + 1) % 4 === 0);\n if (alpha.length > 0 && alpha.every((value) => value === 0)) return 'transparent';\n }\n return 'color';\n}\n\ntype Observation = Readonly<Record<string, string | number | boolean | readonly number[]>>;\n\nfunction observationString(observation: Observation, field: string): string | undefined {\n const value = observation[field];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction observationDimensions(observation: Observation): readonly [number, number] | undefined {\n const value = observation.dimensions;\n if (\n !Array.isArray(value) ||\n value.length !== 2 ||\n value.some((entry) => typeof entry !== 'number' || !Number.isInteger(entry) || entry <= 0)\n )\n return undefined;\n return [value[0] as number, value[1] as number];\n}\n\nfunction observationPayloadClass(\n observation: Observation,\n): TextureSubjectInspection['payloadClass'] | undefined {\n const value = observation.payloadClass;\n return isTexturePayloadClass(value) ? value : undefined;\n}\n\nexport function inspectTextureSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'texture') {\n return subjectFailure('resource-preview-kind-mismatch', 'a TextureAsset with kind texture', {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n });\n }\n const asset = input.asset;\n const inlineOwner = asset.ownerFacts;\n const ownerFacts = isRecord(inlineOwner) ? inlineOwner : input.ownerFacts;\n const readString = (field: string): string | undefined =>\n requiredString(asset, field) ?? requiredString(ownerFacts ?? {}, field);\n const subjectDigest = readString('digest') ?? input.digest ?? readString('subjectDigest');\n const boundDigest = readString('boundDigest');\n const uvDigest = readString('uvDigest');\n const bindingDigest = readString('bindingDigest');\n const format = readString('format');\n const colorSpace = readString('colorSpace');\n const filter = readString('filter');\n const shape = isRecord(asset.shape) ? asset.shape : undefined;\n const extent = shape !== undefined && isRecord(shape.extent) ? shape.extent : undefined;\n const shapeDimensions =\n extent !== undefined\n ? [requiredNumber(extent, 'width'), requiredNumber(extent, 'height')]\n : undefined;\n const dimensionsValue = asset.dimensions;\n const dimensions = Array.isArray(dimensionsValue)\n ? dimensionsValue\n : shapeDimensions?.[0] !== undefined && shapeDimensions[1] !== undefined\n ? shapeDimensions\n : [requiredNumber(asset, 'width'), requiredNumber(asset, 'height')];\n const authoredMips = isRecord(asset.mips) ? asset.mips : undefined;\n const packedLevelCount =\n authoredMips?.kind === 'packed' ? requiredNumber(authoredMips, 'levelCount') : undefined;\n if (\n authoredMips?.kind === 'packed' &&\n (packedLevelCount === undefined || !Number.isInteger(packedLevelCount) || packedLevelCount <= 0)\n ) {\n return subjectFailure('resource-preview-subject-invalid', 'TextureAsset packed mip metadata', {\n phase: 'subject',\n guid: input.guid,\n field: 'mips.levelCount',\n });\n }\n const mipCount =\n authoredMipCount(asset, shapeDimensions) ??\n requiredNumber(asset, 'mipCount') ??\n requiredNumber(asset, 'mipLevelCount') ??\n requiredNumber(ownerFacts ?? {}, 'mipCount') ??\n requiredNumber(ownerFacts ?? {}, 'mipLevelCount') ??\n 1;\n const payloadClass =\n readString('payloadClass') ?? classifyPayload(asset.data, format) ?? undefined;\n if (\n subjectDigest === undefined ||\n boundDigest === undefined ||\n uvDigest === undefined ||\n bindingDigest === undefined ||\n format === undefined ||\n colorSpace === undefined ||\n filter === undefined ||\n dimensions.length !== 2 ||\n dimensions.some(\n (value) => typeof value !== 'number' || !Number.isInteger(value) || value <= 0,\n ) ||\n !Number.isInteger(mipCount) ||\n mipCount <= 0 ||\n !isTexturePayloadClass(payloadClass)\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'TextureAsset dimensions and owner binding facts',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'digest/dimensions/format/colorSpace/mipCount/uv/filter/binding',\n },\n );\n }\n const [width = 0, height = 0] = dimensions;\n return {\n ok: true,\n value: {\n subjectDigest,\n boundDigest,\n dimensions: [width, height],\n format,\n colorSpace,\n mipCount,\n uvDigest,\n filter,\n bindingDigest,\n payloadClass,\n },\n };\n}\n\nexport async function executeTexturePreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the existing AssetRegistry capability',\n {\n phase: 'asset-registry',\n runId: input.runId,\n },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the texture',\n input.runId,\n loaded.error,\n );\n const inspected = inspectTextureSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n const drawCalls = renderer?.texture?.drawCalls ?? renderer?.drawCalls ?? 0;\n if (\n renderer?.rendererReady !== true ||\n renderer.worldReady !== true ||\n drawCalls <= 0 ||\n renderer.observation === undefined\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World and Renderer texture stage to produce an observed output',\n {\n phase: 'renderer',\n runId: input.runId,\n },\n );\n }\n const observation = renderer.observation;\n const observedPayloadClass = observationPayloadClass(observation);\n if (observedPayloadClass === undefined) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered texture observation to classify the actual payload',\n { phase: 'renderer-observation', runId: input.runId },\n );\n }\n if (observation.rendererTextureResident !== true) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the Renderer to report a resident texture binding for the preview draw',\n { phase: 'renderer-texture-binding', runId: input.runId },\n );\n }\n const observed: TextureOracleInput['observed'] = {\n subjectDigest: observationString(observation, 'subjectDigest') ?? '',\n boundDigest: observationString(observation, 'boundDigest') ?? '',\n dimensions: observationDimensions(observation) ?? [0, 0],\n format: observationString(observation, 'format') ?? '',\n colorSpace: observationString(observation, 'colorSpace') ?? '',\n mipCount: typeof observation.mipCount === 'number' ? observation.mipCount : 0,\n uvDigest: observationString(observation, 'uvDigest') ?? '',\n filter: observationString(observation, 'filter') ?? '',\n bindingDigest: observationString(observation, 'bindingDigest') ?? '',\n rendererHealthy: renderer.rendererReady && renderer.worldReady,\n drawCalls,\n nonBlackPixels: renderer.nonBlackPixels,\n payloadClass: observedPayloadClass,\n };\n const oracle = evaluateTextureOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered texture binding observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: { kind: 'texture' as const, guid: args.guid, digest: inspected.value.subjectDigest },\n presentation: canonicalPresentation('texture'),\n recipe: createCanonicalPreviewRecipe('texture'),\n quad: { projection: 'orthographic', aspect: 'preserving', stage: 'unlit-checker' },\n binding: { filter: inspected.value.filter, digest: inspected.value.bindingDigest },\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { executeTexturePreview } from './domains/texture.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport type TextureColorSpace = 'linear' | 'srgb' | 'hdr';\n\nexport interface TextureBinding {\n readonly guid: string;\n readonly width: number;\n readonly height: number;\n readonly format: string;\n readonly colorSpace: TextureColorSpace;\n readonly alpha: boolean;\n readonly mipLevels: number;\n readonly channels: number;\n}\n\nexport interface TexturePreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: TextureBinding;\n}\n\nexport interface TexturePreviewReport {\n readonly kind: 'texture';\n readonly bindingGuid: string;\n readonly width: number;\n readonly height: number;\n readonly format: string;\n readonly colorSpace: TextureColorSpace;\n readonly alpha: boolean;\n readonly mipLevels: number;\n readonly channels: number;\n readonly aspectRatio: number;\n readonly checkerPixels: number;\n readonly subjectNonBlackPixels: number;\n}\n\nconst texturePreviewArgsSchema: ToolSchema<TexturePreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a texture preview request object' };\n const request = value as Partial<TexturePreviewRequest>;\n const binding = request.binding;\n if (request.subject?.kind !== 'TextureAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a TextureAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n !Number.isSafeInteger(binding.width) ||\n binding.width < 1 ||\n !Number.isSafeInteger(binding.height) ||\n binding.height < 1 ||\n binding.format.length === 0 ||\n !['linear', 'srgb', 'hdr'].includes(binding.colorSpace) ||\n !Number.isSafeInteger(binding.mipLevels) ||\n binding.mipLevels < 1 ||\n !Number.isSafeInteger(binding.channels) ||\n binding.channels < 1 ||\n binding.channels > 4\n )\n return {\n ok: false,\n error: 'expected complete texture dimensions, format, and color-space facts',\n };\n return { ok: true, value: request as TexturePreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"TextureAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"width\",\"height\",\"format\",\"colorSpace\",\"alpha\",\"mipLevels\",\"channels\"]}}}',\n};\n\nconst texturePreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const texturePreviewDescriptor = {\n id: 'texture.preview',\n title: 'Preview texture asset',\n summary: 'Presents one texture on an aspect-correct quad with alpha checker evidence.',\n realm: 'engine' as const,\n argsSchema: texturePreviewArgsSchema,\n resultSchema: texturePreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'TextureAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nfunction defaultTextureRunner(\n request: TexturePreviewRequest,\n): Promise<PreviewDomainResult<TexturePreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'texture'));\n}\n\nexport function createTexturePreviewContribution(\n runner: PreviewDomainRunner<TexturePreviewRequest, TexturePreviewReport> = async (request) =>\n defaultTextureRunner(request),\n): ToolContribution<TexturePreviewRequest, unknown> {\n return defineTool(texturePreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n const report = result.value.report;\n const binding = request.binding;\n if (\n report.bindingGuid !== request.subject.guid ||\n report.width !== binding.width ||\n report.height !== binding.height ||\n report.format !== binding.format ||\n report.colorSpace !== binding.colorSpace ||\n report.alpha !== binding.alpha ||\n report.mipLevels !== binding.mipLevels ||\n report.channels !== binding.channels ||\n report.aspectRatio !== binding.width / binding.height ||\n report.checkerPixels <= 0 ||\n report.subjectNonBlackPixels <= 0\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'the texture binding facts and aspect-correct checker presentation to agree',\n 'Reject texture replacement, color-space drift, and background-only captures.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: report.bindingGuid,\n expectedFormat: binding.format,\n actualFormat: report.format,\n expectedColorSpace: binding.colorSpace,\n actualColorSpace: report.colorSpace,\n expectedAspectRatio: binding.width / binding.height,\n actualAspectRatio: report.aspectRatio,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const texturePreview = defineTool(subjectDescriptor('texture'), (args, context) => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeTexturePreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n});\nexport const texturePreviewPlugin = nativePreviewPlugin('texture', texturePreview);\nexport default texturePreviewPlugin;\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateVfxOracle, type VfxOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface VfxSubjectInspection {\n readonly subjectDigest: string;\n readonly programFingerprint: string;\n readonly emitterDigest: string;\n readonly sampleDigest: string;\n readonly boundsDigest: string;\n readonly computeDigest: string;\n readonly indirectDigest: string;\n readonly contactSheetDigest?: string;\n readonly authoredBounds: readonly [number, number, number, number, number, number];\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: VfxSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction requiredString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction finiteVector(value: unknown, length: number): number[] | undefined {\n if (\n !Array.isArray(value) ||\n value.length !== length ||\n value.some((entry) => typeof entry !== 'number' || !Number.isFinite(entry))\n )\n return undefined;\n return value;\n}\n\nfunction authoredBounds(\n emitters: readonly Record<string, unknown>[],\n): readonly [number, number, number, number, number, number] | undefined {\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n for (const emitter of emitters) {\n const bounds = emitter.bounds;\n if (!isRecord(bounds) || typeof bounds.kind !== 'string') return undefined;\n if (bounds.kind === 'sphere') {\n const center = finiteVector(bounds.center, 3);\n const radius = bounds.radius;\n if (\n center === undefined ||\n typeof radius !== 'number' ||\n !Number.isFinite(radius) ||\n radius < 0\n )\n return undefined;\n const [x, y, z] = center;\n if (x === undefined || y === undefined || z === undefined) return undefined;\n minX = Math.min(minX, x - radius);\n minY = Math.min(minY, y - radius);\n minZ = Math.min(minZ, z - radius);\n maxX = Math.max(maxX, x + radius);\n maxY = Math.max(maxY, y + radius);\n maxZ = Math.max(maxZ, z + radius);\n continue;\n }\n if (bounds.kind === 'aabb') {\n const min = finiteVector(bounds.min, 3);\n const max = finiteVector(bounds.max, 3);\n if (\n min === undefined ||\n max === undefined ||\n min.some((entry, index) => entry > (max[index] ?? entry))\n )\n return undefined;\n const [loX, loY, loZ] = min;\n const [hiX, hiY, hiZ] = max;\n if (\n loX === undefined ||\n loY === undefined ||\n loZ === undefined ||\n hiX === undefined ||\n hiY === undefined ||\n hiZ === undefined\n )\n return undefined;\n minX = Math.min(minX, loX);\n minY = Math.min(minY, loY);\n minZ = Math.min(minZ, loZ);\n maxX = Math.max(maxX, hiX);\n maxY = Math.max(maxY, hiY);\n maxZ = Math.max(maxZ, hiZ);\n continue;\n }\n return undefined;\n }\n if (![minX, minY, minZ, maxX, maxY, maxZ].every(Number.isFinite)) return undefined;\n return [minX, minY, minZ, maxX, maxY, maxZ];\n}\n\nfunction jsonDigest(value: unknown): string | undefined {\n const encoded = JSON.stringify(value);\n return typeof encoded === 'string' && encoded.length > 0 ? encoded : undefined;\n}\n\nexport function inspectVfxSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'particle-effect') {\n return subjectFailure(\n 'resource-preview-kind-mismatch',\n 'a ParticleEffectAsset with kind particle-effect',\n {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n },\n );\n }\n if (input.asset.schemaVersion !== 3) {\n return subjectFailure('resource-preview-subject-invalid', 'a schema-v3 ParticleEffectAsset', {\n phase: 'subject',\n guid: input.guid,\n field: 'schemaVersion',\n });\n }\n const program = input.asset.program;\n const programFingerprint = requiredString(input.asset.programFingerprint);\n if (!isRecord(program) || program.format !== 'forgeax-vfx-program-3') {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'a cooked forgeax-vfx-program-3 payload',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'program',\n },\n );\n }\n if (\n programFingerprint === undefined ||\n requiredString(program.fingerprint) !== programFingerprint\n ) {\n return subjectFailure('resource-preview-subject-invalid', 'non-empty authored VFX bounds', {\n phase: 'subject',\n guid: input.guid,\n field: 'programFingerprint',\n });\n }\n const rawEmitters = Array.isArray(program.emitters) ? program.emitters : [];\n const emitters = rawEmitters.filter(isRecord);\n const definitions = Array.isArray(input.asset.emitters)\n ? input.asset.emitters.filter(isRecord)\n : [];\n if (\n emitters.length === 0 ||\n emitters.length !== rawEmitters.length ||\n definitions.length !== emitters.length\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the ParticleEffectAsset to publish matching cooked emitter definitions',\n { phase: 'subject', guid: input.guid, field: 'emitters' },\n );\n }\n for (const [index, emitter] of emitters.entries()) {\n const id = requiredString(emitter.id);\n const module = requiredString(emitter.module);\n const capacity = emitter.capacity;\n const backend = emitter.backend;\n const renderers = emitter.renderers;\n if (\n id === undefined ||\n module === undefined ||\n typeof capacity !== 'number' ||\n !Number.isSafeInteger(capacity) ||\n capacity <= 0 ||\n !isRecord(backend) ||\n backend.required !== 'gpu' ||\n !isRecord(emitter.schedule) ||\n !Array.isArray(renderers) ||\n !isRecord(definitions[index]) ||\n definitions[index].id !== id ||\n definitions[index].capacity !== capacity\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'each cooked emitter to match its ParticleEffectAsset definition',\n { phase: 'subject', guid: input.guid, field: `emitters[${index}]` },\n );\n }\n }\n const bounds = authoredBounds(emitters);\n if (bounds === undefined) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'finite authored VFX emitter bounds',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'program.emitters[].bounds',\n },\n );\n }\n const emitterDigest = jsonDigest(\n emitters.map(({ id, module, capacity }) => ({ id, module, capacity })),\n );\n const sampleDigest = jsonDigest(emitters.map(({ id, schedule }) => ({ id, schedule })));\n const boundsDigest = jsonDigest(\n emitters.map(({ id, bounds: emitterBounds }) => ({ id, bounds: emitterBounds })),\n );\n const indirectDigest = jsonDigest(\n emitters.map(({ id, renderers }) => ({\n id,\n renderers: (renderers as readonly unknown[]).filter(isRecord).map((renderer) => ({\n kind: renderer.kind,\n enabled: renderer.enabled ?? true,\n })),\n })),\n );\n if (\n emitterDigest === undefined ||\n sampleDigest === undefined ||\n boundsDigest === undefined ||\n indirectDigest === undefined\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the cooked VFX program to publish stable emitter, schedule, bounds, and renderer facts',\n { phase: 'subject', guid: input.guid, field: 'program.emitters' },\n );\n }\n const ownerFacts = isRecord(input.asset.ownerFacts) ? input.asset.ownerFacts : input.ownerFacts;\n const subjectDigest =\n requiredString(input.asset.digest) ??\n requiredString(input.digest) ??\n requiredString(ownerFacts?.subjectDigest) ??\n programFingerprint;\n const contactSheetDigest = requiredString(ownerFacts?.contactSheetDigest);\n return {\n ok: true,\n value: {\n subjectDigest,\n programFingerprint,\n emitterDigest,\n sampleDigest,\n boundsDigest,\n computeDigest: programFingerprint,\n indirectDigest,\n ...(contactSheetDigest === undefined ? {} : { contactSheetDigest }),\n authoredBounds: bounds,\n },\n };\n}\n\nexport async function executeVfxPreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the existing AssetRegistry capability',\n {\n phase: 'asset-registry',\n runId: input.runId,\n },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the VFX',\n input.runId,\n loaded.error,\n );\n const inspected = inspectVfxSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n const runtime = input.renderer?.vfx;\n if (\n renderer?.rendererReady !== true ||\n renderer.worldReady !== true ||\n runtime === undefined ||\n renderer.observation === undefined\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World, Renderer, and VFX compute runtime',\n {\n phase: 'renderer',\n runId: input.runId,\n },\n );\n }\n const observation = renderer.observation;\n const observedString = (field: string): string =>\n typeof observation[field] === 'string' ? (observation[field] as string) : '';\n const authoredBounds = observation.authoredBounds;\n const seed = observation.seed;\n const fixedDelta = observation.fixedDelta;\n const timelineFrames = observation.timelineFrames;\n if (\n !Array.isArray(authoredBounds) ||\n authoredBounds.length !== 6 ||\n authoredBounds.some((value) => typeof value !== 'number' || !Number.isFinite(value)) ||\n typeof seed !== 'number' ||\n typeof fixedDelta !== 'number' ||\n typeof timelineFrames !== 'number' ||\n !Number.isInteger(timelineFrames) ||\n timelineFrames <= 0 ||\n !Number.isFinite(seed) ||\n !Number.isFinite(fixedDelta) ||\n fixedDelta <= 0\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the VFX render observation to include authored bounds and timeline facts',\n { phase: 'renderer-observation', runId: input.runId },\n );\n }\n const observed: VfxOracleInput['observed'] = {\n ...inspected.value,\n subjectDigest: observedString('subjectDigest'),\n programFingerprint: observedString('programFingerprint'),\n emitterDigest: observedString('emitterDigest'),\n sampleDigest: observedString('sampleDigest'),\n boundsDigest: observedString('boundsDigest'),\n computeDigest: observedString('computeDigest'),\n indirectDigest: observedString('indirectDigest'),\n ...(observedString('contactSheetDigest') === ''\n ? {}\n : { contactSheetDigest: observedString('contactSheetDigest') }),\n authoredBounds: authoredBounds as unknown as readonly [\n number,\n number,\n number,\n number,\n number,\n number,\n ],\n seed,\n fixedDelta,\n timelineFrames,\n rendererHealthy: renderer.rendererReady && renderer.worldReady,\n dispatches: runtime.dispatches,\n indirectDraws: runtime.indirectDraws,\n subjectOutputs: runtime.subjectOutputs,\n nonBlackPixels: renderer.nonBlackPixels,\n };\n const oracle = evaluateVfxOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the VFX compute and indirect observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: { kind: 'vfx' as const, guid: args.guid, digest: inspected.value.subjectDigest },\n presentation: canonicalPresentation('vfx'),\n recipe: createCanonicalPreviewRecipe('vfx'),\n authoredBounds: inspected.value.authoredBounds,\n timeline: {\n seed,\n fixedDelta,\n frames: timelineFrames,\n },\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { executeVfxPreview } from './domains/vfx.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport interface VfxBinding {\n readonly guid: string;\n readonly effectDigest: string;\n}\n\nexport interface VfxSimulationInput {\n readonly seed: number;\n readonly deltaSeconds: number;\n readonly frames: number;\n}\n\nexport interface VfxPreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: VfxBinding;\n readonly simulation: VfxSimulationInput;\n}\n\nexport interface VfxPreviewReport {\n readonly kind: 'vfx';\n readonly bindingGuid: string;\n readonly seed: number;\n readonly deltaSeconds: number;\n readonly frames: number;\n readonly computeSteps: number;\n readonly drawCalls: number;\n readonly subjectOutputDigest: string;\n readonly deterministicDigest: string;\n readonly captureNonBlackPixels: number;\n}\n\nconst vfxPreviewArgsSchema: ToolSchema<VfxPreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a VFX preview request object' };\n const request = value as Partial<VfxPreviewRequest>;\n const binding = request.binding;\n const simulation = request.simulation;\n if (request.subject?.kind !== 'ParticleEffectAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a ParticleEffectAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n binding.effectDigest.length === 0 ||\n simulation === undefined ||\n !Number.isSafeInteger(simulation.seed) ||\n simulation.deltaSeconds <= 0 ||\n !Number.isFinite(simulation.deltaSeconds) ||\n !Number.isSafeInteger(simulation.frames) ||\n simulation.frames < 1 ||\n simulation.frames > 240\n )\n return { ok: false, error: 'expected a bound effect and bounded deterministic timeline' };\n return { ok: true, value: request as VfxPreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\",\"simulation\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"ParticleEffectAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"effectDigest\"]},\"simulation\":{\"type\":\"object\",\"required\":[\"seed\",\"deltaSeconds\",\"frames\"]}}}',\n};\n\nconst vfxPreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const vfxPreviewDescriptor = {\n id: 'vfx.preview',\n title: 'Preview particle effect asset',\n summary: 'Runs a fixed-seed particle compute/draw timeline and captures its subject output.',\n realm: 'engine' as const,\n argsSchema: vfxPreviewArgsSchema,\n resultSchema: vfxPreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'ParticleEffectAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nexport function vfxDeterministicDigest(request: VfxPreviewRequest): string {\n return `sha256:vfx:${request.binding.effectDigest}:${request.simulation.seed}:${request.simulation.deltaSeconds}:${request.simulation.frames}`;\n}\n\nfunction defaultVfxRunner(\n request: VfxPreviewRequest,\n): Promise<PreviewDomainResult<VfxPreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'vfx'));\n}\n\nexport function createVfxPreviewContribution(\n runner: PreviewDomainRunner<VfxPreviewRequest, VfxPreviewReport> = async (request) =>\n defaultVfxRunner(request),\n): ToolContribution<VfxPreviewRequest, unknown> {\n return defineTool(vfxPreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n const report = result.value.report;\n const expectedDigest = vfxDeterministicDigest(request);\n if (\n report.bindingGuid !== request.subject.guid ||\n report.seed !== request.simulation.seed ||\n report.deltaSeconds !== request.simulation.deltaSeconds ||\n report.frames !== request.simulation.frames ||\n report.computeSteps !== request.simulation.frames ||\n report.drawCalls !== request.simulation.frames ||\n report.subjectOutputDigest.length === 0 ||\n report.deterministicDigest !== expectedDigest ||\n report.captureNonBlackPixels <= 0\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'the effect binding, fixed simulation input, compute/draw steps, and subject output to agree',\n 'Reject stale seed/delta reports and captures without a subject output.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: report.bindingGuid,\n expectedDigest,\n actualDigest: report.deterministicDigest,\n computeSteps: report.computeSteps,\n drawCalls: report.drawCalls,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const vfxPreview = defineTool(subjectDescriptor('vfx'), (args, context) =>\n (async () => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeVfxPreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n })(),\n);\nexport const vfxPreviewPlugin = nativePreviewPlugin('vfx', vfxPreview);\nexport default vfxPreviewPlugin;\n","import type { MaterialAsset, MeshAsset } from '@forgeax/engine-types';\nimport {\n type MaterialBinding,\n type MaterialPreviewRequest,\n materialPreviewDescriptor,\n} from './material.js';\nimport { type MeshBinding, type MeshPreviewRequest, meshPreviewDescriptor } from './mesh.js';\nimport {\n type TextureBinding,\n type TexturePreviewRequest,\n texturePreviewDescriptor,\n} from './texture.js';\nimport {\n type VfxBinding,\n type VfxPreviewRequest,\n type VfxSimulationInput,\n vfxPreviewDescriptor,\n} from './vfx.js';\n\nexport type PreviewSnapshot = MaterialPreviewRequest['snapshot'];\nexport type MaterialPreviewPrimitive = MaterialPreviewRequest & {\n readonly operationId: typeof materialPreviewDescriptor.id;\n readonly source: 'engine';\n};\nexport type MeshPreviewPrimitive = MeshPreviewRequest & {\n readonly operationId: typeof meshPreviewDescriptor.id;\n readonly source: 'engine';\n};\nexport type VfxPreviewPrimitive = VfxPreviewRequest & {\n readonly operationId: typeof vfxPreviewDescriptor.id;\n readonly source: 'engine';\n};\nexport type TexturePreviewPrimitive = TexturePreviewRequest & {\n readonly operationId: typeof texturePreviewDescriptor.id;\n readonly source: 'engine';\n};\n\nexport function previewSnapshot(subjectGuid: string, revision = 0): PreviewSnapshot {\n if (subjectGuid.length === 0 || !Number.isSafeInteger(revision) || revision < 0) {\n throw new Error('preview primitive requires a stable subject snapshot');\n }\n return { revision, digest: `project-snapshot:${subjectGuid}:${revision}` };\n}\n\nexport function materialBindingFromPayload(\n guid: string,\n payload: MaterialAsset,\n): MaterialBinding | undefined {\n if (payload.kind !== 'material' || payload.passes === undefined || payload.passes.length === 0)\n return undefined;\n const program = payload.passes[0]?.program;\n if (!program?.module || payload.parameters === undefined || payload.parameters.length === 0)\n return undefined;\n return {\n guid,\n programDigest: `material-program:${program.module}`,\n bindings: payload.parameters.map((parameter) => parameter.name),\n };\n}\n\nexport function meshBindingFromPayload(guid: string, payload: MeshAsset): MeshBinding | undefined {\n if (\n payload.kind !== 'mesh' ||\n payload.vertices.length === 0 ||\n !payload.aabb ||\n payload.aabb.length !== 6\n )\n return undefined;\n const indices = payload.indices?.length ?? payload.vertices.length / 3;\n const [minX, minY, minZ, maxX, maxY, maxZ] = payload.aabb;\n if (\n minX === undefined ||\n minY === undefined ||\n minZ === undefined ||\n maxX === undefined ||\n maxY === undefined ||\n maxZ === undefined\n )\n return undefined;\n const submeshes =\n payload.submeshes.length > 0\n ? payload.submeshes.map((submesh, index) => ({\n id: `submesh-${index}`,\n vertexCount: submesh.vertexCount,\n indexCount: submesh.indexCount,\n }))\n : [{ id: 'mesh', vertexCount: payload.vertices.length / 3, indexCount: indices }];\n if (submeshes.some((submesh) => submesh.vertexCount <= 0 || submesh.indexCount <= 0))\n return undefined;\n return {\n guid,\n vertexDigest: `mesh-vertices:${payload.vertices.length}`,\n indexDigest: `mesh-indices:${indices}`,\n submeshes,\n aabb: {\n min: [minX, minY, minZ],\n max: [maxX, maxY, maxZ],\n },\n };\n}\n\nfunction assertSnapshot(snapshot: PreviewSnapshot): void {\n if (\n !Number.isSafeInteger(snapshot.revision) ||\n snapshot.revision < 0 ||\n snapshot.digest.length === 0\n )\n throw new Error('preview primitive requires a revisioned snapshot');\n}\n\nfunction assertSubject(subjectGuid: string, bindingGuid: string, domain: string): void {\n if (subjectGuid.length === 0 || bindingGuid !== subjectGuid)\n throw new Error(`${domain} preview primitive subject and binding are disconnected`);\n}\n\nfunction subjectKind(operationId: string): string {\n if (operationId === 'material.preview') return 'MaterialAsset';\n if (operationId === 'mesh.preview') return 'MeshAsset';\n if (operationId === 'vfx.preview') return 'ParticleEffectAsset';\n return 'TextureAsset';\n}\n\nfunction base<\n T extends {\n readonly subject: { readonly guid: string };\n readonly binding: { readonly guid: string };\n },\n>(\n operationId: string,\n subjectGuid: string,\n snapshot: PreviewSnapshot,\n binding: T['binding'],\n value: Omit<T, 'subject' | 'snapshot' | 'binding' | 'operationId' | 'source'>,\n): T & { readonly operationId: string; readonly source: 'engine' } {\n assertSnapshot(snapshot);\n assertSubject(subjectGuid, binding.guid, operationId);\n return Object.freeze({\n ...value,\n operationId,\n source: 'engine' as const,\n subject: { kind: subjectKind(operationId), guid: subjectGuid },\n snapshot,\n binding,\n }) as unknown as T & { readonly operationId: string; readonly source: 'engine' };\n}\n\nexport function createMaterialPreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: MaterialBinding;\n}): MaterialPreviewPrimitive {\n if (input.binding.programDigest.length === 0 || input.binding.bindings.length === 0)\n throw new Error('material preview primitive requires program bindings');\n return base<MaterialPreviewPrimitive>(\n materialPreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n {},\n ) as MaterialPreviewPrimitive;\n}\n\nexport function createMeshPreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: MeshBinding;\n}): MeshPreviewPrimitive {\n if (\n input.binding.vertexDigest.length === 0 ||\n input.binding.indexDigest.length === 0 ||\n input.binding.submeshes.length === 0\n )\n throw new Error('mesh preview primitive requires complete geometry bindings');\n return base<MeshPreviewPrimitive>(\n meshPreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n {},\n ) as MeshPreviewPrimitive;\n}\n\nexport function createVfxPreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: VfxBinding;\n readonly simulation: VfxSimulationInput;\n}): VfxPreviewPrimitive {\n if (input.binding.effectDigest.length === 0 || input.simulation.frames < 1)\n throw new Error('vfx preview primitive requires a bounded effect simulation');\n return base<VfxPreviewPrimitive>(\n vfxPreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n { simulation: input.simulation },\n ) as VfxPreviewPrimitive;\n}\n\nexport function createTexturePreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: TextureBinding;\n}): TexturePreviewPrimitive {\n if (\n input.binding.width < 1 ||\n input.binding.height < 1 ||\n input.binding.format.length === 0 ||\n input.binding.mipLevels < 1 ||\n input.binding.channels < 1\n )\n throw new Error('texture preview primitive requires complete dimensions and format facts');\n return base<TexturePreviewPrimitive>(\n texturePreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n {},\n ) as TexturePreviewPrimitive;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/host/preview-host.ts","../src/domains/subject.ts","../src/evidence/errors.ts","../src/evidence/manifest.ts","../src/evidence/oracle.ts","../src/evidence/report.ts","../src/host.ts","../src/kit/canonical.ts","../src/kit/presentation.ts","../src/kit/receipt.ts","../src/domains/material.ts","../src/material.ts","../src/domains/mesh.ts","../src/mesh.ts","../src/domains/texture.ts","../src/texture.ts","../src/domains/vfx.ts","../src/vfx.ts","../src/primitive.ts"],"names":["defineToolPlugin","isRecord","base","invalid","createPreviewHost","digest","value","defineTool","levels","requiredString","authoredBounds"],"mappings":"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","file":"index.mjs","sourcesContent":["import { defineToolPlugin, type Plugin, type ToolPlugin } from '@forgeax/engine-plugin';\nimport {\n type ArtifactRef,\n defineToolCapability,\n type SnapshotRef,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface PreviewAssetLoadResult<TAsset = unknown> {\n readonly ok: true;\n readonly value: TAsset;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}\n\nexport interface PreviewAssetLoadFailure {\n readonly ok: false;\n readonly error: unknown;\n}\n\nexport interface PreviewAssetRegistry {\n readonly loadByGuid: <TAsset = unknown>(\n guid: string,\n ) => Promise<PreviewAssetLoadResult<TAsset> | PreviewAssetLoadFailure>;\n}\n\nexport interface PreviewRenderRuntime {\n readonly rendererReady: boolean;\n readonly worldReady: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n /**\n * Facts read back from the real render/asset owner path. Domain executors\n * must not manufacture observed identity from the requested subject.\n */\n readonly observation?: Readonly<Record<string, string | number | boolean | readonly number[]>>;\n readonly vfx?: {\n readonly dispatches: number;\n readonly indirectDraws: number;\n readonly subjectOutputs: number;\n };\n readonly texture?: {\n readonly drawCalls: number;\n };\n}\n\nexport interface PreviewHostMechanisms {\n readonly runId: string;\n readonly snapshot: SnapshotRef;\n readonly projectRoot: string;\n readonly backend: 'webgpu';\n readonly signal: AbortSignal;\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly artifacts?: readonly ArtifactRef[];\n}\n\nexport interface PreviewHost {\n readonly withSession: <T>(\n execute: (mechanisms: PreviewHostMechanisms) => Promise<T>,\n ) => Promise<T>;\n}\n\nexport const previewHostCapability = defineToolCapability<PreviewHost>('preview.host');\n\nexport function previewHostPlugin(host: PreviewHost): Plugin {\n return {\n name: 'forgeax-preview-host',\n provide: previewHostCapability.id,\n apply(ctx) {\n ctx.provide(previewHostCapability.id, host);\n },\n };\n}\n\nexport function bindPreviewHost(plugin: ToolPlugin, host: PreviewHost): ToolPlugin {\n return defineToolPlugin(previewHostPlugin(host), plugin.tools);\n}\n\nexport function createPreviewHost(input: PreviewHostMechanisms): PreviewHost {\n let active = true;\n return {\n async withSession(execute) {\n if (!active || input.signal.aborted) throw new Error('preview-host-session-terminal');\n try {\n return await execute(input);\n } finally {\n active = false;\n }\n },\n };\n}\n","import { defineToolPlugin } from '@forgeax/engine-plugin';\nimport type {\n JsonValue,\n ToolContribution,\n ToolDescriptor,\n ToolExecutionContext,\n ToolSchema,\n} from '@forgeax/engine-tool-runtime';\nimport { previewHostCapability } from '../host/preview-host.js';\nimport type { PreviewSubjectKind } from '../kit/presentation.js';\n\nexport interface ResourcePreviewArgs {\n readonly guid: string;\n /** Square screenshot edge in device pixels. Defaults to 512 and must be a power of two. */\n readonly size?: number;\n}\n\nexport const RESOURCE_PREVIEW_DEFAULT_SIZE = 512;\nexport const RESOURCE_PREVIEW_MIN_SIZE = 64;\nexport const RESOURCE_PREVIEW_MAX_SIZE = 4096;\n\nexport function isResourcePreviewSize(value: unknown): value is number {\n return (\n typeof value === 'number' &&\n Number.isSafeInteger(value) &&\n value >= RESOURCE_PREVIEW_MIN_SIZE &&\n value <= RESOURCE_PREVIEW_MAX_SIZE &&\n (value & (value - 1)) === 0\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\n/** Keep the public result contract concrete at the ToolRuntime boundary. */\nfunction isResourcePreviewResult(value: unknown): boolean {\n if (!isRecord(value)) return false;\n const subject = value.subject;\n if (\n !isRecord(subject) ||\n !isString(subject.kind) ||\n !isString(subject.guid) ||\n !isString(subject.digest)\n )\n return false;\n if (!isRecord(value.presentation) || !isString(value.presentation.kind)) return false;\n if (\n !isRecord(value.recipe) ||\n !isString(value.recipe.schemaVersion) ||\n !isString(value.recipe.recipeDigest)\n )\n return false;\n if (!isRecord(value.oracle) || !isString(value.oracle.status)) return false;\n return Array.isArray(value.artifacts);\n}\n\nexport const resourcePreviewResultSchema: ToolSchema<unknown> = {\n parse(value) {\n return isResourcePreviewResult(value)\n ? { ok: true, value }\n : {\n ok: false,\n error:\n 'resource preview result must include subject, presentation, recipe, oracle, and artifacts',\n };\n },\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"presentation\",\"recipe\",\"oracle\",\"artifacts\"]}',\n};\n\nexport const resourcePreviewArgsSchema: ToolSchema<ResourcePreviewArgs> = {\n parse(value) {\n if (\n value === null ||\n typeof value !== 'object' ||\n typeof Reflect.get(value, 'guid') !== 'string'\n ) {\n return { ok: false, error: 'expected { guid: string }' };\n }\n const guid = Reflect.get(value, 'guid');\n if (guid.length === 0) return { ok: false, error: 'guid must not be empty' };\n const size = Reflect.get(value, 'size');\n if (size === undefined) return { ok: true, value: { guid } };\n return isResourcePreviewSize(size)\n ? { ok: true, value: { guid, size } }\n : {\n ok: false,\n error: `size must be a power of two between ${RESOURCE_PREVIEW_MIN_SIZE} and ${RESOURCE_PREVIEW_MAX_SIZE}`,\n };\n },\n describe: `{\"type\":\"object\",\"required\":[\"guid\"],\"properties\":{\"guid\":{\"type\":\"string\"},\"size\":{\"type\":\"integer\",\"minimum\":${RESOURCE_PREVIEW_MIN_SIZE},\"maximum\":${RESOURCE_PREVIEW_MAX_SIZE},\"description\":\"square power-of-two screenshot edge; defaults to ${RESOURCE_PREVIEW_DEFAULT_SIZE}\"}}}`,\n};\n\nexport function subjectDescriptor(\n kind: PreviewSubjectKind,\n): ToolDescriptor<ResourcePreviewArgs, unknown> {\n return {\n id: `${kind}.preview`,\n title: `Preview ${kind}`,\n summary: `Preview one ${kind} asset in the Engine-owned resource host.`,\n realm: 'host',\n argsSchema: resourcePreviewArgsSchema,\n resultSchema: resourcePreviewResultSchema,\n evidence: ['rhi-tape', 'profile-capture', 'png'],\n };\n}\n\nexport type SubjectExecutor = (args: ResourcePreviewArgs, context: ToolExecutionContext) => unknown;\n\nexport interface ResourceSubjectFailure {\n readonly ok: false;\n readonly error: {\n readonly code:\n | 'resource-preview-subject-invalid'\n | 'resource-preview-kind-mismatch'\n | 'resource-preview-oracle-failed';\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, JsonValue>>;\n };\n}\n\nexport function subjectFailure(\n code: ResourceSubjectFailure['error']['code'],\n expected: string,\n detail: Readonly<Record<string, JsonValue>>,\n): ResourceSubjectFailure {\n return {\n ok: false,\n error: {\n code,\n expected,\n hint: 'Load the requested GUID through AssetRegistry.loadByGuid and repair the owner facts before retrying.',\n detail,\n },\n };\n}\n\nexport function assetLoadFailure(\n expected: string,\n runId: string,\n error: unknown,\n): ResourceSubjectFailure {\n const owner = isRecord(error) ? error : undefined;\n const ownerCode = typeof owner?.code === 'string' ? owner.code : undefined;\n const ownerExpected = typeof owner?.expected === 'string' ? owner.expected : undefined;\n const ownerHint = typeof owner?.hint === 'string' ? owner.hint : undefined;\n const ownerDetail = owner?.detail;\n return subjectFailure('resource-preview-subject-invalid', expected, {\n phase: 'asset-load',\n runId,\n ...(ownerCode === undefined ? {} : { ownerCode }),\n ...(ownerExpected === undefined ? {} : { ownerExpected }),\n ...(ownerHint === undefined ? {} : { ownerHint }),\n ...(ownerDetail === undefined ? {} : { ownerDetail: toJsonValue(ownerDetail) }),\n });\n}\n\nfunction toJsonValue(value: unknown): JsonValue {\n if (value === null || typeof value === 'string' || typeof value === 'boolean') return value;\n if (typeof value === 'number' && Number.isFinite(value)) return value;\n if (Array.isArray(value)) return value.map((entry) => toJsonValue(entry));\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [key, toJsonValue(entry)]),\n );\n }\n return String(value);\n}\n\nexport function nativePreviewPlugin(\n kind: PreviewSubjectKind,\n contribution: ToolContribution<ResourcePreviewArgs, unknown>,\n) {\n return defineToolPlugin({ name: `forgeax-preview-${kind}`, apply() {} }, [\n contribution as ToolContribution<unknown, unknown>,\n ]);\n}\n\nexport async function failUnboundSubject(\n kind: PreviewSubjectKind,\n args: ResourcePreviewArgs,\n context: ToolExecutionContext,\n): Promise<unknown> {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) => ({\n ...subjectFailure(\n 'resource-preview-subject-invalid',\n `${kind} asset ${args.guid} to be bound by its owner before rendering`,\n { phase: 'subject-binding', runId: mechanisms.runId },\n ),\n }));\n}\n","import type { JsonValue, ToolRecoveryAction, ToolRuntimeError } from '@forgeax/engine-tool-runtime';\n\nexport type ResourcePreviewFailureCode =\n | 'resource-preview-kind-mismatch'\n | 'resource-preview-subject-invalid'\n | 'resource-preview-oracle-failed';\n\nexport interface ResourcePreviewFailure {\n readonly code: ResourcePreviewFailureCode;\n readonly expected: string;\n readonly hint: string;\n readonly detail: Readonly<Record<string, JsonValue>>;\n}\n\nexport interface ResourcePreviewRecovery {\n readonly failure: ResourcePreviewFailure;\n readonly suggestedOperation?: string;\n readonly actions: readonly ToolRecoveryAction[];\n}\n\nfunction isResourcePreviewFailureCode(value: string): value is ResourcePreviewFailureCode {\n return (\n value === 'resource-preview-kind-mismatch' ||\n value === 'resource-preview-subject-invalid' ||\n value === 'resource-preview-oracle-failed'\n );\n}\n\nfunction isRecord(value: JsonValue | undefined): value is { readonly [key: string]: JsonValue } {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction suggestedOperation(payload: Readonly<Record<string, JsonValue>>): string | undefined {\n const actualKind = payload.actualKind;\n if (\n actualKind !== 'material' &&\n actualKind !== 'mesh' &&\n actualKind !== 'vfx' &&\n actualKind !== 'texture'\n )\n return undefined;\n return `${actualKind}.preview`;\n}\n\nfunction exhaustive(value: never): never {\n throw new Error(`unhandled resource preview failure: ${String(value)}`);\n}\n\nexport function describeResourcePreviewFailure(\n failure: ToolRuntimeError,\n): ResourcePreviewRecovery | undefined {\n if (failure.code !== 'tool-domain-failed') return undefined;\n const code = failure.detail.code;\n if (!isResourcePreviewFailureCode(code)) return undefined;\n const detail = isRecord(failure.detail.payload) ? failure.detail.payload : {};\n const base: ResourcePreviewFailure = {\n code,\n expected: failure.expected,\n hint: failure.hint,\n detail,\n };\n switch (code) {\n case 'resource-preview-kind-mismatch': {\n const operation = suggestedOperation(detail);\n return {\n failure: base,\n ...(operation === undefined ? {} : { suggestedOperation: operation }),\n actions: [\n ...(operation === undefined\n ? []\n : [\n {\n action: 'switch-operation' as const,\n operation,\n hint: 'Run the suggested operation for the loaded asset kind.',\n },\n ]),\n {\n action: 'repair-owner',\n hint: 'Repair the asset owner kind facts and reload the GUID.',\n },\n {\n action: 'stop',\n hint: 'Stop when the GUID does not belong to a supported preview kind.',\n },\n ],\n };\n }\n case 'resource-preview-subject-invalid':\n return {\n failure: base,\n actions: [\n {\n action: 'repair-owner',\n hint: 'Repair the owner facts or recook the subject, then retry.',\n },\n {\n action: 'retry',\n hint: 'Retry the same operation after the producer publishes a new digest.',\n },\n { action: 'stop', hint: 'Stop when the owner cannot produce a valid subject.' },\n ],\n };\n case 'resource-preview-oracle-failed':\n return {\n failure: base,\n actions: [\n {\n action: 'inspect-evidence',\n hint: 'Inspect the report and RHI diagnostics before retrying.',\n },\n {\n action: 'retry',\n hint: 'Retry only after the renderer or binding producer is repaired.',\n },\n {\n action: 'stop',\n hint: 'Stop publication when fresh evidence still falsifies the oracle.',\n },\n ],\n };\n }\n return exhaustive(code);\n}\n","import {\n createPreviewArtifactManifest,\n type PreviewArtifactManifest,\n type PreviewArtifactManifestValidation,\n type PreviewArtifactRole,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\n\nexport {\n createPreviewArtifactManifest,\n type PreviewArtifactIdentity,\n type PreviewArtifactKind,\n type PreviewArtifactManifest,\n type PreviewArtifactManifestEntry,\n type PreviewArtifactManifestValidation,\n type PreviewArtifactRole,\n validatePreviewArtifactManifest,\n} from '@forgeax/engine-tool-runtime';\n\nexport interface AtomicPreviewPublisher {\n readonly stage: (manifest: PreviewArtifactManifest) => void;\n readonly publish: (\n requiredRoles: readonly PreviewArtifactRole[],\n ) => PreviewArtifactManifestValidation;\n readonly discard: () => void;\n readonly published: () => PreviewArtifactManifest | undefined;\n}\n\n/** In-memory atomic boundary shared by Browser, Dawn, and visible carriers. */\nexport function createAtomicPreviewPublisher(): AtomicPreviewPublisher {\n let staged: PreviewArtifactManifest | undefined;\n let committed: PreviewArtifactManifest | undefined;\n return {\n stage(manifest) {\n staged = createPreviewArtifactManifest(manifest);\n },\n publish(requiredRoles) {\n if (staged === undefined) {\n const invalid = validatePreviewArtifactManifest(\n { schemaVersion: '2.0.0', identity: undefined as never, artifacts: [] },\n requiredRoles,\n );\n if (invalid.ok) throw new Error('preview publisher rejected an empty stage');\n return invalid;\n }\n const validated = validatePreviewArtifactManifest(staged, requiredRoles);\n if (!validated.ok) {\n staged = undefined;\n return validated;\n }\n committed = validated.value;\n staged = undefined;\n return { ok: true, value: committed };\n },\n discard() {\n staged = undefined;\n },\n published: () => committed,\n };\n}\n","export type PreviewOracleStatus = PreviewOracle['status'];\n\nexport type PreviewOracle =\n | {\n readonly status: 'passed';\n readonly subjectBound: true;\n readonly drawCalls: number;\n readonly dispatches: number;\n readonly rendererHealthy: true;\n readonly detail: Record<string, string | number | boolean>;\n }\n | {\n readonly status: 'failed';\n readonly subjectBound: false;\n readonly drawCalls: number;\n readonly dispatches: number;\n readonly rendererHealthy: boolean;\n readonly detail: Record<string, string | number | boolean>;\n };\n\nexport function passedPreviewOracle(input: {\n readonly drawCalls: number;\n readonly dispatches?: number;\n readonly detail: Record<string, string | number | boolean>;\n}): PreviewOracle {\n return {\n status: 'passed',\n subjectBound: true,\n drawCalls: input.drawCalls,\n dispatches: input.dispatches ?? 0,\n rendererHealthy: true,\n detail: { ...input.detail },\n };\n}\n\nexport function failedPreviewOracle(input: {\n readonly drawCalls?: number;\n readonly dispatches?: number;\n readonly rendererHealthy?: boolean;\n readonly detail: Record<string, string | number | boolean>;\n}): PreviewOracle {\n return {\n status: 'failed',\n subjectBound: false,\n drawCalls: input.drawCalls ?? 0,\n dispatches: input.dispatches ?? 0,\n rendererHealthy: input.rendererHealthy ?? false,\n detail: { ...input.detail },\n };\n}\n\nexport interface MaterialOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly program: string;\n readonly pass: string;\n readonly bindingsDigest: string;\n readonly closureDigest: string;\n };\n readonly observed: MaterialOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n };\n}\n\nexport interface MeshOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly vertexDigest: string;\n readonly indexDigest: string;\n readonly submeshDigest: string;\n readonly aabbDigest: string;\n readonly aabb?: readonly [number, number, number, number, number, number];\n readonly submeshCount?: number;\n readonly materialSlotCount?: number;\n };\n readonly observed: MeshOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n };\n}\n\nfunction oracleDetail(\n kind: 'material' | 'mesh',\n requested: Record<string, unknown>,\n observed: Record<string, unknown>,\n mismatch: string | undefined,\n): Record<string, string | number | boolean> {\n return {\n kind,\n mismatch: mismatch ?? 'none',\n requestedSubjectDigest:\n typeof requested.subjectDigest === 'string' ? requested.subjectDigest : 'unknown',\n observedSubjectDigest:\n typeof observed.subjectDigest === 'string' ? observed.subjectDigest : 'unknown',\n requestedOwnerDigest: JSON.stringify(requested),\n observedOwnerDigest: JSON.stringify(observed),\n };\n}\n\nfunction firstMismatch(\n requested: Record<string, unknown>,\n observed: Record<string, unknown>,\n): string | undefined {\n for (const key of Object.keys(requested)) {\n const requestedValue = requested[key];\n const observedValue = observed[key];\n if (\n Array.isArray(requestedValue) ||\n Array.isArray(observedValue) ||\n typeof requestedValue === 'object' ||\n typeof observedValue === 'object'\n ) {\n if (JSON.stringify(requestedValue) !== JSON.stringify(observedValue)) return key;\n } else if (requestedValue !== observedValue) {\n return key;\n }\n }\n return undefined;\n}\n\nexport function evaluateMaterialOracle(input: MaterialOracleInput): PreviewOracle {\n const requested = input.requested as unknown as Record<string, string>;\n const observed = input.observed as unknown as Record<string, string>;\n const mismatch = firstMismatch(requested, observed);\n const healthy = input.observed.rendererHealthy && input.observed.drawCalls > 0;\n const detail = oracleDetail('material', requested, observed, mismatch);\n if (mismatch !== undefined || !healthy) {\n return failedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n rendererHealthy: input.observed.rendererHealthy,\n detail: { ...detail, rendererHealthy: input.observed.rendererHealthy },\n });\n }\n return passedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n detail: { ...detail, rendererHealthy: true },\n });\n}\n\nexport function evaluateMeshOracle(input: MeshOracleInput): PreviewOracle {\n const requested = input.requested as unknown as Record<string, string>;\n const observed = input.observed as unknown as Record<string, string>;\n const mismatch = firstMismatch(requested, observed);\n const healthy = input.observed.rendererHealthy && input.observed.drawCalls > 0;\n const detail = oracleDetail('mesh', requested, observed, mismatch);\n if (mismatch !== undefined || !healthy) {\n return failedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n rendererHealthy: input.observed.rendererHealthy,\n detail: { ...detail, rendererHealthy: input.observed.rendererHealthy },\n });\n }\n return passedPreviewOracle({\n drawCalls: input.observed.drawCalls,\n detail: { ...detail, rendererHealthy: true },\n });\n}\n\nexport interface VfxOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly programFingerprint: string;\n readonly emitterDigest: string;\n readonly sampleDigest: string;\n readonly boundsDigest: string;\n readonly computeDigest: string;\n readonly indirectDigest: string;\n readonly contactSheetDigest?: string;\n readonly authoredBounds?: readonly [number, number, number, number, number, number];\n readonly seed?: number;\n readonly fixedDelta?: number;\n readonly timelineFrames?: number;\n };\n readonly observed: VfxOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly dispatches: number;\n readonly indirectDraws: number;\n readonly subjectOutputs: number;\n readonly nonBlackPixels: number;\n };\n}\n\nexport interface TextureOracleInput {\n readonly requested: {\n readonly subjectDigest: string;\n readonly boundDigest: string;\n readonly dimensions: readonly [number, number];\n readonly format: string;\n readonly colorSpace: string;\n readonly mipCount: number;\n readonly uvDigest: string;\n readonly filter: string;\n readonly bindingDigest: string;\n };\n readonly observed: TextureOracleInput['requested'] & {\n readonly rendererHealthy: boolean;\n readonly drawCalls: number;\n readonly nonBlackPixels: number;\n readonly payloadClass: 'black' | 'transparent' | 'single-channel' | 'color';\n };\n}\n\nfunction identityRecord(input: Record<string, unknown>): Record<string, string> {\n return Object.fromEntries(\n Object.entries(input).map(([key, value]) => [\n key,\n Array.isArray(value) ? JSON.stringify(value) : String(value),\n ]),\n );\n}\n\nfunction evaluateIdentityOracle(\n kind: 'vfx' | 'texture',\n requestedInput: Record<string, unknown>,\n observedInput: Record<string, unknown>,\n healthy: boolean,\n drawCalls: number,\n dispatches: number,\n detailOverrides: Record<string, string | number | boolean>,\n): PreviewOracle {\n const requested = identityRecord(requestedInput);\n const observed = identityRecord(observedInput);\n const mismatch = firstMismatch(requested, observed);\n const detail = {\n kind,\n mismatch: mismatch ?? 'none',\n requestedSubjectDigest: requested.subjectDigest ?? 'unknown',\n observedSubjectDigest: observed.subjectDigest ?? 'unknown',\n requestedOwnerDigest: JSON.stringify(requested),\n observedOwnerDigest: JSON.stringify(observed),\n ...detailOverrides,\n };\n if (mismatch !== undefined || !healthy) {\n return failedPreviewOracle({ drawCalls, dispatches, rendererHealthy: healthy, detail });\n }\n return passedPreviewOracle({ drawCalls, dispatches, detail });\n}\n\nexport function evaluateVfxOracle(input: VfxOracleInput): PreviewOracle {\n const observed = input.observed;\n const healthy =\n observed.rendererHealthy &&\n observed.dispatches > 0 &&\n observed.indirectDraws > 0 &&\n observed.subjectOutputs > 0;\n return evaluateIdentityOracle(\n 'vfx',\n input.requested,\n input.observed,\n healthy,\n observed.indirectDraws,\n observed.dispatches,\n {\n rendererHealthy: observed.rendererHealthy,\n indirectDraws: observed.indirectDraws,\n subjectOutputs: observed.subjectOutputs,\n nonBlackPixels: observed.nonBlackPixels,\n },\n );\n}\n\nexport function evaluateTextureOracle(input: TextureOracleInput): PreviewOracle {\n const observed = input.observed;\n return evaluateIdentityOracle(\n 'texture',\n input.requested,\n input.observed,\n observed.rendererHealthy && observed.drawCalls > 0,\n observed.drawCalls,\n 0,\n {\n rendererHealthy: observed.rendererHealthy,\n payloadClass: observed.payloadClass,\n nonBlackPixels: observed.nonBlackPixels,\n },\n );\n}\n","import type { SnapshotRef } from '@forgeax/engine-tool-runtime';\nimport type { PreviewPresentation, PreviewSubject } from '../kit/presentation.js';\nimport type { PreviewArtifactManifestEntry } from './manifest.js';\nimport type { PreviewOracle } from './oracle.js';\n\nexport interface ResourcePreviewReport {\n readonly mediaType: 'application/vnd.forgeax.resource-preview+json';\n readonly schemaVersion: '1.0.0';\n readonly runId: string;\n readonly snapshot: SnapshotRef;\n readonly subject: PreviewSubject;\n readonly presentation: PreviewPresentation;\n readonly oracle: PreviewOracle;\n readonly artifacts: readonly PreviewArtifactManifestEntry[];\n}\n\nexport function createResourcePreviewReport(\n input: Omit<ResourcePreviewReport, 'mediaType' | 'schemaVersion'>,\n): ResourcePreviewReport {\n return {\n mediaType: 'application/vnd.forgeax.resource-preview+json',\n schemaVersion: '1.0.0',\n ...input,\n artifacts: input.artifacts.map((artifact) => ({\n ...artifact,\n derivedFrom: [...artifact.derivedFrom],\n })),\n };\n}\n","import type {\n ArtifactRef,\n JsonValue,\n SnapshotRef,\n ToolDomainFailure,\n ToolEvidenceKind,\n ToolExecutionContext,\n ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport {\n createPreviewHost as createNativePreviewHost,\n type PreviewHost as NativePreviewHost,\n type PreviewHostMechanisms,\n} from './host/preview-host.js';\n\nexport interface PreviewHostRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n}\n\nexport interface PreviewAssetBinding {\n readonly guid: string;\n readonly bytes: number;\n}\n\nexport interface PreviewFrameInput {\n readonly frame: number;\n readonly deltaSeconds: number;\n}\n\nexport interface PreviewCapture {\n readonly digest: string;\n readonly bytes: number;\n}\n\nexport interface PreviewResourceCensus {\n readonly worlds: number;\n readonly renderers: number;\n readonly canvases: number;\n readonly leases: number;\n}\n\nexport interface PreviewCleanupReport {\n readonly census: PreviewResourceCensus;\n readonly failures: readonly string[];\n}\n\n/**\n * The only resource surface exposed to a preview contribution. The adapter owns\n * the actual Engine resources; callers receive POD bindings and bounded actions.\n */\nexport interface PreviewHostSession {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly loadAsset: (guid: string) => Promise<PreviewAssetBinding>;\n readonly frame: (input: PreviewFrameInput) => Promise<void>;\n readonly capture: () => Promise<PreviewCapture & { readonly artifact?: ArtifactRef }>;\n readonly census: () => PreviewResourceCensus;\n readonly dispose: () => Promise<void>;\n}\n\nexport interface PreviewHostAdapter {\n readonly open: (request: PreviewHostRequest) => PreviewHostSession | Promise<PreviewHostSession>;\n}\n\nexport interface PreviewHost {\n readonly withSession: <TResult>(\n request: PreviewHostRequest,\n run: (session: PreviewHostSession) => TResult | Promise<TResult>,\n ) => Promise<{ readonly value: TResult; readonly cleanup: PreviewCleanupReport }>;\n}\n\nexport interface PreviewDomainValue<TReport = unknown> {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly report: TReport;\n readonly artifacts: readonly ArtifactRef[];\n}\n\nexport type PreviewDomainResult<TReport = unknown> =\n | { readonly ok: true; readonly value: PreviewDomainValue<TReport> }\n | { readonly ok: false; readonly error: ToolDomainFailure };\n\nexport type PreviewDomainRunner<TRequest, TReport = unknown> = (\n request: TRequest,\n context: ToolExecutionContext,\n) => Promise<PreviewDomainResult<TReport>>;\n\nexport const REQUIRED_PREVIEW_EVIDENCE: readonly ToolEvidenceKind[] = [\n 'rhi-tape',\n 'png',\n 'profile-capture',\n];\n\nexport function domainFailure(\n code: string,\n expected: string,\n hint: string,\n detail: Record<string, JsonValue>,\n): { readonly ok: false; readonly error: ToolDomainFailure } {\n return { ok: false, error: { code, expected, hint, detail } };\n}\n\n/**\n * The default contribution is deliberately fail-closed. A real Project GUID\n * loader must install a PreviewHost/Browser/Dawn runner; a data-only request\n * must never manufacture PNG, RHI, or profile references from its arguments.\n */\nexport function previewRuntimeUnavailable(\n subject: ToolSubjectRef,\n snapshot: SnapshotRef,\n domain: string,\n): { readonly ok: false; readonly error: ToolDomainFailure } {\n return domainFailure(\n 'preview-runtime-unavailable',\n 'a Project GUID cold-load and an active PreviewHost/Browser/Dawn runner',\n 'Install the Project preview provider and retry; no synthetic artifact is published.',\n {\n domain,\n subjectKind: subject.kind,\n subjectGuid: subject.guid,\n snapshotRevision: snapshot.revision,\n snapshotDigest: snapshot.digest,\n requiredEvidence: REQUIRED_PREVIEW_EVIDENCE as unknown as JsonValue,\n },\n );\n}\n\nexport function validateDomainValue<TReport>(\n value: PreviewDomainValue<TReport>,\n request: PreviewHostRequest,\n): PreviewDomainResult<TReport> {\n if (\n value.subject.kind !== request.subject.kind ||\n value.subject.guid !== request.subject.guid ||\n value.snapshot.revision !== request.snapshot.revision ||\n value.snapshot.digest !== request.snapshot.digest\n ) {\n return domainFailure(\n 'preview-subject-identity-mismatch',\n 'the terminal subject and snapshot to match the request',\n 'Repair the domain producer so evidence remains bound to the requested subject.',\n {\n requestGuid: request.subject.guid,\n resultGuid: value.subject.guid,\n requestSnapshot: request.snapshot.digest,\n resultSnapshot: value.snapshot.digest,\n },\n );\n }\n const kinds = new Set(value.artifacts.map((artifact) => artifact.kind));\n const missing = REQUIRED_PREVIEW_EVIDENCE.filter((kind) => !kinds.has(kind));\n if (missing.length > 0) {\n return domainFailure(\n 'preview-evidence-incomplete',\n 'one subject-bound artifact for each required evidence kind',\n 'Repair the RHI, PNG, and profile producers before retrying.',\n { missing: missing as unknown as JsonValue },\n );\n }\n return { ok: true, value };\n}\n\nexport class PreviewCleanupError extends Error {\n readonly code = 'preview-cleanup-live-resources';\n readonly census: PreviewResourceCensus;\n\n constructor(census: PreviewResourceCensus, failures: readonly string[] = []) {\n super(\n failures.length === 0\n ? 'preview session left live resources after disposal'\n : `preview session cleanup failed: ${failures.join('; ')}`,\n );\n this.name = 'PreviewCleanupError';\n this.census = census;\n }\n}\n\nfunction hasLiveResources(census: PreviewResourceCensus): boolean {\n return Object.values(census).some((count) => count !== 0);\n}\n\nexport function createPreviewHost(adapter: PreviewHostAdapter): PreviewHost;\nexport function createPreviewHost(input: PreviewHostMechanisms): NativePreviewHost;\nexport function createPreviewHost(\n adapterOrInput: PreviewHostAdapter | PreviewHostMechanisms,\n): PreviewHost | NativePreviewHost {\n if ('runId' in adapterOrInput) return createNativePreviewHost(adapterOrInput);\n const adapter = adapterOrInput;\n const withSession = async <TResult>(\n request: PreviewHostRequest,\n run: (session: PreviewHostSession) => TResult | Promise<TResult>,\n ): Promise<{ readonly value: TResult; readonly cleanup: PreviewCleanupReport }> => {\n const session = await adapter.open(request);\n let result: TResult;\n try {\n result = await run(session);\n } finally {\n await session.dispose();\n }\n const cleanup: PreviewCleanupReport = { census: session.census(), failures: [] };\n if (hasLiveResources(cleanup.census)) {\n throw new PreviewCleanupError(cleanup.census, cleanup.failures);\n }\n return { value: result, cleanup };\n };\n\n return {\n withSession,\n };\n}\n","import type { PreviewPresentation, PreviewSubjectKind } from './presentation.js';\n\nexport interface CanonicalPreviewRecipe {\n readonly schemaVersion: '1.0.0';\n readonly rig:\n | Extract<PreviewPresentation, { readonly kind: 'lit-asset' }>['geometry']\n | 'asset-quad';\n readonly environment: 'engine-canonical' | 'black';\n readonly skybox: 'engine-canonical' | 'none';\n readonly skylight: 'engine-canonical' | 'none';\n readonly directionalLight: 'engine-canonical' | 'none';\n readonly stage: 'neutral-material-checker-unlit' | 'texture-unlit-black';\n readonly camera: 'bounds-derived' | 'texture-orthographic';\n readonly recipeDigest: string;\n}\n\nexport function createCanonicalPreviewRecipe(kind: PreviewSubjectKind): CanonicalPreviewRecipe {\n const texture = kind === 'texture';\n return {\n schemaVersion: '1.0.0',\n rig: kind === 'mesh' ? 'asset-mesh' : texture ? 'asset-quad' : 'handle-sphere',\n environment: texture ? 'black' : 'engine-canonical',\n skybox: texture ? 'none' : 'engine-canonical',\n skylight: texture ? 'none' : 'engine-canonical',\n directionalLight: texture ? 'none' : 'engine-canonical',\n stage: texture ? 'texture-unlit-black' : 'neutral-material-checker-unlit',\n camera: texture ? 'texture-orthographic' : 'bounds-derived',\n recipeDigest: `canonical:${kind}:${texture ? 'texture-orthographic' : 'bounds-derived'}`,\n };\n}\n\nexport function canonicalPresentation(kind: PreviewSubjectKind): PreviewPresentation {\n if (kind === 'texture') {\n return {\n kind: 'texture-unlit',\n geometry: 'aspect-quad',\n checkerboard: 'linear-alpha',\n };\n }\n return {\n kind: 'lit-asset',\n geometry: kind === 'mesh' ? 'asset-mesh' : 'handle-sphere',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n skybox: 'engine-canonical',\n };\n}\n","export type PreviewSubject =\n | { readonly kind: 'material'; readonly guid: string; readonly digest: string }\n | { readonly kind: 'mesh'; readonly guid: string; readonly digest: string }\n | { readonly kind: 'vfx'; readonly guid: string; readonly digest: string }\n | { readonly kind: 'texture'; readonly guid: string; readonly digest: string };\n\nexport type PreviewSubjectKind = PreviewSubject['kind'];\n\nexport type PreviewPresentation =\n | {\n readonly kind: 'lit-asset';\n readonly geometry: 'handle-sphere' | 'asset-mesh';\n readonly skylight: 'engine-canonical';\n readonly directionalLight: 'engine-canonical';\n readonly skybox: 'engine-canonical';\n }\n | {\n readonly kind: 'texture-unlit';\n readonly geometry: 'aspect-quad';\n readonly checkerboard: 'linear-alpha';\n };\n\nexport const MATERIAL_PRESENTATION: PreviewPresentation = {\n kind: 'lit-asset',\n geometry: 'handle-sphere',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n skybox: 'engine-canonical',\n};\n\nexport const MESH_PRESENTATION: PreviewPresentation = {\n kind: 'lit-asset',\n geometry: 'asset-mesh',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n skybox: 'engine-canonical',\n};\n\nexport const VFX_PRESENTATION: PreviewPresentation = MATERIAL_PRESENTATION;\n\nexport const TEXTURE_PRESENTATION: PreviewPresentation = {\n kind: 'texture-unlit',\n geometry: 'aspect-quad',\n checkerboard: 'linear-alpha',\n};\n","export interface CanonicalKitReceipt {\n readonly schemaVersion: '1.0.0';\n readonly producer: 'packages/preview/scripts/build-canonical-kit.mjs';\n readonly source: {\n readonly sourceKey: string;\n readonly guid: string;\n readonly digest: string;\n readonly metaDigest: string;\n };\n readonly recipe: {\n readonly digest: string;\n readonly value: {\n readonly schemaVersion: '1.0.0';\n readonly rig: 'handle-sphere';\n readonly environment: 'engine-canonical';\n readonly skybox: 'engine-canonical';\n readonly skylight: 'engine-canonical';\n readonly directionalLight: 'engine-canonical';\n readonly stage: 'neutral-material-checker-unlit';\n readonly camera: 'bounds-derived';\n };\n };\n readonly cooked: {\n readonly importer: 'image';\n readonly kind: 'equirect';\n readonly sourceDigest: string;\n readonly metaDigest: string;\n };\n readonly package: {\n readonly name: '@forgeax/engine-preview';\n readonly root: 'assets/canonical-kit';\n };\n readonly transport: {\n readonly dev: 'pluginPack';\n readonly build: 'pluginPack';\n readonly sdk: 'files/assets/canonical-kit';\n readonly source: 'sky.hdr';\n readonly meta: 'sky.hdr.meta.json';\n };\n}\n\nexport type CanonicalKitReceiptValidation =\n | { readonly ok: true; readonly value: CanonicalKitReceipt }\n | {\n readonly ok: false;\n readonly error: {\n readonly code: 'preview-kit-receipt-invalid';\n readonly expected: string;\n readonly hint: string;\n readonly detail: { readonly field: string; readonly phase: 'receipt' };\n };\n };\n\nconst digestPattern = /^sha256:[0-9a-f]{64}$/;\n\nfunction invalid(field: string): CanonicalKitReceiptValidation {\n return {\n ok: false,\n error: {\n code: 'preview-kit-receipt-invalid',\n expected: `canonical kit receipt field ${field} to be producer-owned and content-addressed`,\n hint: 'Run the canonical kit producer and consume its current receipt; do not derive identity from a path or project preset.',\n detail: { field, phase: 'receipt' },\n },\n };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nexport function validateCanonicalKitReceipt(value: unknown): CanonicalKitReceiptValidation {\n if (!isRecord(value)) return invalid('root');\n if (value.schemaVersion !== '1.0.0') return invalid('schemaVersion');\n if (value.producer !== 'packages/preview/scripts/build-canonical-kit.mjs')\n return invalid('producer');\n const source = value.source;\n if (!isRecord(source)) return invalid('source');\n if (\n typeof source.sourceKey !== 'string' ||\n !source.sourceKey.endsWith('sky.hdr') ||\n typeof source.guid !== 'string' ||\n !digestPattern.test(String(source.digest)) ||\n !digestPattern.test(String(source.metaDigest))\n )\n return invalid('source');\n const recipe = value.recipe;\n if (!isRecord(recipe) || !digestPattern.test(String(recipe.digest)) || !isRecord(recipe.value))\n return invalid('recipe');\n const recipeValue = recipe.value;\n const recipeFields: Record<string, string> = {\n schemaVersion: '1.0.0',\n rig: 'handle-sphere',\n environment: 'engine-canonical',\n skybox: 'engine-canonical',\n skylight: 'engine-canonical',\n directionalLight: 'engine-canonical',\n stage: 'neutral-material-checker-unlit',\n camera: 'bounds-derived',\n };\n for (const [field, expected] of Object.entries(recipeFields)) {\n if (recipeValue[field] !== expected) return invalid(`recipe.value.${field}`);\n }\n const cooked = value.cooked;\n if (\n !isRecord(cooked) ||\n cooked.importer !== 'image' ||\n cooked.kind !== 'equirect' ||\n !digestPattern.test(String(cooked.sourceDigest)) ||\n !digestPattern.test(String(cooked.metaDigest)) ||\n cooked.sourceDigest !== source.digest ||\n cooked.metaDigest !== source.metaDigest\n )\n return invalid('cooked');\n const packageValue = value.package;\n if (\n !isRecord(packageValue) ||\n packageValue.name !== '@forgeax/engine-preview' ||\n packageValue.root !== 'assets/canonical-kit'\n )\n return invalid('package');\n const transport = value.transport;\n if (\n !isRecord(transport) ||\n transport.dev !== 'pluginPack' ||\n transport.build !== 'pluginPack' ||\n transport.sdk !== 'files/assets/canonical-kit' ||\n transport.source !== 'sky.hdr' ||\n transport.meta !== 'sky.hdr.meta.json'\n )\n return invalid('transport');\n return { ok: true, value: value as unknown as CanonicalKitReceipt };\n}\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateMaterialOracle, type MaterialOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface MaterialSubjectInspection {\n readonly subjectDigest: string;\n readonly program: string;\n readonly pass: string;\n readonly bindingsDigest: string;\n readonly closureDigest: string;\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: MaterialSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction digest(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nexport function inspectMaterialSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'material') {\n return subjectFailure('resource-preview-kind-mismatch', 'a MaterialAsset with kind material', {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n });\n }\n const passes = input.asset.passes;\n if (!Array.isArray(passes) || passes.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'a MaterialAsset with at least one pass',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'passes',\n },\n );\n }\n const first =\n passes.find((pass) => {\n if (!isRecord(pass)) return false;\n const tags =\n isRecord(pass.renderState) && isRecord(pass.renderState.tags)\n ? pass.renderState.tags\n : undefined;\n const mode = tags?.LightMode ?? pass.name;\n return !/shadow|depth/i.test(String(mode));\n }) ?? passes[0];\n if (!isRecord(first) || typeof first.name !== 'string' || !isRecord(first.program)) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every material pass to declare a program',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'passes[0]',\n },\n );\n }\n if (typeof first.program.module !== 'string' || first.program.module.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the material program module identity to be present',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'passes[0].program.module',\n },\n );\n }\n const owner = input.asset.ownerFacts;\n const ownerFacts = isRecord(owner) ? owner : input.ownerFacts;\n const subjectDigest = digest(input.asset.digest ?? input.digest ?? ownerFacts?.subjectDigest);\n const bindingsDigest = digest(input.asset.bindingsDigest ?? ownerFacts?.bindingsDigest);\n const closureDigest = digest(input.asset.closureDigest ?? ownerFacts?.closureDigest);\n if (subjectDigest === undefined || bindingsDigest === undefined || closureDigest === undefined) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the MaterialAsset owner to publish subject, bindings, and closure digests',\n { phase: 'subject', guid: input.guid, field: 'ownerFacts' },\n );\n }\n return {\n ok: true,\n value: {\n subjectDigest,\n program: first.program.module,\n pass: first.name,\n bindingsDigest,\n closureDigest,\n },\n };\n}\n\nexport async function executeMaterialPreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly rendererReady: boolean;\n readonly worldReady: boolean;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'resource preview host to expose the existing AssetRegistry',\n { phase: 'asset-registry', runId: input.runId },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the requested material',\n input.runId,\n loaded.error,\n );\n const inspected = inspectMaterialSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n if (\n !input.rendererReady ||\n !input.worldReady ||\n renderer === undefined ||\n renderer.drawCalls <= 0 ||\n renderer.nonBlackPixels <= 0 ||\n renderer.observation === undefined\n )\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World and Renderer to be ready',\n { phase: 'renderer', runId: input.runId },\n );\n const observed: MaterialOracleInput['observed'] = {\n subjectDigest: digest(renderer.observation.subjectDigest) ?? '',\n program: digest(renderer.observation.program) ?? '',\n pass: digest(renderer.observation.pass) ?? '',\n bindingsDigest: digest(renderer.observation.bindingsDigest) ?? '',\n closureDigest: digest(renderer.observation.closureDigest) ?? '',\n rendererHealthy: input.rendererReady && input.worldReady,\n drawCalls: renderer.drawCalls,\n nonBlackPixels: renderer.nonBlackPixels,\n };\n const oracle = evaluateMaterialOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered material observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: {\n kind: 'material' as const,\n guid: args.guid,\n digest: inspected.value.subjectDigest,\n },\n presentation: canonicalPresentation('material'),\n recipe: createCanonicalPreviewRecipe('material'),\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { executeMaterialPreview } from './domains/material.js';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport interface MaterialBinding {\n readonly guid: string;\n readonly programDigest: string;\n readonly bindings: readonly string[];\n}\n\nexport interface MaterialPreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: MaterialBinding;\n}\n\nexport interface MaterialPreviewReport {\n readonly kind: 'material';\n readonly bindingGuid: string;\n readonly programDigest: string;\n readonly backgroundNonBlackPixels: number;\n readonly subjectNonBlackPixels: number;\n readonly presentation: 'sphere-studio';\n}\n\nconst materialPreviewArgsSchema: ToolSchema<MaterialPreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a material preview request object' };\n const request = value as Partial<MaterialPreviewRequest>;\n if (request.subject?.kind !== 'MaterialAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a MaterialAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n const binding = request.binding;\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n binding.programDigest.length === 0 ||\n binding.bindings.length === 0\n )\n return { ok: false, error: 'expected a bound MaterialAsset program and bindings' };\n return { ok: true, value: request as MaterialPreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"MaterialAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"programDigest\",\"bindings\"]}}}',\n};\n\nconst materialPreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const materialPreviewDescriptor = {\n id: 'material.preview',\n title: 'Preview material asset',\n summary: 'Renders one bound MaterialAsset on the fixed studio sphere presentation.',\n realm: 'engine' as const,\n argsSchema: materialPreviewArgsSchema,\n resultSchema: materialPreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'MaterialAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nfunction defaultMaterialRunner(\n request: MaterialPreviewRequest,\n): Promise<PreviewDomainResult<MaterialPreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'material'));\n}\n\nexport function createMaterialPreviewContribution(\n runner: PreviewDomainRunner<MaterialPreviewRequest, MaterialPreviewReport> = async (request) =>\n defaultMaterialRunner(request),\n): ToolContribution<MaterialPreviewRequest, unknown> {\n return defineTool(materialPreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n if (\n result.value.report.bindingGuid !== request.subject.guid ||\n result.value.report.subjectNonBlackPixels <= 0 ||\n result.value.report.backgroundNonBlackPixels <= 0 ||\n result.value.report.presentation !== 'sphere-studio'\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'the requested material subject to render with a non-background studio presentation',\n 'Reject fallback geometry, disconnected bindings, and background-only captures.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: result.value.report.bindingGuid,\n subjectNonBlackPixels: result.value.report.subjectNonBlackPixels,\n backgroundNonBlackPixels: result.value.report.backgroundNonBlackPixels,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const materialPreview = defineTool(subjectDescriptor('material'), (args, context) =>\n (async () => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeMaterialPreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n rendererReady: mechanisms.renderer?.rendererReady === true,\n worldReady: mechanisms.renderer?.worldReady === true,\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n })(),\n);\nexport const materialPreviewPlugin = nativePreviewPlugin('material', materialPreview);\nexport default materialPreviewPlugin;\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateMeshOracle, type MeshOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface MeshSubjectInspection {\n readonly subjectDigest: string;\n readonly vertexDigest: string;\n readonly indexDigest: string;\n readonly submeshDigest: string;\n readonly aabbDigest: string;\n readonly aabb: readonly [number, number, number, number, number, number];\n readonly submeshCount: number;\n readonly materialSlotCount: number;\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: MeshSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction digest(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction observedAabb(\n observation: Readonly<Record<string, string | number | boolean | readonly number[]>>,\n): readonly [number, number, number, number, number, number] | undefined {\n const value = observation.aabb;\n if (\n !Array.isArray(value) ||\n value.length !== 6 ||\n value.some((entry) => typeof entry !== 'number' || !Number.isFinite(entry))\n )\n return undefined;\n const [minX, minY, minZ, maxX, maxY, maxZ] = value;\n if (minX > maxX || minY > maxY || minZ > maxZ) return undefined;\n return [minX, minY, minZ, maxX, maxY, maxZ];\n}\n\nexport function inspectMeshSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'mesh') {\n return subjectFailure('resource-preview-kind-mismatch', 'a MeshAsset with kind mesh', {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n });\n }\n const aabbValue = input.asset.aabb;\n const aabb =\n aabbValue instanceof Float32Array ? [...aabbValue] : Array.isArray(aabbValue) ? aabbValue : [];\n if (\n aabb.length !== 6 ||\n aabb.some((value) => typeof value !== 'number' || !Number.isFinite(value))\n ) {\n return subjectFailure('resource-preview-subject-invalid', 'a finite six-value MeshAsset AABB', {\n phase: 'subject',\n guid: input.guid,\n field: 'aabb',\n });\n }\n const [minX, minY, minZ, maxX, maxY, maxZ] = aabb;\n if (minX > maxX || minY > maxY || minZ > maxZ) {\n return subjectFailure('resource-preview-subject-invalid', 'a non-empty MeshAsset AABB', {\n phase: 'subject',\n guid: input.guid,\n field: 'aabb',\n });\n }\n const slots = input.asset.materialSlots;\n const submeshes = input.asset.submeshes;\n if (!Array.isArray(slots) || slots.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every mesh submesh to have a material slot',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'materialSlots',\n },\n );\n }\n if (!Array.isArray(submeshes) || submeshes.length === 0) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every MeshAsset to declare at least one submesh',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'submeshes',\n },\n );\n }\n for (const submesh of submeshes) {\n if (!isRecord(submesh)) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'each mesh submesh to be structured',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'submeshes',\n },\n );\n }\n const materialSlot = submesh.materialSlot;\n const indexOffset = submesh.indexOffset;\n const indexCount = submesh.indexCount;\n if (\n typeof materialSlot !== 'number' ||\n materialSlot < 0 ||\n materialSlot >= slots.length ||\n typeof indexOffset !== 'number' ||\n typeof indexCount !== 'number' ||\n indexOffset < 0 ||\n indexCount <= 0\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'every submesh range and material slot to be valid',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'submeshes',\n },\n );\n }\n }\n const owner = input.asset.ownerFacts;\n const ownerFacts = isRecord(owner) ? owner : input.ownerFacts;\n const subjectDigest = digest(input.asset.digest ?? input.digest ?? ownerFacts?.subjectDigest);\n const vertexDigest = digest(input.asset.vertexDigest ?? ownerFacts?.vertexDigest);\n const indexDigest = digest(input.asset.indexDigest ?? ownerFacts?.indexDigest);\n const submeshDigest = digest(input.asset.submeshDigest ?? ownerFacts?.submeshDigest);\n const aabbDigest = digest(input.asset.aabbDigest ?? ownerFacts?.aabbDigest);\n if (\n subjectDigest === undefined ||\n vertexDigest === undefined ||\n indexDigest === undefined ||\n submeshDigest === undefined ||\n aabbDigest === undefined\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the MeshAsset owner to publish vertex, index, submesh, AABB, and subject digests',\n { phase: 'subject', guid: input.guid, field: 'ownerFacts' },\n );\n }\n return {\n ok: true,\n value: {\n subjectDigest,\n vertexDigest,\n indexDigest,\n submeshDigest,\n aabbDigest,\n aabb: [minX, minY, minZ, maxX, maxY, maxZ],\n submeshCount: submeshes.length,\n materialSlotCount: slots.length,\n },\n };\n}\n\nexport async function executeMeshPreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly rendererReady: boolean;\n readonly worldReady: boolean;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'resource preview host to expose the existing AssetRegistry',\n { phase: 'asset-registry', runId: input.runId },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the requested mesh',\n input.runId,\n loaded.error,\n );\n const inspected = inspectMeshSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n if (\n !input.rendererReady ||\n !input.worldReady ||\n renderer === undefined ||\n renderer.drawCalls <= 0 ||\n renderer.nonBlackPixels <= 0 ||\n renderer.observation === undefined\n )\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World and Renderer to be ready',\n { phase: 'renderer', runId: input.runId },\n );\n const aabb = observedAabb(renderer.observation);\n const submeshCount = renderer.observation.submeshCount;\n const materialSlotCount = renderer.observation.materialSlotCount;\n if (\n aabb === undefined ||\n typeof submeshCount !== 'number' ||\n typeof materialSlotCount !== 'number'\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered mesh observation to include AABB and material-slot facts',\n { phase: 'renderer-observation', runId: input.runId },\n );\n }\n const observed: MeshOracleInput['observed'] = {\n ...inspected.value,\n subjectDigest: digest(renderer.observation.subjectDigest) ?? '',\n vertexDigest: digest(renderer.observation.vertexDigest) ?? '',\n indexDigest: digest(renderer.observation.indexDigest) ?? '',\n submeshDigest: digest(renderer.observation.submeshDigest) ?? '',\n aabbDigest: digest(renderer.observation.aabbDigest) ?? '',\n aabb,\n submeshCount,\n materialSlotCount,\n rendererHealthy: input.rendererReady && input.worldReady,\n drawCalls: renderer.drawCalls,\n nonBlackPixels: renderer.nonBlackPixels,\n };\n const oracle = evaluateMeshOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered mesh observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: { kind: 'mesh' as const, guid: args.guid, digest: inspected.value.subjectDigest },\n presentation: canonicalPresentation('mesh'),\n recipe: createCanonicalPreviewRecipe('mesh'),\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { executeMeshPreview } from './domains/mesh.js';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport interface MeshSubmeshBinding {\n readonly id: string;\n readonly vertexCount: number;\n readonly indexCount: number;\n}\n\nexport interface MeshAabb {\n readonly min: readonly [number, number, number];\n readonly max: readonly [number, number, number];\n}\n\nexport interface MeshBinding {\n readonly guid: string;\n readonly vertexDigest: string;\n readonly indexDigest: string;\n readonly submeshes: readonly MeshSubmeshBinding[];\n readonly aabb: MeshAabb;\n}\n\nexport interface MeshPreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: MeshBinding;\n}\n\nexport interface MeshPreviewReport {\n readonly kind: 'mesh';\n readonly bindingGuid: string;\n readonly submeshCount: number;\n readonly expectedSubmeshCount: number;\n readonly vertexCount: number;\n readonly indexCount: number;\n readonly framing: 'aabb' | 'inverted-aabb';\n}\n\nconst meshPreviewArgsSchema: ToolSchema<MeshPreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a mesh preview request object' };\n const request = value as Partial<MeshPreviewRequest>;\n const binding = request.binding;\n if (request.subject?.kind !== 'MeshAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a MeshAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n binding.vertexDigest.length === 0 ||\n binding.indexDigest.length === 0 ||\n binding.submeshes.length === 0 ||\n binding.submeshes.some(\n (submesh) => submesh.id.length === 0 || submesh.vertexCount <= 0 || submesh.indexCount <= 0,\n ) ||\n binding.aabb.min.some((value) => !Number.isFinite(value)) ||\n binding.aabb.max.some((value) => !Number.isFinite(value)) ||\n binding.aabb.min.some((value, index) => value >= (binding.aabb.max[index] ?? Number.NaN))\n )\n return { ok: false, error: 'expected complete mesh buffers and a valid AABB' };\n return { ok: true, value: request as MeshPreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"MeshAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"vertexDigest\",\"indexDigest\",\"submeshes\",\"aabb\"]}}}',\n};\n\nconst meshPreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const meshPreviewDescriptor = {\n id: 'mesh.preview',\n title: 'Preview mesh asset',\n summary: 'Draws every bound mesh submesh with neutral material and AABB framing.',\n realm: 'engine' as const,\n argsSchema: meshPreviewArgsSchema,\n resultSchema: meshPreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'MeshAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nfunction defaultMeshRunner(\n request: MeshPreviewRequest,\n): Promise<PreviewDomainResult<MeshPreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'mesh'));\n}\n\nexport function createMeshPreviewContribution(\n runner: PreviewDomainRunner<MeshPreviewRequest, MeshPreviewReport> = async (request) =>\n defaultMeshRunner(request),\n): ToolContribution<MeshPreviewRequest, unknown> {\n return defineTool(meshPreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n const report = result.value.report;\n if (\n report.bindingGuid !== request.subject.guid ||\n report.submeshCount !== report.expectedSubmeshCount ||\n report.submeshCount !== request.binding.submeshes.length ||\n report.vertexCount !==\n request.binding.submeshes.reduce((sum, submesh) => sum + submesh.vertexCount, 0) ||\n report.indexCount !==\n request.binding.submeshes.reduce((sum, submesh) => sum + submesh.indexCount, 0) ||\n report.framing !== 'aabb'\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'all requested submeshes and the source AABB to drive the presentation',\n 'Reject partial geometry, fallback meshes, and inverted framing before publishing evidence.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: report.bindingGuid,\n expectedSubmeshCount: request.binding.submeshes.length,\n actualSubmeshCount: report.submeshCount,\n framing: report.framing,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const meshPreview = defineTool(subjectDescriptor('mesh'), (args, context) =>\n (async () => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeMeshPreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n rendererReady: mechanisms.renderer?.rendererReady === true,\n worldReady: mechanisms.renderer?.worldReady === true,\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n })(),\n);\nexport const meshPreviewPlugin = nativePreviewPlugin('mesh', meshPreview);\nexport default meshPreviewPlugin;\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateTextureOracle, type TextureOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface TextureSubjectInspection {\n readonly subjectDigest: string;\n readonly boundDigest: string;\n readonly dimensions: readonly [number, number];\n readonly format: string;\n readonly colorSpace: string;\n readonly mipCount: number;\n readonly uvDigest: string;\n readonly filter: string;\n readonly bindingDigest: string;\n readonly payloadClass: TextureOracleInput['observed']['payloadClass'];\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: TextureSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction requiredString(asset: Record<string, unknown>, field: string): string | undefined {\n const value = asset[field];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction requiredNumber(asset: Record<string, unknown>, field: string): number | undefined {\n const value = asset[field];\n return typeof value === 'number' && Number.isFinite(value) ? value : undefined;\n}\n\nfunction authoredMipCount(\n asset: Record<string, unknown>,\n shapeDimensions: readonly (number | undefined)[] | undefined,\n): number | undefined {\n const mips = isRecord(asset.mips) ? asset.mips : undefined;\n if (mips?.kind === 'packed') {\n const levels = requiredNumber(mips, 'levelCount');\n return levels !== undefined && Number.isInteger(levels) && levels > 0 ? levels : undefined;\n }\n if (mips?.kind !== 'generate') return mips?.kind === 'none' ? 1 : undefined;\n const [width, height] = shapeDimensions ?? [undefined, undefined];\n if (width === undefined || height === undefined) return undefined;\n const shape = isRecord(asset.shape) ? asset.shape : undefined;\n const extent = shape !== undefined && isRecord(shape.extent) ? shape.extent : undefined;\n const depth =\n shape?.viewDimension === '3d' && extent !== undefined\n ? (requiredNumber(extent, 'depth') ?? 1)\n : 1;\n let largest = Math.max(width, height, depth);\n let levels = 1;\n while (largest > 1) {\n largest = Math.max(1, Math.floor(largest / 2));\n levels += 1;\n }\n return levels;\n}\n\nfunction isTexturePayloadClass(value: unknown): value is TextureSubjectInspection['payloadClass'] {\n return (\n value === 'black' || value === 'transparent' || value === 'single-channel' || value === 'color'\n );\n}\n\nfunction classifyPayload(\n data: unknown,\n format: string | undefined,\n): TextureSubjectInspection['payloadClass'] | undefined {\n const bytes =\n data instanceof Uint8Array || data instanceof Uint8ClampedArray\n ? [...data]\n : Array.isArray(data) && data.every((value) => typeof value === 'number')\n ? data\n : undefined;\n if (bytes === undefined || bytes.length === 0) return undefined;\n const normalizedFormat = format?.toLowerCase() ?? '';\n const singleChannel = normalizedFormat.startsWith('r') && !normalizedFormat.startsWith('rg');\n if (bytes.every((value) => value === 0)) return 'black';\n if (singleChannel) return 'single-channel';\n // RG carries two color/data channels and has no alpha lane. Only the\n // explicitly four-channel formats below permit a transparent classification;\n // compressed and packed formats remain an opaque color observation here.\n if (normalizedFormat.startsWith('rgba') || normalizedFormat.startsWith('bgra')) {\n const alpha = bytes.filter((_, index) => (index + 1) % 4 === 0);\n if (alpha.length > 0 && alpha.every((value) => value === 0)) return 'transparent';\n }\n return 'color';\n}\n\ntype Observation = Readonly<Record<string, string | number | boolean | readonly number[]>>;\n\nfunction observationString(observation: Observation, field: string): string | undefined {\n const value = observation[field];\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction observationDimensions(observation: Observation): readonly [number, number] | undefined {\n const value = observation.dimensions;\n if (\n !Array.isArray(value) ||\n value.length !== 2 ||\n value.some((entry) => typeof entry !== 'number' || !Number.isInteger(entry) || entry <= 0)\n )\n return undefined;\n return [value[0] as number, value[1] as number];\n}\n\nfunction observationPayloadClass(\n observation: Observation,\n): TextureSubjectInspection['payloadClass'] | undefined {\n const value = observation.payloadClass;\n return isTexturePayloadClass(value) ? value : undefined;\n}\n\nexport function inspectTextureSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'texture') {\n return subjectFailure('resource-preview-kind-mismatch', 'a TextureAsset with kind texture', {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n });\n }\n const asset = input.asset;\n const inlineOwner = asset.ownerFacts;\n const ownerFacts = isRecord(inlineOwner) ? inlineOwner : input.ownerFacts;\n const readString = (field: string): string | undefined =>\n requiredString(asset, field) ?? requiredString(ownerFacts ?? {}, field);\n const subjectDigest = readString('digest') ?? input.digest ?? readString('subjectDigest');\n const boundDigest = readString('boundDigest');\n const uvDigest = readString('uvDigest');\n const bindingDigest = readString('bindingDigest');\n const format = readString('format');\n const colorSpace = readString('colorSpace');\n const filter = readString('filter');\n const shape = isRecord(asset.shape) ? asset.shape : undefined;\n const extent = shape !== undefined && isRecord(shape.extent) ? shape.extent : undefined;\n const shapeDimensions =\n extent !== undefined\n ? [requiredNumber(extent, 'width'), requiredNumber(extent, 'height')]\n : undefined;\n const dimensionsValue = asset.dimensions;\n const dimensions = Array.isArray(dimensionsValue)\n ? dimensionsValue\n : shapeDimensions?.[0] !== undefined && shapeDimensions[1] !== undefined\n ? shapeDimensions\n : [requiredNumber(asset, 'width'), requiredNumber(asset, 'height')];\n const authoredMips = isRecord(asset.mips) ? asset.mips : undefined;\n const packedLevelCount =\n authoredMips?.kind === 'packed' ? requiredNumber(authoredMips, 'levelCount') : undefined;\n if (\n authoredMips?.kind === 'packed' &&\n (packedLevelCount === undefined || !Number.isInteger(packedLevelCount) || packedLevelCount <= 0)\n ) {\n return subjectFailure('resource-preview-subject-invalid', 'TextureAsset packed mip metadata', {\n phase: 'subject',\n guid: input.guid,\n field: 'mips.levelCount',\n });\n }\n const mipCount =\n authoredMipCount(asset, shapeDimensions) ??\n requiredNumber(asset, 'mipCount') ??\n requiredNumber(asset, 'mipLevelCount') ??\n requiredNumber(ownerFacts ?? {}, 'mipCount') ??\n requiredNumber(ownerFacts ?? {}, 'mipLevelCount') ??\n 1;\n const payloadClass =\n readString('payloadClass') ?? classifyPayload(asset.data, format) ?? undefined;\n if (\n subjectDigest === undefined ||\n boundDigest === undefined ||\n uvDigest === undefined ||\n bindingDigest === undefined ||\n format === undefined ||\n colorSpace === undefined ||\n filter === undefined ||\n dimensions.length !== 2 ||\n dimensions.some(\n (value) => typeof value !== 'number' || !Number.isInteger(value) || value <= 0,\n ) ||\n !Number.isInteger(mipCount) ||\n mipCount <= 0 ||\n !isTexturePayloadClass(payloadClass)\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'TextureAsset dimensions and owner binding facts',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'digest/dimensions/format/colorSpace/mipCount/uv/filter/binding',\n },\n );\n }\n const [width = 0, height = 0] = dimensions;\n return {\n ok: true,\n value: {\n subjectDigest,\n boundDigest,\n dimensions: [width, height],\n format,\n colorSpace,\n mipCount,\n uvDigest,\n filter,\n bindingDigest,\n payloadClass,\n },\n };\n}\n\nexport async function executeTexturePreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the existing AssetRegistry capability',\n {\n phase: 'asset-registry',\n runId: input.runId,\n },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the texture',\n input.runId,\n loaded.error,\n );\n const inspected = inspectTextureSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n const drawCalls = renderer?.texture?.drawCalls ?? renderer?.drawCalls ?? 0;\n if (\n renderer?.rendererReady !== true ||\n renderer.worldReady !== true ||\n drawCalls <= 0 ||\n renderer.observation === undefined\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World and Renderer texture stage to produce an observed output',\n {\n phase: 'renderer',\n runId: input.runId,\n },\n );\n }\n const observation = renderer.observation;\n const observedPayloadClass = observationPayloadClass(observation);\n if (observedPayloadClass === undefined) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered texture observation to classify the actual payload',\n { phase: 'renderer-observation', runId: input.runId },\n );\n }\n if (observation.rendererTextureResident !== true) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the Renderer to report a resident texture binding for the preview draw',\n { phase: 'renderer-texture-binding', runId: input.runId },\n );\n }\n const observed: TextureOracleInput['observed'] = {\n subjectDigest: observationString(observation, 'subjectDigest') ?? '',\n boundDigest: observationString(observation, 'boundDigest') ?? '',\n dimensions: observationDimensions(observation) ?? [0, 0],\n format: observationString(observation, 'format') ?? '',\n colorSpace: observationString(observation, 'colorSpace') ?? '',\n mipCount: typeof observation.mipCount === 'number' ? observation.mipCount : 0,\n uvDigest: observationString(observation, 'uvDigest') ?? '',\n filter: observationString(observation, 'filter') ?? '',\n bindingDigest: observationString(observation, 'bindingDigest') ?? '',\n rendererHealthy: renderer.rendererReady && renderer.worldReady,\n drawCalls,\n nonBlackPixels: renderer.nonBlackPixels,\n payloadClass: observedPayloadClass,\n };\n const oracle = evaluateTextureOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the rendered texture binding observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: { kind: 'texture' as const, guid: args.guid, digest: inspected.value.subjectDigest },\n presentation: canonicalPresentation('texture'),\n recipe: createCanonicalPreviewRecipe('texture'),\n quad: { projection: 'orthographic', aspect: 'preserving', stage: 'unlit-checker' },\n binding: { filter: inspected.value.filter, digest: inspected.value.bindingDigest },\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { executeTexturePreview } from './domains/texture.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport type TextureColorSpace = 'linear' | 'srgb' | 'hdr';\n\nexport interface TextureBinding {\n readonly guid: string;\n readonly width: number;\n readonly height: number;\n readonly format: string;\n readonly colorSpace: TextureColorSpace;\n readonly alpha: boolean;\n readonly mipLevels: number;\n readonly channels: number;\n}\n\nexport interface TexturePreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: TextureBinding;\n}\n\nexport interface TexturePreviewReport {\n readonly kind: 'texture';\n readonly bindingGuid: string;\n readonly width: number;\n readonly height: number;\n readonly format: string;\n readonly colorSpace: TextureColorSpace;\n readonly alpha: boolean;\n readonly mipLevels: number;\n readonly channels: number;\n readonly aspectRatio: number;\n readonly checkerPixels: number;\n readonly subjectNonBlackPixels: number;\n}\n\nconst texturePreviewArgsSchema: ToolSchema<TexturePreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a texture preview request object' };\n const request = value as Partial<TexturePreviewRequest>;\n const binding = request.binding;\n if (request.subject?.kind !== 'TextureAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a TextureAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n !Number.isSafeInteger(binding.width) ||\n binding.width < 1 ||\n !Number.isSafeInteger(binding.height) ||\n binding.height < 1 ||\n binding.format.length === 0 ||\n !['linear', 'srgb', 'hdr'].includes(binding.colorSpace) ||\n !Number.isSafeInteger(binding.mipLevels) ||\n binding.mipLevels < 1 ||\n !Number.isSafeInteger(binding.channels) ||\n binding.channels < 1 ||\n binding.channels > 4\n )\n return {\n ok: false,\n error: 'expected complete texture dimensions, format, and color-space facts',\n };\n return { ok: true, value: request as TexturePreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"TextureAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"width\",\"height\",\"format\",\"colorSpace\",\"alpha\",\"mipLevels\",\"channels\"]}}}',\n};\n\nconst texturePreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const texturePreviewDescriptor = {\n id: 'texture.preview',\n title: 'Preview texture asset',\n summary: 'Presents one texture on an aspect-correct quad with alpha checker evidence.',\n realm: 'engine' as const,\n argsSchema: texturePreviewArgsSchema,\n resultSchema: texturePreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'TextureAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nfunction defaultTextureRunner(\n request: TexturePreviewRequest,\n): Promise<PreviewDomainResult<TexturePreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'texture'));\n}\n\nexport function createTexturePreviewContribution(\n runner: PreviewDomainRunner<TexturePreviewRequest, TexturePreviewReport> = async (request) =>\n defaultTextureRunner(request),\n): ToolContribution<TexturePreviewRequest, unknown> {\n return defineTool(texturePreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n const report = result.value.report;\n const binding = request.binding;\n if (\n report.bindingGuid !== request.subject.guid ||\n report.width !== binding.width ||\n report.height !== binding.height ||\n report.format !== binding.format ||\n report.colorSpace !== binding.colorSpace ||\n report.alpha !== binding.alpha ||\n report.mipLevels !== binding.mipLevels ||\n report.channels !== binding.channels ||\n report.aspectRatio !== binding.width / binding.height ||\n report.checkerPixels <= 0 ||\n report.subjectNonBlackPixels <= 0\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'the texture binding facts and aspect-correct checker presentation to agree',\n 'Reject texture replacement, color-space drift, and background-only captures.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: report.bindingGuid,\n expectedFormat: binding.format,\n actualFormat: report.format,\n expectedColorSpace: binding.colorSpace,\n actualColorSpace: report.colorSpace,\n expectedAspectRatio: binding.width / binding.height,\n actualAspectRatio: report.aspectRatio,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const texturePreview = defineTool(subjectDescriptor('texture'), (args, context) => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeTexturePreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n});\nexport const texturePreviewPlugin = nativePreviewPlugin('texture', texturePreview);\nexport default texturePreviewPlugin;\n","import type { ArtifactRef } from '@forgeax/engine-tool-runtime';\nimport { evaluateVfxOracle, type VfxOracleInput } from '../evidence/oracle.js';\nimport type { PreviewAssetRegistry, PreviewRenderRuntime } from '../host/preview-host.js';\nimport { canonicalPresentation, createCanonicalPreviewRecipe } from '../kit/canonical.js';\nimport { assetLoadFailure, type ResourcePreviewArgs, subjectFailure } from './subject.js';\n\nexport interface VfxSubjectInspection {\n readonly subjectDigest: string;\n readonly programFingerprint: string;\n readonly emitterDigest: string;\n readonly sampleDigest: string;\n readonly boundsDigest: string;\n readonly computeDigest: string;\n readonly indirectDigest: string;\n readonly contactSheetDigest?: string;\n readonly authoredBounds: readonly [number, number, number, number, number, number];\n}\n\ntype InspectionResult =\n | { readonly ok: true; readonly value: VfxSubjectInspection }\n | ReturnType<typeof subjectFailure>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction requiredString(value: unknown): string | undefined {\n return typeof value === 'string' && value.length > 0 ? value : undefined;\n}\n\nfunction finiteVector(value: unknown, length: number): number[] | undefined {\n if (\n !Array.isArray(value) ||\n value.length !== length ||\n value.some((entry) => typeof entry !== 'number' || !Number.isFinite(entry))\n )\n return undefined;\n return value;\n}\n\nfunction authoredBounds(\n emitters: readonly Record<string, unknown>[],\n): readonly [number, number, number, number, number, number] | undefined {\n let minX = Infinity;\n let minY = Infinity;\n let minZ = Infinity;\n let maxX = -Infinity;\n let maxY = -Infinity;\n let maxZ = -Infinity;\n for (const emitter of emitters) {\n const bounds = emitter.bounds;\n if (!isRecord(bounds) || typeof bounds.kind !== 'string') return undefined;\n if (bounds.kind === 'sphere') {\n const center = finiteVector(bounds.center, 3);\n const radius = bounds.radius;\n if (\n center === undefined ||\n typeof radius !== 'number' ||\n !Number.isFinite(radius) ||\n radius < 0\n )\n return undefined;\n const [x, y, z] = center;\n if (x === undefined || y === undefined || z === undefined) return undefined;\n minX = Math.min(minX, x - radius);\n minY = Math.min(minY, y - radius);\n minZ = Math.min(minZ, z - radius);\n maxX = Math.max(maxX, x + radius);\n maxY = Math.max(maxY, y + radius);\n maxZ = Math.max(maxZ, z + radius);\n continue;\n }\n if (bounds.kind === 'aabb') {\n const min = finiteVector(bounds.min, 3);\n const max = finiteVector(bounds.max, 3);\n if (\n min === undefined ||\n max === undefined ||\n min.some((entry, index) => entry > (max[index] ?? entry))\n )\n return undefined;\n const [loX, loY, loZ] = min;\n const [hiX, hiY, hiZ] = max;\n if (\n loX === undefined ||\n loY === undefined ||\n loZ === undefined ||\n hiX === undefined ||\n hiY === undefined ||\n hiZ === undefined\n )\n return undefined;\n minX = Math.min(minX, loX);\n minY = Math.min(minY, loY);\n minZ = Math.min(minZ, loZ);\n maxX = Math.max(maxX, hiX);\n maxY = Math.max(maxY, hiY);\n maxZ = Math.max(maxZ, hiZ);\n continue;\n }\n return undefined;\n }\n if (![minX, minY, minZ, maxX, maxY, maxZ].every(Number.isFinite)) return undefined;\n return [minX, minY, minZ, maxX, maxY, maxZ];\n}\n\nfunction jsonDigest(value: unknown): string | undefined {\n const encoded = JSON.stringify(value);\n return typeof encoded === 'string' && encoded.length > 0 ? encoded : undefined;\n}\n\nexport function inspectVfxSubject(input: {\n readonly guid: string;\n readonly asset: unknown;\n readonly digest?: string;\n readonly ownerFacts?: Readonly<Record<string, string | number | boolean>>;\n}): InspectionResult {\n if (!isRecord(input.asset) || input.asset.kind !== 'particle-effect') {\n return subjectFailure(\n 'resource-preview-kind-mismatch',\n 'a ParticleEffectAsset with kind particle-effect',\n {\n phase: 'subject',\n guid: input.guid,\n actualKind:\n isRecord(input.asset) && typeof input.asset.kind === 'string'\n ? input.asset.kind\n : 'unknown',\n },\n );\n }\n if (input.asset.schemaVersion !== 3) {\n return subjectFailure('resource-preview-subject-invalid', 'a schema-v3 ParticleEffectAsset', {\n phase: 'subject',\n guid: input.guid,\n field: 'schemaVersion',\n });\n }\n const program = input.asset.program;\n const programFingerprint = requiredString(input.asset.programFingerprint);\n if (!isRecord(program) || program.format !== 'forgeax-vfx-program-4') {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'a cooked forgeax-vfx-program-4 payload',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'program',\n },\n );\n }\n if (\n programFingerprint === undefined ||\n requiredString(program.fingerprint) !== programFingerprint\n ) {\n return subjectFailure('resource-preview-subject-invalid', 'non-empty authored VFX bounds', {\n phase: 'subject',\n guid: input.guid,\n field: 'programFingerprint',\n });\n }\n const rawEmitters = Array.isArray(program.emitters) ? program.emitters : [];\n const emitters = rawEmitters.filter(isRecord);\n const definitions = Array.isArray(input.asset.emitters)\n ? input.asset.emitters.filter(isRecord)\n : [];\n if (\n emitters.length === 0 ||\n emitters.length !== rawEmitters.length ||\n definitions.length !== emitters.length\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the ParticleEffectAsset to publish matching cooked emitter definitions',\n { phase: 'subject', guid: input.guid, field: 'emitters' },\n );\n }\n for (const [index, emitter] of emitters.entries()) {\n const id = requiredString(emitter.id);\n const module = requiredString(emitter.module);\n const capacity = emitter.capacity;\n const backend = emitter.backend;\n const renderers = emitter.renderers;\n if (\n id === undefined ||\n module === undefined ||\n typeof capacity !== 'number' ||\n !Number.isSafeInteger(capacity) ||\n capacity <= 0 ||\n !isRecord(backend) ||\n backend.required !== 'gpu' ||\n !isRecord(emitter.schedule) ||\n !Array.isArray(renderers) ||\n !isRecord(definitions[index]) ||\n definitions[index].id !== id ||\n definitions[index].capacity !== capacity\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'each cooked emitter to match its ParticleEffectAsset definition',\n { phase: 'subject', guid: input.guid, field: `emitters[${index}]` },\n );\n }\n }\n const bounds = authoredBounds(emitters);\n if (bounds === undefined) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'finite authored VFX emitter bounds',\n {\n phase: 'subject',\n guid: input.guid,\n field: 'program.emitters[].bounds',\n },\n );\n }\n const emitterDigest = jsonDigest(\n emitters.map(({ id, module, capacity }) => ({ id, module, capacity })),\n );\n const sampleDigest = jsonDigest(emitters.map(({ id, schedule }) => ({ id, schedule })));\n const boundsDigest = jsonDigest(\n emitters.map(({ id, bounds: emitterBounds }) => ({ id, bounds: emitterBounds })),\n );\n const indirectDigest = jsonDigest(\n emitters.map(({ id, renderers }) => ({\n id,\n renderers: (renderers as readonly unknown[]).filter(isRecord).map((renderer) => ({\n kind: renderer.kind,\n enabled: renderer.enabled ?? true,\n })),\n })),\n );\n if (\n emitterDigest === undefined ||\n sampleDigest === undefined ||\n boundsDigest === undefined ||\n indirectDigest === undefined\n ) {\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the cooked VFX program to publish stable emitter, schedule, bounds, and renderer facts',\n { phase: 'subject', guid: input.guid, field: 'program.emitters' },\n );\n }\n const ownerFacts = isRecord(input.asset.ownerFacts) ? input.asset.ownerFacts : input.ownerFacts;\n const subjectDigest =\n requiredString(input.asset.digest) ??\n requiredString(input.digest) ??\n requiredString(ownerFacts?.subjectDigest) ??\n programFingerprint;\n const contactSheetDigest = requiredString(ownerFacts?.contactSheetDigest);\n return {\n ok: true,\n value: {\n subjectDigest,\n programFingerprint,\n emitterDigest,\n sampleDigest,\n boundsDigest,\n computeDigest: programFingerprint,\n indirectDigest,\n ...(contactSheetDigest === undefined ? {} : { contactSheetDigest }),\n authoredBounds: bounds,\n },\n };\n}\n\nexport async function executeVfxPreview(\n args: ResourcePreviewArgs,\n input: {\n readonly assets?: PreviewAssetRegistry;\n readonly renderer?: PreviewRenderRuntime;\n readonly runId: string;\n readonly artifacts?: readonly ArtifactRef[];\n },\n) {\n if (input.assets === undefined)\n return subjectFailure(\n 'resource-preview-subject-invalid',\n 'the existing AssetRegistry capability',\n {\n phase: 'asset-registry',\n runId: input.runId,\n },\n );\n const loaded = await input.assets.loadByGuid<Record<string, unknown>>(args.guid);\n if (!loaded.ok)\n return assetLoadFailure(\n 'AssetRegistry.loadByGuid to resolve the VFX',\n input.runId,\n loaded.error,\n );\n const inspected = inspectVfxSubject({\n guid: args.guid,\n asset: loaded.value,\n ...(loaded.digest === undefined ? {} : { digest: loaded.digest }),\n ...(loaded.ownerFacts === undefined ? {} : { ownerFacts: loaded.ownerFacts }),\n });\n if (!inspected.ok) return inspected;\n const renderer = input.renderer;\n const runtime = input.renderer?.vfx;\n if (\n renderer?.rendererReady !== true ||\n renderer.worldReady !== true ||\n runtime === undefined ||\n renderer.observation === undefined\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'shared World, Renderer, and VFX compute runtime',\n {\n phase: 'renderer',\n runId: input.runId,\n },\n );\n }\n const observation = renderer.observation;\n const observedString = (field: string): string =>\n typeof observation[field] === 'string' ? (observation[field] as string) : '';\n const authoredBounds = observation.authoredBounds;\n const seed = observation.seed;\n const fixedDelta = observation.fixedDelta;\n const timelineFrames = observation.timelineFrames;\n if (\n !Array.isArray(authoredBounds) ||\n authoredBounds.length !== 6 ||\n authoredBounds.some((value) => typeof value !== 'number' || !Number.isFinite(value)) ||\n typeof seed !== 'number' ||\n typeof fixedDelta !== 'number' ||\n typeof timelineFrames !== 'number' ||\n !Number.isInteger(timelineFrames) ||\n timelineFrames <= 0 ||\n !Number.isFinite(seed) ||\n !Number.isFinite(fixedDelta) ||\n fixedDelta <= 0\n ) {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the VFX render observation to include authored bounds and timeline facts',\n { phase: 'renderer-observation', runId: input.runId },\n );\n }\n const observed: VfxOracleInput['observed'] = {\n ...inspected.value,\n subjectDigest: observedString('subjectDigest'),\n programFingerprint: observedString('programFingerprint'),\n emitterDigest: observedString('emitterDigest'),\n sampleDigest: observedString('sampleDigest'),\n boundsDigest: observedString('boundsDigest'),\n computeDigest: observedString('computeDigest'),\n indirectDigest: observedString('indirectDigest'),\n ...(observedString('contactSheetDigest') === ''\n ? {}\n : { contactSheetDigest: observedString('contactSheetDigest') }),\n authoredBounds: authoredBounds as unknown as readonly [\n number,\n number,\n number,\n number,\n number,\n number,\n ],\n seed,\n fixedDelta,\n timelineFrames,\n rendererHealthy: renderer.rendererReady && renderer.worldReady,\n dispatches: runtime.dispatches,\n indirectDraws: runtime.indirectDraws,\n subjectOutputs: runtime.subjectOutputs,\n nonBlackPixels: renderer.nonBlackPixels,\n };\n const oracle = evaluateVfxOracle({ requested: inspected.value, observed });\n if (oracle.status !== 'passed') {\n return subjectFailure(\n 'resource-preview-oracle-failed',\n 'the VFX compute and indirect observation to match the loaded owner facts',\n { phase: 'oracle', runId: input.runId, ...oracle.detail },\n );\n }\n return {\n ok: true as const,\n value: {\n subject: { kind: 'vfx' as const, guid: args.guid, digest: inspected.value.subjectDigest },\n presentation: canonicalPresentation('vfx'),\n recipe: createCanonicalPreviewRecipe('vfx'),\n authoredBounds: inspected.value.authoredBounds,\n timeline: {\n seed,\n fixedDelta,\n frames: timelineFrames,\n },\n oracle,\n artifacts: input.artifacts ?? [],\n },\n artifacts: input.artifacts ?? [],\n };\n}\n","import {\n defineTool,\n type SnapshotRef,\n type ToolContribution,\n type ToolPreviewContract,\n type ToolSchema,\n type ToolSubjectRef,\n} from '@forgeax/engine-tool-runtime';\nimport { nativePreviewPlugin, subjectDescriptor } from './domains/subject.js';\nimport { executeVfxPreview } from './domains/vfx.js';\nimport { previewHostCapability } from './host/preview-host.js';\nimport {\n domainFailure,\n type PreviewDomainResult,\n type PreviewDomainRunner,\n previewRuntimeUnavailable,\n validateDomainValue,\n} from './host.js';\n\nexport interface VfxBinding {\n readonly guid: string;\n readonly effectDigest: string;\n}\n\nexport interface VfxSimulationInput {\n readonly seed: number;\n readonly deltaSeconds: number;\n readonly frames: number;\n}\n\nexport interface VfxPreviewRequest {\n readonly subject: ToolSubjectRef;\n readonly snapshot: SnapshotRef;\n readonly binding: VfxBinding;\n readonly simulation: VfxSimulationInput;\n}\n\nexport interface VfxPreviewReport {\n readonly kind: 'vfx';\n readonly bindingGuid: string;\n readonly seed: number;\n readonly deltaSeconds: number;\n readonly frames: number;\n readonly computeSteps: number;\n readonly drawCalls: number;\n readonly subjectOutputDigest: string;\n readonly deterministicDigest: string;\n readonly captureNonBlackPixels: number;\n}\n\nconst vfxPreviewArgsSchema: ToolSchema<VfxPreviewRequest> = {\n parse(value) {\n if (value === null || typeof value !== 'object')\n return { ok: false, error: 'expected a VFX preview request object' };\n const request = value as Partial<VfxPreviewRequest>;\n const binding = request.binding;\n const simulation = request.simulation;\n if (request.subject?.kind !== 'ParticleEffectAsset' || typeof request.subject.guid !== 'string')\n return { ok: false, error: 'expected a ParticleEffectAsset subject' };\n if (\n request.snapshot === undefined ||\n !Number.isSafeInteger(request.snapshot.revision) ||\n typeof request.snapshot.digest !== 'string'\n )\n return { ok: false, error: 'expected a revisioned snapshot' };\n if (\n binding === undefined ||\n binding.guid !== request.subject.guid ||\n binding.effectDigest.length === 0 ||\n simulation === undefined ||\n !Number.isSafeInteger(simulation.seed) ||\n simulation.deltaSeconds <= 0 ||\n !Number.isFinite(simulation.deltaSeconds) ||\n !Number.isSafeInteger(simulation.frames) ||\n simulation.frames < 1 ||\n simulation.frames > 240\n )\n return { ok: false, error: 'expected a bound effect and bounded deterministic timeline' };\n return { ok: true, value: request as VfxPreviewRequest };\n },\n describe:\n '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"binding\",\"simulation\"],\"properties\":{\"subject\":{\"type\":\"object\",\"required\":[\"kind\",\"guid\"],\"properties\":{\"kind\":{\"const\":\"ParticleEffectAsset\"},\"guid\":{\"type\":\"string\"}}},\"snapshot\":{\"type\":\"object\",\"required\":[\"revision\",\"digest\"]},\"binding\":{\"type\":\"object\",\"required\":[\"guid\",\"effectDigest\"]},\"simulation\":{\"type\":\"object\",\"required\":[\"seed\",\"deltaSeconds\",\"frames\"]}}}',\n};\n\nconst vfxPreviewResultSchema: ToolSchema<unknown> = {\n parse: (value) => ({ ok: true, value }),\n describe: '{\"type\":\"object\",\"required\":[\"subject\",\"snapshot\",\"report\",\"artifacts\"]}',\n};\n\nexport const vfxPreviewDescriptor = {\n id: 'vfx.preview',\n title: 'Preview particle effect asset',\n summary: 'Runs a fixed-seed particle compute/draw timeline and captures its subject output.',\n realm: 'engine' as const,\n argsSchema: vfxPreviewArgsSchema,\n resultSchema: vfxPreviewResultSchema,\n evidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n preview: {\n realm: 'engine' as const,\n subject: { kind: 'ParticleEffectAsset', guid: '<request>' },\n snapshot: { revision: 0, digest: '<request>' },\n requiredEvidence: ['rhi-tape', 'png', 'profile-capture'] as const,\n } satisfies ToolPreviewContract,\n};\n\nexport function vfxDeterministicDigest(request: VfxPreviewRequest): string {\n return `sha256:vfx:${request.binding.effectDigest}:${request.simulation.seed}:${request.simulation.deltaSeconds}:${request.simulation.frames}`;\n}\n\nfunction defaultVfxRunner(\n request: VfxPreviewRequest,\n): Promise<PreviewDomainResult<VfxPreviewReport>> {\n return Promise.resolve(previewRuntimeUnavailable(request.subject, request.snapshot, 'vfx'));\n}\n\nexport function createVfxPreviewContribution(\n runner: PreviewDomainRunner<VfxPreviewRequest, VfxPreviewReport> = async (request) =>\n defaultVfxRunner(request),\n): ToolContribution<VfxPreviewRequest, unknown> {\n return defineTool(vfxPreviewDescriptor, async (request, context) => {\n const result = await runner(request, context);\n if (!result.ok) return result;\n const report = result.value.report;\n const expectedDigest = vfxDeterministicDigest(request);\n if (\n report.bindingGuid !== request.subject.guid ||\n report.seed !== request.simulation.seed ||\n report.deltaSeconds !== request.simulation.deltaSeconds ||\n report.frames !== request.simulation.frames ||\n report.computeSteps !== request.simulation.frames ||\n report.drawCalls !== request.simulation.frames ||\n report.subjectOutputDigest.length === 0 ||\n report.deterministicDigest !== expectedDigest ||\n report.captureNonBlackPixels <= 0\n ) {\n return domainFailure(\n 'preview-subject-falsified',\n 'the effect binding, fixed simulation input, compute/draw steps, and subject output to agree',\n 'Reject stale seed/delta reports and captures without a subject output.',\n {\n requestGuid: request.subject.guid,\n reportBindingGuid: report.bindingGuid,\n expectedDigest,\n actualDigest: report.deterministicDigest,\n computeSteps: report.computeSteps,\n drawCalls: report.drawCalls,\n },\n );\n }\n const validated = validateDomainValue(result.value, request);\n if (!validated.ok) return validated;\n return { ok: true, value: validated.value };\n });\n}\n\nexport const vfxPreview = defineTool(subjectDescriptor('vfx'), (args, context) =>\n (async () => {\n const host = context.require(previewHostCapability);\n if (!host.ok) return host;\n return host.value.withSession(async (mechanisms) =>\n executeVfxPreview(args, {\n ...(mechanisms.assets === undefined ? {} : { assets: mechanisms.assets }),\n ...(mechanisms.renderer === undefined ? {} : { renderer: mechanisms.renderer }),\n runId: mechanisms.runId,\n ...(mechanisms.artifacts === undefined ? {} : { artifacts: mechanisms.artifacts }),\n }),\n );\n })(),\n);\nexport const vfxPreviewPlugin = nativePreviewPlugin('vfx', vfxPreview);\nexport default vfxPreviewPlugin;\n","import type { MaterialAsset, MeshAsset } from '@forgeax/engine-types';\nimport {\n type MaterialBinding,\n type MaterialPreviewRequest,\n materialPreviewDescriptor,\n} from './material.js';\nimport { type MeshBinding, type MeshPreviewRequest, meshPreviewDescriptor } from './mesh.js';\nimport {\n type TextureBinding,\n type TexturePreviewRequest,\n texturePreviewDescriptor,\n} from './texture.js';\nimport {\n type VfxBinding,\n type VfxPreviewRequest,\n type VfxSimulationInput,\n vfxPreviewDescriptor,\n} from './vfx.js';\n\nexport type PreviewSnapshot = MaterialPreviewRequest['snapshot'];\nexport type MaterialPreviewPrimitive = MaterialPreviewRequest & {\n readonly operationId: typeof materialPreviewDescriptor.id;\n readonly source: 'engine';\n};\nexport type MeshPreviewPrimitive = MeshPreviewRequest & {\n readonly operationId: typeof meshPreviewDescriptor.id;\n readonly source: 'engine';\n};\nexport type VfxPreviewPrimitive = VfxPreviewRequest & {\n readonly operationId: typeof vfxPreviewDescriptor.id;\n readonly source: 'engine';\n};\nexport type TexturePreviewPrimitive = TexturePreviewRequest & {\n readonly operationId: typeof texturePreviewDescriptor.id;\n readonly source: 'engine';\n};\n\nexport function previewSnapshot(subjectGuid: string, revision = 0): PreviewSnapshot {\n if (subjectGuid.length === 0 || !Number.isSafeInteger(revision) || revision < 0) {\n throw new Error('preview primitive requires a stable subject snapshot');\n }\n return { revision, digest: `project-snapshot:${subjectGuid}:${revision}` };\n}\n\nexport function materialBindingFromPayload(\n guid: string,\n payload: MaterialAsset,\n): MaterialBinding | undefined {\n if (payload.kind !== 'material' || payload.passes === undefined || payload.passes.length === 0)\n return undefined;\n const program = payload.passes[0]?.program;\n if (!program?.module || payload.parameters === undefined || payload.parameters.length === 0)\n return undefined;\n return {\n guid,\n programDigest: `material-program:${program.module}`,\n bindings: payload.parameters.map((parameter) => parameter.name),\n };\n}\n\nexport function meshBindingFromPayload(guid: string, payload: MeshAsset): MeshBinding | undefined {\n if (\n payload.kind !== 'mesh' ||\n payload.vertices.length === 0 ||\n !payload.aabb ||\n payload.aabb.length !== 6\n )\n return undefined;\n const indices = payload.indices?.length ?? payload.vertices.length / 3;\n const [minX, minY, minZ, maxX, maxY, maxZ] = payload.aabb;\n if (\n minX === undefined ||\n minY === undefined ||\n minZ === undefined ||\n maxX === undefined ||\n maxY === undefined ||\n maxZ === undefined\n )\n return undefined;\n const submeshes =\n payload.submeshes.length > 0\n ? payload.submeshes.map((submesh, index) => ({\n id: `submesh-${index}`,\n vertexCount: submesh.vertexCount,\n indexCount: submesh.indexCount,\n }))\n : [{ id: 'mesh', vertexCount: payload.vertices.length / 3, indexCount: indices }];\n if (submeshes.some((submesh) => submesh.vertexCount <= 0 || submesh.indexCount <= 0))\n return undefined;\n return {\n guid,\n vertexDigest: `mesh-vertices:${payload.vertices.length}`,\n indexDigest: `mesh-indices:${indices}`,\n submeshes,\n aabb: {\n min: [minX, minY, minZ],\n max: [maxX, maxY, maxZ],\n },\n };\n}\n\nfunction assertSnapshot(snapshot: PreviewSnapshot): void {\n if (\n !Number.isSafeInteger(snapshot.revision) ||\n snapshot.revision < 0 ||\n snapshot.digest.length === 0\n )\n throw new Error('preview primitive requires a revisioned snapshot');\n}\n\nfunction assertSubject(subjectGuid: string, bindingGuid: string, domain: string): void {\n if (subjectGuid.length === 0 || bindingGuid !== subjectGuid)\n throw new Error(`${domain} preview primitive subject and binding are disconnected`);\n}\n\nfunction subjectKind(operationId: string): string {\n if (operationId === 'material.preview') return 'MaterialAsset';\n if (operationId === 'mesh.preview') return 'MeshAsset';\n if (operationId === 'vfx.preview') return 'ParticleEffectAsset';\n return 'TextureAsset';\n}\n\nfunction base<\n T extends {\n readonly subject: { readonly guid: string };\n readonly binding: { readonly guid: string };\n },\n>(\n operationId: string,\n subjectGuid: string,\n snapshot: PreviewSnapshot,\n binding: T['binding'],\n value: Omit<T, 'subject' | 'snapshot' | 'binding' | 'operationId' | 'source'>,\n): T & { readonly operationId: string; readonly source: 'engine' } {\n assertSnapshot(snapshot);\n assertSubject(subjectGuid, binding.guid, operationId);\n return Object.freeze({\n ...value,\n operationId,\n source: 'engine' as const,\n subject: { kind: subjectKind(operationId), guid: subjectGuid },\n snapshot,\n binding,\n }) as unknown as T & { readonly operationId: string; readonly source: 'engine' };\n}\n\nexport function createMaterialPreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: MaterialBinding;\n}): MaterialPreviewPrimitive {\n if (input.binding.programDigest.length === 0 || input.binding.bindings.length === 0)\n throw new Error('material preview primitive requires program bindings');\n return base<MaterialPreviewPrimitive>(\n materialPreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n {},\n ) as MaterialPreviewPrimitive;\n}\n\nexport function createMeshPreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: MeshBinding;\n}): MeshPreviewPrimitive {\n if (\n input.binding.vertexDigest.length === 0 ||\n input.binding.indexDigest.length === 0 ||\n input.binding.submeshes.length === 0\n )\n throw new Error('mesh preview primitive requires complete geometry bindings');\n return base<MeshPreviewPrimitive>(\n meshPreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n {},\n ) as MeshPreviewPrimitive;\n}\n\nexport function createVfxPreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: VfxBinding;\n readonly simulation: VfxSimulationInput;\n}): VfxPreviewPrimitive {\n if (input.binding.effectDigest.length === 0 || input.simulation.frames < 1)\n throw new Error('vfx preview primitive requires a bounded effect simulation');\n return base<VfxPreviewPrimitive>(\n vfxPreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n { simulation: input.simulation },\n ) as VfxPreviewPrimitive;\n}\n\nexport function createTexturePreviewPrimitive(input: {\n readonly subjectGuid: string;\n readonly snapshot: PreviewSnapshot;\n readonly binding: TextureBinding;\n}): TexturePreviewPrimitive {\n if (\n input.binding.width < 1 ||\n input.binding.height < 1 ||\n input.binding.format.length === 0 ||\n input.binding.mipLevels < 1 ||\n input.binding.channels < 1\n )\n throw new Error('texture preview primitive requires complete dimensions and format facts');\n return base<TexturePreviewPrimitive>(\n texturePreviewDescriptor.id,\n input.subjectGuid,\n input.snapshot,\n input.binding,\n {},\n ) as TexturePreviewPrimitive;\n}\n"]}
|