@resolveio/server-lib 22.2.41 → 22.2.43

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/monitor.manager.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA0B;AAC1B,gFAAoE;AACpE,0FAA8E;AAC9E,sFAA0E;AAC1E,oFAAwE;AACxE,gEAA0D;AAC1D,yCAAmD;AAGnD,IAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,IAAM,cAAc,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,qBAAqB;AAE7D;IAIC;QAHQ,sBAAiB,GAAG,EAAE,CAAC;QACvB,iBAAY,GAAoB,EAAE,CAAC;IAE5B,CAAC;IAEH,qBAAM,GAAnB;;;;;;wBACO,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;wBAC5C,qBAAM,cAAc,CAAC,UAAU,EAAE,EAAA;;wBAAjC,SAAiC,CAAC;wBAClC,sBAAO,cAAc,EAAC;;;;KACtB;IAEa,mCAAU,GAAxB;;;;;wBACC,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;wBAC3D,qBAAM,IAAI,CAAC,cAAc,EAAE,EAAA;;wBAA3B,SAA2B,CAAC;wBAC5B,IAAI,CAAC,cAAc,EAAE,CAAC;;;;;KACtB;IAED,mCAAU,GAAV;QACC,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC;QACjC,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACjD,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAElB,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;gBAC5B,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC;YACD,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;QAC7B,CAAC;QAED,OAAO;YACN,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM;YAC7B,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC,MAAM;SAC9B,CAAC;IACH,CAAC;IAEK,uCAAc,GAApB;;;;;;;6BAGE,CAAA,sCAAe,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,KAAK,uBAAuB;+BACvE,sCAAe,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,KAAK,uBAAuB,CAAA,EAD3E,wBAC2E;;;;wBAGzD,qBAAM,eAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,EAAA;;wBAAnF,eAAa,SAAsE;wBAEvF,WAAW,CAAC;;;;;;wCAEV,qBAAM,eAAK,CAAC,IAAI,CAAC,0CAA0C,EAAE;gDAC5D,IAAI,EAAE,aAAa;gDACnB,eAAe,EAAE,YAAU,CAAC,IAAI;gDAChC,OAAO,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,QAAQ;oDACnD,CAAC,CAAO,OAAO,CAAC,GAAG,CAAC,WAAY,CAAC,QAAQ,EAAE;oDAC3C,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW;gDAC1B,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;6CACxC,CAAC,EAAA;;wCAPF,SAOE,CAAC;;;;;;;;6BAGJ,EAAE,KAAK,CAAC,CAAC;;;;;;wBAKR,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;wBAEhC,WAAW,CAAC;;;;;wCACP,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;wCACjB,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;wCAC/B,cAAc,GAAG,UAAU,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;wCAChD,eAAe,GAAG,UAAU,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;wCACnD,aAAa,GAAG,CAAC,GAAG,cAAc,GAAG,eAAe,CAAC;6CAIxD,CAAC,sCAAe,CAAC,sBAAsB,EAAE,EAAzC,wBAAyC;wCAEzC,qBAAM,oCAAW,CAAC,MAAM,CAAC;gDACxB,GAAG,EAAE,IAAA,0BAAiB,GAAE;gDACxB,QAAQ,EAAE;oDACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;oDAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;iDACxD;gDACD,IAAI,EAAE,GAAG;gDACT,GAAG,EAAE,aAAa;gDAClB,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;6CACvB,CAAC,EAAA;;wCATF,SASE,CAAC;;;wCAGH,IAAI,CAAC,eAAe,CAAC;4CACpB,IAAI,EAAE,aAAa;4CACnB,IAAI,EAAE;gDACL,QAAQ,EAAE;oDACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;oDAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;iDACxD;gDACD,IAAI,EAAE,GAAG;gDACT,GAAG,EAAE,aAAa;gDAClB,MAAM,EAAE,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;6CACvB;yCACD,CAAC,CAAC;;;wCAGJ,OAAO,GAAG,UAAU,CAAC;wCAEf,QAAQ,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;6CAGtC,CAAC,sCAAe,CAAC,sBAAsB,EAAE,EAAzC,wBAAyC;wCAEzC,qBAAM,0CAAc,CAAC,MAAM,CAAC;gDAC3B,GAAG,EAAE,IAAA,0BAAiB,GAAE;gDACxB,QAAQ,EAAE;oDACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;oDAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;iDACxD;gDACD,IAAI,EAAE,GAAG;gDACT,cAAc,EAAE,QAAQ,CAAC,SAAS;gDAClC,aAAa,EAAE,QAAQ,CAAC,QAAQ;gDAChC,aAAa,EAAE,EAAE,CAAC,OAAO,EAAE;gDAC3B,OAAO,EAAE,QAAQ,CAAC,GAAG;gDACrB,OAAO,EAAE,QAAQ,CAAC,QAAQ;gDAC1B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;6CACvB,CAAC,EAAA;;wCAbF,SAaE,CAAC;;;wCAGH,IAAI,CAAC,eAAe,CAAC;4CACpB,IAAI,EAAE,gBAAgB;4CACtB,IAAI,EAAE;gDACL,QAAQ,EAAE;oDACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;oDAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;iDACxD;gDACD,IAAI,EAAE,GAAG;gDACT,cAAc,EAAE,QAAQ,CAAC,SAAS;gDAClC,aAAa,EAAE,QAAQ,CAAC,QAAQ;gDAChC,aAAa,EAAE,EAAE,CAAC,OAAO,EAAE;gDAC3B,OAAO,EAAE,QAAQ,CAAC,GAAG;gDACrB,OAAO,EAAE,QAAQ,CAAC,QAAQ;gDAC1B,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;gDACvB,IAAI,EAAE,QAAQ;6CACd;yCACD,CAAC,CAAC;;;;;6BAEJ,EAAE,IAAI,CAAC,CAAC;;;;;KACT;IAEK,wCAAe,GAArB,UAAsB,IAAuB;;;;;6BAE3C,CAAC,sCAAe,CAAC,sBAAsB,EAAE,EAAzC,wBAAyC;6BAErC,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAvC,wBAAuC;wBAC1C,qBAAM,wCAAa,CAAC,MAAM,CAAC;gCAC1B,GAAG,EAAE,IAAA,0BAAiB,GAAE;gCACxB,QAAQ,EAAE;oCACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;oCAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;iCACxD;gCACD,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;gCACzB,MAAM,EAAE,IAAI,CAAC,MAAM;gCACnB,cAAc,EAAE,IAAI,CAAC,UAAU;gCAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,QAAQ;oCACtD,CAAC,CAAC,IAAI,CAAC,KAAK;oCACZ,CAAC,CAAC,SAAS;6BACZ,CAAC,EAAA;;wBAbF,SAaE,CAAC;;;;wBAIJ,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;4BAC5B,IAAI,CAAC,eAAe,CAAC;gCACpB,IAAI,EAAE,eAAe;gCACrB,IAAI,EAAE;oCACL,QAAQ,EAAE;wCACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;wCAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;qCACxD;oCACD,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;oCACzB,MAAM,EAAE,IAAI,CAAC,MAAM;oCACnB,cAAc,EAAE,IAAI,CAAC,UAAU;oCAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oCACvB,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,QAAQ;wCACtD,CAAC,CAAC,IAAI,CAAC,KAAK;wCACZ,CAAC,CAAC,SAAS;iCACZ;6BACD,CAAC,CAAC;wBACJ,CAAC;;;;;;KAEF;IAEK,2CAAkB,GAAxB,UAAyB,IAAqB;;;;;wBAC7C,IAAI,OAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;4BACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACvC,CAAC;6BAGA,CAAC,sCAAe,CAAC,sBAAsB,EAAE,EAAzC,wBAAyC;wBAEzC,qBAAM,8CAAgB,CAAC,MAAM,CAAC;gCAC7B,GAAG,EAAE,IAAA,0BAAiB,GAAE;gCACxB,QAAQ,EAAE;oCACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;oCAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;iCACxD;gCACD,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gCAC9B,IAAI,EAAE,IAAI,CAAC,YAAY;gCACvB,IAAI,EAAE,IAAI,CAAC,YAAY;gCACvB,IAAI,EAAE,IAAI,CAAC,IAAI;gCACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;gCACvB,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,QAAQ;oCACpD,CAAC,CAAC,IAAI,CAAC,IAAI;oCACX,CAAC,CAAC,SAAS;6BACZ,CAAC,EAAA;;wBAdF,SAcE,CAAC;;;wBAGH,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;4BAC5B,IAAI,CAAC,eAAe,CAAC;gCACpB,IAAI,EAAE,kBAAkB;gCACxB,IAAI,EAAE;oCACL,QAAQ,EAAE;wCACT,QAAQ,EAAE,IAAI,CAAC,iBAAiB;wCAChC,MAAM,EAAE,sCAAe,CAAC,eAAe,EAAE,CAAC,aAAa,CAAC;qCACxD;oCACD,IAAI,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;oCAC9B,IAAI,EAAE,IAAI,CAAC,YAAY;oCACvB,IAAI,EAAE,IAAI,CAAC,YAAY;oCACvB,IAAI,EAAE,IAAI,CAAC,IAAI;oCACf,QAAQ,EAAE,IAAI,CAAC,QAAQ;oCACvB,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,QAAQ;wCACpD,CAAC,CAAC,IAAI,CAAC,IAAI;wCACX,CAAC,CAAC,SAAS;iCACZ;6BACD,CAAC,CAAC;wBACJ,CAAC;;;;;;KAEF;IAEO,wCAAe,GAAvB,UAAwB,IAAmB;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE7B,6CAA6C;QAC7C,IAAI,IAAI,CAAC,iBAAiB,EAAE,IAAI,cAAc,EAAE,CAAC;YAChD,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACzB,CAAC;IACF,CAAC;IAEO,0CAAiB,GAAzB;QACC,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,UAAC,KAAK,EAAE,IAAI;YAC3C,OAAO,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC,EAAE,CAAC,CAAC,CAAC;IACP,CAAC;IAED,uCAAc,GAAd;QAAA,iBAOC;QANA,0BAA0B;QAC1B,WAAW,CAAC;YACX,IAAI,KAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClC,KAAI,CAAC,gBAAgB,EAAE,CAAC;YACzB,CAAC;QACF,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAEO,yCAAgB,GAAxB;QACC,IAAM,KAAK,GAAG,EAAE,CAAC;QACjB,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,GAAG,cAAc,EAAE,CAAC;YACnE,IAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACvC,IAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;YAEzD,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,GAAG,cAAc,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjE,mCAAmC;gBACnC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAChC,MAAM;YACP,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjB,SAAS,IAAI,QAAQ,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACJ,iFAAiF;YACjF,sCAAe,CAAC,kBAAkB,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,gBAAgB,EAAE,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC7F,CAAC;IACF,CAAC;IACF,qBAAC;AAAD,CA9RA,AA8RC,IAAA;AA9RY,wCAAc;AAwS3B;IAMC;QALQ,eAAU,GAAG,CAAC,CAAC;QACf,YAAO,GAAG,EAAE,CAAC;QACb,gBAAW,GAAG,EAAE,CAAC;QACjB,WAAM,GAAG,EAAE,CAAC;IAEL,CAAC;IAET,mBAAM,GAAb,UAAc,MAAc,EAAE,UAAkB,EAAE,KAAa;QAC9D,IAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,YAAY,CAAC;IACrB,CAAC;IAEO,iCAAU,GAAlB,UAAmB,MAAc,EAAE,UAAkB,EAAE,KAAa;QACnE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACrB,CAAC;IAEY,6BAAM,GAAnB;;;;;;wBACK,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;wBAErB,YAAY,GAAsB;4BACrC,IAAI,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC;4BACvB,MAAM,EAAE,IAAI,CAAC,OAAO;4BACpB,UAAU,EAAE,IAAI,CAAC,WAAW;4BAC5B,KAAK,EAAE,IAAI,CAAC,MAAM;4BAClB,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU;yBACnC,CAAC;wBAEF,qBAAM,sCAAe,CAAC,aAAa,EAAE,CAAC,iBAAiB,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,EAAA;;wBAAvF,SAAuF,CAAC;;;;;KACxF;IACF,mBAAC;AAAD,CAlCA,AAkCC,IAAA;AAlCY,oCAAY;AAoCzB;IAMC;QALQ,iBAAY,GAAG,CAAC,CAAC;QACjB,eAAU,GAAsB,EAAE,CAAC;QACnC,6BAAwB,GAA8C,EAAE,CAAC;IAGlE,CAAC;IAET,6BAAM,GAAb;QACC,IAAM,sBAAsB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAC5D,sBAAsB,CAAC,UAAU,EAAE,CAAC;QACpC,OAAO,sBAAsB,CAAC;IAC/B,CAAC;IAEO,2CAAU,GAAlB;IAEA,CAAC;IAED,qDAAoB,GAApB,UACC,YAAiC,EACjC,YAAoB,EACpB,IAAY,EACZ,SAAiB,EACjB,IAAS;QAET,IAAI,kBAAkB,GAAG,eAAe,CAAC,MAAM,CAC9C,IAAI,CAAC,YAAY,EAAE,EACnB,YAAY,EACZ,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,IAAI,CACJ,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACzC,OAAO,kBAAkB,CAAC,EAAE,CAAC;IAC9B,CAAC;IAEK,sDAAqB,GAA3B,UAA4B,EAAU;;;;;;wBACjC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,KAAK,EAAE,EAAX,CAAW,CAAC,CAAC;6BAEjD,OAAO,EAAP,wBAAO;wBACV,qBAAM,OAAO,CAAC,MAAM,EAAE,EAAA;;wBAAtB,SAAsB,CAAC;wBACvB,IAAI,CAAC,sBAAsB,GAAG,OAAO,CAAC;wBACtC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC;wBAC3D,IAAI,CAAC,UAAU,CAAC,MAAM,CACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,EAAJ,CAAI,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAC1C,CAAC,CACD,CAAC;;;;;;KAEH;IAED,0DAAyB,GAAzB;QACC,OAAO,IAAI,CAAC,UAAU,CAAC;IACxB,CAAC;IAED,gEAA+B,GAA/B;QACC,OAAO,IAAI,CAAC,sBAAsB,CAAC;IACpC,CAAC;IAED,kEAAiC,GAAjC;QACC,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACtC,CAAC;IACF,6BAAC;AAAD,CA/DA,AA+DC,IAAA;AA/DY,wDAAsB;AAuEnC;IAaC;QAZQ,WAAM,GAAmB,IAAI,CAAC;QAC/B,aAAQ,GAAG,CAAC,CAAC;QAKb,cAAS,GAAS,IAAI,CAAC;QACvB,YAAO,GAAS,IAAI,CAAC;QACrB,aAAQ,GAAS,IAAI,CAAC;QACtB,cAAS,GAAG,EAAE,CAAC;QACf,OAAE,GAAG,CAAC,CAAC;IAEC,CAAC;IAET,sBAAM,GAAb,UACC,EAAU,EACV,YAAiC,EACjC,YAAoB,EACpB,IAAY,EACZ,SAAiB,EACjB,IAAS;QAET,IAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,eAAe,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;QAClF,OAAO,eAAe,CAAC;IACxB,CAAC;IAEO,oCAAU,GAAlB,UACC,EAAU,EACV,YAAiC,EACjC,YAAoB,EACpB,IAAY,EACZ,SAAiB,EACjB,IAAS;QANV,iBA0BC;QAlBA,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAE3B,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YAEhD,IAAI,IAAI,GAAG,KAAI,CAAC,QAAQ,EAAE,CAAC;gBAC1B,KAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACtB,CAAC;YAED,KAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;QAC5B,CAAC,EAAE,IAAI,CAAC,CAAC;IACV,CAAC;IAEY,gCAAM,GAAnB;;;;;wBACC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;4BACjB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;4BAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;wBACpB,CAAC;wBAED,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;6BAEtB,CAAA,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAA,EAArB,wBAAqB;wBACxB,0CAA0C;wBAC1C,qBAAM,sCAAe,CAAC,aAAa,EAAE,CAAC,iBAAiB,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAA;;wBADlF,0CAA0C;wBAC1C,SAAkF,CAAC;;;oBAGpF,sFAAsF;oBAEtF,sBAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAC;;;;KAC7B;IACF,sBAAC;AAAD,CAzEA,AAyEC,IAAA;AAzEY,0CAAe","file":"monitor.manager.js","sourcesContent":["import axios from 'axios';\nimport { MonitorCPUs } from '../collections/monitor-cpu.collection';\nimport { MonitorFunctions } from '../collections/monitor-function.collection';\nimport { MonitorMemorys } from '../collections/monitor-memory.collection';\nimport { MonitorMongos } from '../collections/monitor-mongo.collection';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\nimport { LocalLogModel } from './local-log.manager';\n\nconst os = require('os');\nconst MAX_BATCH_SIZE = 8 * 1024 * 1024; // 8MB max for safety\n\nexport class MonitorManager {\n\tprivate _instanceHostname = '';\n\tprivate _monitorData: LocalLogModel[] = [];\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst monitorManager = new MonitorManager();\n\t\tawait monitorManager.initialize();\n\t\treturn monitorManager;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._instanceHostname = os.hostname().replace(/\\./g, '-');\n\t\tawait this.setupIntervals();\n\t\tthis.setupEventLoop();\n\t}\n\n\tcpuAverage() {\n\t\tvar totalIdle = 0, totalTick = 0;\n\t\tvar cpus = os.cpus();\n\n\t\tfor (var i = 0, len = cpus.length; i < len; i++) {\n\t\t\tvar cpu = cpus[i];\n\n\t\t\tfor (let type in cpu.times) {\n\t\t\t\ttotalTick += cpu.times[type];\n\t\t\t}\n\t\t\ttotalIdle += cpu.times.idle;\n\t\t}\n\n\t\treturn {\n\t\t\tidle: totalIdle / cpus.length,\n\t\t\ttotal: totalTick / cpus.length\n\t\t};\n\t}\n\n\tasync setupIntervals() {\n\t\t// Example: If not on production or localhost, do a health check\n\t\tif (\n\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t) {\n\t\t\ttry {\n\t\t\t\tlet instanceId = await axios.get('http://169.254.169.254/latest/meta-data/instance-id');\n\n\t\t\t\tsetInterval(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait axios.post('https://backend.resolveio.com/api/health', {\n\t\t\t\t\t\t\ttype: 'application',\n\t\t\t\t\t\t\tid_aws_instance: instanceId.data,\n\t\t\t\t\t\t\tversion: typeof process.env.APP_VERSION === 'number'\n\t\t\t\t\t\t\t\t? (<any>process.env.APP_VERSION).toString()\n\t\t\t\t\t\t\t\t: process.env.APP_VERSION,\n\t\t\t\t\t\t\tversion_key: process.env.APP_VERSION_KEY\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}, 10000);\n\t\t\t}\n\t\t\tcatch {}\n\t\t}\n\n\t\tlet lastCPU = this.cpuAverage();\n\n\t\tsetInterval(async () => {\n\t\t\tlet now = new Date();\n\t\t\tvar endMeasure = this.cpuAverage();\n\t\t\tvar idleDifference = endMeasure.idle - lastCPU.idle;\n\t\t\tvar totalDifference = endMeasure.total - lastCPU.total;\n\t\t\tvar percentageCPU = 1 - idleDifference / totalDifference;\n\n\t\t\t// Original local code\n\t\t\tif (\n\t\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t\t) {\n\t\t\t\tawait MonitorCPUs.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tapp: percentageCPU,\n\t\t\t\t\tsystem: os.loadavg()[0]\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-cpu',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: now,\n\t\t\t\t\t\tapp: percentageCPU,\n\t\t\t\t\t\tsystem: os.loadavg()[0]\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlastCPU = endMeasure;\n\n\t\t\tconst memUsage = process.memoryUsage();\n\n\t\t\tif (\n\t\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t\t) {\n\t\t\t\tawait MonitorMemorys.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tphysical_total: memUsage.heapTotal,\n\t\t\t\t\tphysical_used: memUsage.heapUsed,\n\t\t\t\t\tphysical_free: os.freemem(),\n\t\t\t\t\tvirtual: memUsage.rss,\n\t\t\t\t\tprivate: memUsage.external,\n\t\t\t\t\tphysical: os.totalmem()\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-memory',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: now,\n\t\t\t\t\t\tphysical_total: memUsage.heapTotal,\n\t\t\t\t\t\tphysical_used: memUsage.heapUsed,\n\t\t\t\t\t\tphysical_free: os.freemem(),\n\t\t\t\t\t\tvirtual: memUsage.rss,\n\t\t\t\t\t\tprivate: memUsage.external,\n\t\t\t\t\t\tphysical: os.totalmem(),\n\t\t\t\t\t\ttype: 'memory'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}, 3000);\n\t}\n\n\tasync addMongoTracker(data: MongoMonitorModel) {\n\t\tif (\n\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t) {\n\t\t\tif (!data.collection.startsWith('monitor-')) {\n\t\t\t\tawait MonitorMongos.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t\tquery: Buffer.byteLength(data.query, 'utf8') < 15800000\n\t\t\t\t\t\t? data.query\n\t\t\t\t\t\t: 'Too Big'\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._instanceHostname) {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-mongo',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\t\tmethod: data.method,\n\t\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\t\tduration: data.duration,\n\t\t\t\t\t\tquery: Buffer.byteLength(data.query, 'utf8') < 15800000\n\t\t\t\t\t\t\t? data.query\n\t\t\t\t\t\t\t: 'Too Big'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tasync addFunctionTracker(data: MonitorFunction) {\n\t\tif (typeof(data.data) !== 'string') {\n\t\t\tdata.data = JSON.stringify(data.data);\n\t\t}\n\n\t\tif (\n\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t) {\n\t\t\tawait MonitorFunctions.create({\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\tmetadata: {\n\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t},\n\t\t\t\tdate: new Date(data.startTime),\n\t\t\t\ttype: data.functionType,\n\t\t\t\tname: data.functionName,\n\t\t\t\tuser: data.user,\n\t\t\t\tduration: data.duration,\n\t\t\t\tdata: Buffer.byteLength(data.data, 'utf8') < 15800000\n\t\t\t\t\t? data.data\n\t\t\t\t\t: 'Too Big'\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tif (this._instanceHostname) {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-function',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: new Date(data.startTime),\n\t\t\t\t\t\ttype: data.functionType,\n\t\t\t\t\t\tname: data.functionName,\n\t\t\t\t\t\tuser: data.user,\n\t\t\t\t\t\tduration: data.duration,\n\t\t\t\t\t\tdata: Buffer.byteLength(data.data, 'utf8') < 15800000\n\t\t\t\t\t\t\t? data.data\n\t\t\t\t\t\t\t: 'Too Big'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate pushMonitorData(data: LocalLogModel) {\n\t\tthis._monitorData.push(data);\n\n\t\t// If data is huge, flush immediately to file\n\t\tif (this.estimateBatchSize() >= MAX_BATCH_SIZE) {\n\t\t\tthis.flushMonitorData();\n\t\t}\n\t}\n\n\tprivate estimateBatchSize(): number {\n\t\treturn this._monitorData.reduce((total, item) => {\n\t\t\treturn total + Buffer.byteLength(JSON.stringify(item));\n\t\t}, 0);\n\t}\n\n\tsetupEventLoop() {\n\t\t// Flush every 2.5 seconds\n\t\tsetInterval(() => {\n\t\t\tif (this._monitorData.length > 0) {\n\t\t\t\tthis.flushMonitorData();\n\t\t\t}\n\t\t}, 2500);\n\t}\n\n\tprivate flushMonitorData() {\n\t\tconst batch = [];\n\t\tlet batchSize = 0;\n\n\t\twhile (this._monitorData.length > 0 && batchSize < MAX_BATCH_SIZE) {\n\t\t\tconst item = this._monitorData.shift();\n\t\t\tconst itemSize = Buffer.byteLength(JSON.stringify(item));\n\n\t\t\tif ((batchSize + itemSize) > MAX_BATCH_SIZE && batch.length > 0) {\n\t\t\t\t// put the item back for next round\n\t\t\t\tthis._monitorData.unshift(item);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbatch.push(item);\n\t\t\tbatchSize += itemSize;\n\t\t}\n\n\t\ttry {\n\t\t\t// Now, instead of calling an external HTTP endpoint, we write the batch to disk:\n\t\t\tResolveIOServer.getLocalLogManager().writeLogs(batch);\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(new Date(), 'MonitorManager', 'Failed to flush monitor data to file:', error);\n\t\t}\n\t}\n}\n\nexport interface MongoMonitorModel {\n\tdate: Date;\n\tmethod: string;\n\tcollection: string;\n\tduration: number;\n\tquery: string;\n}\n\nexport class MonitorMongo {\n\tprivate _startTime = 0;\n\tprivate _method = '';\n\tprivate _collection = '';\n\tprivate _query = '';\n\n\tconstructor() {}\n\n\tstatic create(method: string, collection: string, query: string) {\n\t\tconst monitorMongo = new MonitorMongo();\n\t\tmonitorMongo.initialize(method, collection, query);\n\t\treturn monitorMongo;\n\t}\n\n\tprivate initialize(method: string, collection: string, query: string) {\n\t\tthis._startTime = Date.now();\n\t\tthis._method = method;\n\t\tthis._collection = collection;\n\t\tthis._query = query;\n\t}\n\n\tpublic async finish() {\n\t\tlet endTime = Date.now();\n\n\t\tlet mongoMonitor: MongoMonitorModel = {\n\t\t\tdate: new Date(endTime),\n\t\t\tmethod: this._method,\n\t\t\tcollection: this._collection,\n\t\t\tquery: this._query,\n\t\t\tduration: endTime - this._startTime\n\t\t};\n\n\t\tawait ResolveIOServer.getMainServer().getMonitorManager().addMongoTracker(mongoMonitor);\n\t}\n}\n\nexport class MonitorManagerFunction {\n\tprivate _functionCnt = 0;\n\tprivate _functions: MonitorFunction[] = [];\n\tprivate _functionLastCompletedWS: { [id_socket: string]: MonitorFunction; } = {};\n\tprivate _functionLastCompleted: MonitorFunction;\n\n\tconstructor() {}\n\n\tstatic create() {\n\t\tconst monitorManagerFunction = new MonitorManagerFunction();\n\t\tmonitorManagerFunction.initialize();\n\t\treturn monitorManagerFunction;\n\t}\n\n\tprivate initialize() {\n\n\t}\n\n\tstartMonitorFunction(\n\t\tfunctionType: MonitorFunctionType,\n\t\tfunctionName: string,\n\t\tuser: string,\n\t\tid_socket: string,\n\t\tdata: any\n\t) {\n\t\tlet newMonitorFunction = MonitorFunction.create(\n\t\t\tthis._functionCnt++,\n\t\t\tfunctionType,\n\t\t\tfunctionName,\n\t\t\tuser,\n\t\t\tid_socket,\n\t\t\tdata\n\t\t);\n\n\t\tthis._functions.push(newMonitorFunction);\n\t\treturn newMonitorFunction.id;\n\t}\n\n\tasync finishMonitorFunction(id: number) {\n\t\tlet monitor = this._functions.find(a => a.id === id);\n\n\t\tif (monitor) {\n\t\t\tawait monitor.finish();\n\t\t\tthis._functionLastCompleted = monitor;\n\t\t\tthis._functionLastCompletedWS[monitor.id_socket] = monitor;\n\t\t\tthis._functions.splice(\n\t\t\t\tthis._functions.map(a => a.id).indexOf(id),\n\t\t\t\t1\n\t\t\t);\n\t\t}\n\t}\n\n\tgetActiveMonitorFunctions() {\n\t\treturn this._functions;\n\t}\n\n\tgetLastCompletedMonitorFunction() {\n\t\treturn this._functionLastCompleted;\n\t}\n\n\tgetLastCompletedMonitorFunctionWS() {\n\t\treturn this._functionLastCompletedWS;\n\t}\n}\n\nexport type MonitorFunctionType =\n\t'Cron Method'\n\t| 'Method'\n\t| 'User Specific Publication'\n\t| 'Publication';\n\nexport class MonitorFunction {\n\tprivate _timer: NodeJS.Timeout = null;\n\tpublic duration = 0;\n\tpublic functionType: MonitorFunctionType;\n\tpublic functionName: string;\n\tpublic user: string;\n\tpublic data: any;\n\tpublic startTime: Date = null;\n\tpublic endTime: Date = null;\n\tpublic lastTime: Date = null;\n\tpublic id_socket = '';\n\tpublic id = 0;\n\n\tconstructor() {}\n\n\tstatic create(\n\t\tid: number,\n\t\tfunctionType: MonitorFunctionType,\n\t\tfunctionName: string,\n\t\tuser: string,\n\t\tid_socket: string,\n\t\tdata: any\n\t) {\n\t\tconst monitorFunction = new MonitorFunction();\n\t\tmonitorFunction.initialize(id, functionType, functionName, user, id_socket, data);\n\t\treturn monitorFunction;\n\t}\n\n\tprivate initialize(\n\t\tid: number,\n\t\tfunctionType: MonitorFunctionType,\n\t\tfunctionName: string,\n\t\tuser: string,\n\t\tid_socket: string,\n\t\tdata: any\n\t) {\n\t\tthis.id = id;\n\t\tthis.startTime = new Date();\n\t\tthis.functionType = functionType;\n\t\tthis.functionName = functionName;\n\t\tthis.user = user;\n\t\tthis.id_socket = id_socket;\n\t\tthis.data = data;\n\t\tthis.lastTime = new Date();\n\n\t\tthis._timer = setInterval(() => {\n\t\t\tlet diff = Date.now() - this.lastTime.getTime();\n\n\t\t\tif (diff > this.duration) {\n\t\t\t\tthis.duration = diff;\n\t\t\t}\n\n\t\t\tthis.lastTime = new Date();\n\t\t}, 1000);\n\t}\n\n\tpublic async finish() {\n\t\tif (this._timer) {\n\t\t\tclearInterval(this._timer);\n\t\t\tthis._timer = null;\n\t\t}\n\n\t\tthis.endTime = new Date();\n\n\t\tif (this.duration >= 5000) {\n\t\t\t// Optional slow function logging or email\n\t\t\tawait ResolveIOServer.getMainServer().getMonitorManager().addFunctionTracker(this);\n\t\t}\n\n\t\t// await ResolveIOServer.getMainServer().getMonitorManager().addFunctionTracker(this);\n\n\t\treturn Promise.resolve(true);\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../src/managers/monitor.manager.ts"],"names":[],"mappings":"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","file":"monitor.manager.js","sourcesContent":["import axios from 'axios';\nimport { MonitorCPUs } from '../collections/monitor-cpu.collection';\nimport { MonitorFunctions } from '../collections/monitor-function.collection';\nimport { MonitorMemorys } from '../collections/monitor-memory.collection';\nimport { MonitorMongos } from '../collections/monitor-mongo.collection';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { objectIdHexString } from '../util/common';\nimport { LocalLogModel } from './local-log.manager';\n\nconst os = require('os');\nconst MAX_BATCH_SIZE = 8 * 1024 * 1024; // 8MB max for safety\n\nexport class MonitorManager {\n\tprivate _instanceHostname = '';\n\tprivate _monitorData: LocalLogModel[] = [];\n\n\tconstructor() {}\n\n\tstatic async create() {\n\t\tconst monitorManager = new MonitorManager();\n\t\tawait monitorManager.initialize();\n\t\treturn monitorManager;\n\t}\n\n\tprivate async initialize() {\n\t\tthis._instanceHostname = os.hostname().replace(/\\./g, '-');\n\t\tawait this.setupIntervals();\n\t\tthis.setupEventLoop();\n\t}\n\n\tcpuAverage() {\n\t\tvar totalIdle = 0, totalTick = 0;\n\t\tvar cpus = os.cpus();\n\n\t\tfor (var i = 0, len = cpus.length; i < len; i++) {\n\t\t\tvar cpu = cpus[i];\n\n\t\t\tfor (let type in cpu.times) {\n\t\t\t\ttotalTick += cpu.times[type];\n\t\t\t}\n\t\t\ttotalIdle += cpu.times.idle;\n\t\t}\n\n\t\treturn {\n\t\t\tidle: totalIdle / cpus.length,\n\t\t\ttotal: totalTick / cpus.length\n\t\t};\n\t}\n\n\tasync setupIntervals() {\n\t\tconst processOnlyRuntime = this.isProcessOnlyManagerRuntime();\n\n\t\t// Example: If not on production or localhost, do a health check\n\t\tif (\n\t\t\t!processOnlyRuntime\n\t\t&&\n\t\t\tResolveIOServer.getServerConfig()['ROOT_URL'] !== 'https://resolveio.com'\n\t\t&& ResolveIOServer.getServerConfig()['ROOT_URL'] !== 'http://localhost:4200'\n\t\t) {\n\t\t\ttry {\n\t\t\t\tlet instanceId = await axios.get('http://169.254.169.254/latest/meta-data/instance-id');\n\n\t\t\t\tsetInterval(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait axios.post('https://backend.resolveio.com/api/health', {\n\t\t\t\t\t\t\ttype: 'application',\n\t\t\t\t\t\t\tid_aws_instance: instanceId.data,\n\t\t\t\t\t\t\tversion: typeof process.env.APP_VERSION === 'number'\n\t\t\t\t\t\t\t\t? (<any>process.env.APP_VERSION).toString()\n\t\t\t\t\t\t\t\t: process.env.APP_VERSION,\n\t\t\t\t\t\t\tversion_key: process.env.APP_VERSION_KEY\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tcatch {}\n\t\t\t\t}, 10000);\n\t\t\t}\n\t\t\tcatch {}\n\t\t}\n\n\t\tlet lastCPU = this.cpuAverage();\n\n\t\tsetInterval(async () => {\n\t\t\tlet now = new Date();\n\t\t\tvar endMeasure = this.cpuAverage();\n\t\t\tvar idleDifference = endMeasure.idle - lastCPU.idle;\n\t\t\tvar totalDifference = endMeasure.total - lastCPU.total;\n\t\t\tvar percentageCPU = 1 - idleDifference / totalDifference;\n\n\t\t\t// Original local code\n\t\t\tif (\n\t\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t\t) {\n\t\t\t\tawait MonitorCPUs.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tapp: percentageCPU,\n\t\t\t\t\tsystem: os.loadavg()[0]\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-cpu',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: now,\n\t\t\t\t\t\tapp: percentageCPU,\n\t\t\t\t\t\tsystem: os.loadavg()[0]\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tlastCPU = endMeasure;\n\n\t\t\tconst memUsage = process.memoryUsage();\n\n\t\t\tif (\n\t\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t\t) {\n\t\t\t\tawait MonitorMemorys.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: now,\n\t\t\t\t\tphysical_total: memUsage.heapTotal,\n\t\t\t\t\tphysical_used: memUsage.heapUsed,\n\t\t\t\t\tphysical_free: os.freemem(),\n\t\t\t\t\tvirtual: memUsage.rss,\n\t\t\t\t\tprivate: memUsage.external,\n\t\t\t\t\tphysical: os.totalmem()\n\t\t\t\t});\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-memory',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: now,\n\t\t\t\t\t\tphysical_total: memUsage.heapTotal,\n\t\t\t\t\t\tphysical_used: memUsage.heapUsed,\n\t\t\t\t\t\tphysical_free: os.freemem(),\n\t\t\t\t\t\tvirtual: memUsage.rss,\n\t\t\t\t\t\tprivate: memUsage.external,\n\t\t\t\t\t\tphysical: os.totalmem(),\n\t\t\t\t\t\ttype: 'memory'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}, 3000);\n\t}\n\n\tprivate isProcessOnlyManagerRuntime(): boolean {\n\t\tconst parseFlag = (value: any): boolean => {\n\t\t\tconst normalized = String(value ?? '').trim().toLowerCase();\n\t\t\treturn normalized === '1'\n\t\t\t\t|| normalized === 'true'\n\t\t\t\t|| normalized === 'yes'\n\t\t\t\t|| normalized === 'on'\n\t\t\t\t|| normalized === 'enabled';\n\t\t};\n\t\treturn parseFlag(process.env.SUPPORT_CODEX_MANAGER_PROCESS_ONLY)\n\t\t\t|| parseFlag(process.env.SUPPORT_AUTO_MANAGER_PROCESS_ONLY)\n\t\t\t|| parseFlag(process.env.AI_ASSISTANT_CODEX_MANAGER_PROCESS_ONLY);\n\t}\n\n\tasync addMongoTracker(data: MongoMonitorModel) {\n\t\tif (\n\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t) {\n\t\t\tif (!data.collection.startsWith('monitor-')) {\n\t\t\t\tawait MonitorMongos.create({\n\t\t\t\t\t_id: objectIdHexString(),\n\t\t\t\t\tmetadata: {\n\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t},\n\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\tmethod: data.method,\n\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\tduration: data.duration,\n\t\t\t\t\tquery: Buffer.byteLength(data.query, 'utf8') < 15800000\n\t\t\t\t\t\t? data.query\n\t\t\t\t\t\t: 'Too Big'\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tif (this._instanceHostname) {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-mongo',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: new Date(data.date),\n\t\t\t\t\t\tmethod: data.method,\n\t\t\t\t\t\tdoc_collection: data.collection,\n\t\t\t\t\t\tduration: data.duration,\n\t\t\t\t\t\tquery: Buffer.byteLength(data.query, 'utf8') < 15800000\n\t\t\t\t\t\t\t? data.query\n\t\t\t\t\t\t\t: 'Too Big'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tasync addFunctionTracker(data: MonitorFunction) {\n\t\tif (typeof(data.data) !== 'string') {\n\t\t\tdata.data = JSON.stringify(data.data);\n\t\t}\n\n\t\tif (\n\t\t\t!ResolveIOServer.shouldWriteLogsOffline()\n\t\t) {\n\t\t\tawait MonitorFunctions.create({\n\t\t\t\t_id: objectIdHexString(),\n\t\t\t\tmetadata: {\n\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t},\n\t\t\t\tdate: new Date(data.startTime),\n\t\t\t\ttype: data.functionType,\n\t\t\t\tname: data.functionName,\n\t\t\t\tuser: data.user,\n\t\t\t\tduration: data.duration,\n\t\t\t\tdata: Buffer.byteLength(data.data, 'utf8') < 15800000\n\t\t\t\t\t? data.data\n\t\t\t\t\t: 'Too Big'\n\t\t\t});\n\t\t}\n\t\telse {\n\t\t\tif (this._instanceHostname) {\n\t\t\t\tthis.pushMonitorData({\n\t\t\t\t\ttype: 'monitor-function',\n\t\t\t\t\tdata: {\n\t\t\t\t\t\tmetadata: {\n\t\t\t\t\t\t\tinstance: this._instanceHostname,\n\t\t\t\t\t\t\tclient: ResolveIOServer.getServerConfig()['CLIENT_NAME']\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdate: new Date(data.startTime),\n\t\t\t\t\t\ttype: data.functionType,\n\t\t\t\t\t\tname: data.functionName,\n\t\t\t\t\t\tuser: data.user,\n\t\t\t\t\t\tduration: data.duration,\n\t\t\t\t\t\tdata: Buffer.byteLength(data.data, 'utf8') < 15800000\n\t\t\t\t\t\t\t? data.data\n\t\t\t\t\t\t\t: 'Too Big'\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate pushMonitorData(data: LocalLogModel) {\n\t\tthis._monitorData.push(data);\n\n\t\t// If data is huge, flush immediately to file\n\t\tif (this.estimateBatchSize() >= MAX_BATCH_SIZE) {\n\t\t\tthis.flushMonitorData();\n\t\t}\n\t}\n\n\tprivate estimateBatchSize(): number {\n\t\treturn this._monitorData.reduce((total, item) => {\n\t\t\treturn total + Buffer.byteLength(JSON.stringify(item));\n\t\t}, 0);\n\t}\n\n\tsetupEventLoop() {\n\t\t// Flush every 2.5 seconds\n\t\tsetInterval(() => {\n\t\t\tif (this._monitorData.length > 0) {\n\t\t\t\tthis.flushMonitorData();\n\t\t\t}\n\t\t}, 2500);\n\t}\n\n\tprivate flushMonitorData() {\n\t\tconst batch = [];\n\t\tlet batchSize = 0;\n\n\t\twhile (this._monitorData.length > 0 && batchSize < MAX_BATCH_SIZE) {\n\t\t\tconst item = this._monitorData.shift();\n\t\t\tconst itemSize = Buffer.byteLength(JSON.stringify(item));\n\n\t\t\tif ((batchSize + itemSize) > MAX_BATCH_SIZE && batch.length > 0) {\n\t\t\t\t// put the item back for next round\n\t\t\t\tthis._monitorData.unshift(item);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tbatch.push(item);\n\t\t\tbatchSize += itemSize;\n\t\t}\n\n\t\ttry {\n\t\t\t// Now, instead of calling an external HTTP endpoint, we write the batch to disk:\n\t\t\tResolveIOServer.getLocalLogManager().writeLogs(batch);\n\t\t}\n\t\tcatch (error) {\n\t\t\tconsole.error(new Date(), 'MonitorManager', 'Failed to flush monitor data to file:', error);\n\t\t}\n\t}\n}\n\nexport interface MongoMonitorModel {\n\tdate: Date;\n\tmethod: string;\n\tcollection: string;\n\tduration: number;\n\tquery: string;\n}\n\nexport class MonitorMongo {\n\tprivate _startTime = 0;\n\tprivate _method = '';\n\tprivate _collection = '';\n\tprivate _query = '';\n\n\tconstructor() {}\n\n\tstatic create(method: string, collection: string, query: string) {\n\t\tconst monitorMongo = new MonitorMongo();\n\t\tmonitorMongo.initialize(method, collection, query);\n\t\treturn monitorMongo;\n\t}\n\n\tprivate initialize(method: string, collection: string, query: string) {\n\t\tthis._startTime = Date.now();\n\t\tthis._method = method;\n\t\tthis._collection = collection;\n\t\tthis._query = query;\n\t}\n\n\tpublic async finish() {\n\t\tlet endTime = Date.now();\n\n\t\tlet mongoMonitor: MongoMonitorModel = {\n\t\t\tdate: new Date(endTime),\n\t\t\tmethod: this._method,\n\t\t\tcollection: this._collection,\n\t\t\tquery: this._query,\n\t\t\tduration: endTime - this._startTime\n\t\t};\n\n\t\tawait ResolveIOServer.getMainServer().getMonitorManager().addMongoTracker(mongoMonitor);\n\t}\n}\n\nexport class MonitorManagerFunction {\n\tprivate _functionCnt = 0;\n\tprivate _functions: MonitorFunction[] = [];\n\tprivate _functionLastCompletedWS: { [id_socket: string]: MonitorFunction; } = {};\n\tprivate _functionLastCompleted: MonitorFunction;\n\n\tconstructor() {}\n\n\tstatic create() {\n\t\tconst monitorManagerFunction = new MonitorManagerFunction();\n\t\tmonitorManagerFunction.initialize();\n\t\treturn monitorManagerFunction;\n\t}\n\n\tprivate initialize() {\n\n\t}\n\n\tstartMonitorFunction(\n\t\tfunctionType: MonitorFunctionType,\n\t\tfunctionName: string,\n\t\tuser: string,\n\t\tid_socket: string,\n\t\tdata: any\n\t) {\n\t\tlet newMonitorFunction = MonitorFunction.create(\n\t\t\tthis._functionCnt++,\n\t\t\tfunctionType,\n\t\t\tfunctionName,\n\t\t\tuser,\n\t\t\tid_socket,\n\t\t\tdata\n\t\t);\n\n\t\tthis._functions.push(newMonitorFunction);\n\t\treturn newMonitorFunction.id;\n\t}\n\n\tasync finishMonitorFunction(id: number) {\n\t\tlet monitor = this._functions.find(a => a.id === id);\n\n\t\tif (monitor) {\n\t\t\tawait monitor.finish();\n\t\t\tthis._functionLastCompleted = monitor;\n\t\t\tthis._functionLastCompletedWS[monitor.id_socket] = monitor;\n\t\t\tthis._functions.splice(\n\t\t\t\tthis._functions.map(a => a.id).indexOf(id),\n\t\t\t\t1\n\t\t\t);\n\t\t}\n\t}\n\n\tgetActiveMonitorFunctions() {\n\t\treturn this._functions;\n\t}\n\n\tgetLastCompletedMonitorFunction() {\n\t\treturn this._functionLastCompleted;\n\t}\n\n\tgetLastCompletedMonitorFunctionWS() {\n\t\treturn this._functionLastCompletedWS;\n\t}\n}\n\nexport type MonitorFunctionType =\n\t'Cron Method'\n\t| 'Method'\n\t| 'User Specific Publication'\n\t| 'Publication';\n\nexport class MonitorFunction {\n\tprivate _timer: NodeJS.Timeout = null;\n\tpublic duration = 0;\n\tpublic functionType: MonitorFunctionType;\n\tpublic functionName: string;\n\tpublic user: string;\n\tpublic data: any;\n\tpublic startTime: Date = null;\n\tpublic endTime: Date = null;\n\tpublic lastTime: Date = null;\n\tpublic id_socket = '';\n\tpublic id = 0;\n\n\tconstructor() {}\n\n\tstatic create(\n\t\tid: number,\n\t\tfunctionType: MonitorFunctionType,\n\t\tfunctionName: string,\n\t\tuser: string,\n\t\tid_socket: string,\n\t\tdata: any\n\t) {\n\t\tconst monitorFunction = new MonitorFunction();\n\t\tmonitorFunction.initialize(id, functionType, functionName, user, id_socket, data);\n\t\treturn monitorFunction;\n\t}\n\n\tprivate initialize(\n\t\tid: number,\n\t\tfunctionType: MonitorFunctionType,\n\t\tfunctionName: string,\n\t\tuser: string,\n\t\tid_socket: string,\n\t\tdata: any\n\t) {\n\t\tthis.id = id;\n\t\tthis.startTime = new Date();\n\t\tthis.functionType = functionType;\n\t\tthis.functionName = functionName;\n\t\tthis.user = user;\n\t\tthis.id_socket = id_socket;\n\t\tthis.data = data;\n\t\tthis.lastTime = new Date();\n\n\t\tthis._timer = setInterval(() => {\n\t\t\tlet diff = Date.now() - this.lastTime.getTime();\n\n\t\t\tif (diff > this.duration) {\n\t\t\t\tthis.duration = diff;\n\t\t\t}\n\n\t\t\tthis.lastTime = new Date();\n\t\t}, 1000);\n\t}\n\n\tpublic async finish() {\n\t\tif (this._timer) {\n\t\t\tclearInterval(this._timer);\n\t\t\tthis._timer = null;\n\t\t}\n\n\t\tthis.endTime = new Date();\n\n\t\tif (this.duration >= 5000) {\n\t\t\t// Optional slow function logging or email\n\t\t\tawait ResolveIOServer.getMainServer().getMonitorManager().addFunctionTracker(this);\n\t\t}\n\n\t\t// await ResolveIOServer.getMainServer().getMonitorManager().addFunctionTracker(this);\n\n\t\treturn Promise.resolve(true);\n\t}\n}\n"]}
@@ -795,10 +795,11 @@ var WorkerDispatcherManager = /** @class */ (function () {
795
795
  };
796
796
  WorkerDispatcherManager.prototype.isGeneralPurposeWorker = function (worker) {
797
797
  var normalizedIndex = this.normalizeWorkerIndex(worker === null || worker === void 0 ? void 0 : worker.workerIndex);
798
- if (!normalizedIndex) {
798
+ var normalizedInstance = this.normalizeWorkerIndex(worker === null || worker === void 0 ? void 0 : worker.workerInstance);
799
+ if (!normalizedIndex || !normalizedInstance) {
799
800
  return false;
800
801
  }
801
- return /^[0-9]+$/.test(normalizedIndex);
802
+ return /^[0-9]+$/.test(normalizedIndex) && /^[0-9]+$/.test(normalizedInstance);
802
803
  };
803
804
  WorkerDispatcherManager.prototype.filterGeneralPurposeWorkers = function (candidates, hasExplicitTarget) {
804
805
  var _this = this;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/managers/worker-dispatcher.manager.ts"],"names":[],"mappings":"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","file":"worker-dispatcher.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { ServerResponseModel, TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver, objectIdHexString, round } from '../util/common';\nimport { MethodManager } from './method.manager';\nimport { WebSocketManager } from './websocket.manager';\nimport { pack, unpack } from 'msgpackr';\n\nexport interface WorkerConnection {\n\tid: string;\n\tws: WebSocket.WebSocket;\n\tactiveTasks: {\n\t\ttaskId: string;\n\t\tweight: number;\n\t\tmethod?: string;\n\t\tstartedAt?: number;\n\t\tmessageId?: number;\n\t\tuserContext?: { id_user?: string; user?: string; id_ws?: string };\n\t}[];\n\tworkerIndex?: string;\n\tworkerInstance?: string;\n}\n\ninterface PendingTask {\n\ttimeout: NodeJS.Timeout;\n\tpromise?: {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tresolve: (value: any) => void;\n\t\t// eslint-disable-next-line no-unused-vars\n\t\treject: (reason?: any) => void;\n\t};\n\tmethod?: string;\n\tresolveRaw?: boolean;\n}\n\n// eslint-disable-next-line no-unused-vars\ntype TaskMatcher = (task: TaskPayload) => boolean;\n\nexport class WorkerDispatcherManager {\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _workers: WorkerConnection[] = [];\n\tprivate _taskQueue: TaskPayload[] = [];\n\tprivate _clientRequests: { [taskId: string]: string } = {};\n\tprivate _pendingTasks: Map<string, PendingTask> = new Map();\n\tprivate _debugNoWorkerTaskIds: Set<string> = new Set();\n\tprivate _debugCodexTaskIds: Set<string> = new Set();\n\tprivate _taskTimings: Map<string, {\n\t\tqueuedAt: number;\n\t\tdispatchedAt?: number;\n\t\tmethod?: string;\n\t\tmessageId?: number;\n\t\tuserContext?: { id_user?: string; user?: string; id_ws?: string };\n\t\tparams?: any[];\n\t}> = new Map();\n\tprivate _dispatchRetryTimer: NodeJS.Timeout | null = null;\n\tprivate _dispatchRetryDelayMs = 25;\n\tprivate _nonCodexReserve = 0;\n\tprivate _publicationWorkerIndexes: Set<string> | null = null;\n\tprivate _publicationWorkerInstances: Set<string> | null = null;\n\tprivate _codexWorkerIndexes: Set<string> | null = null;\n\tprivate _codexWorkerInstances: Set<string> | null = null;\n\n\tprivate MAX_CONCURRENCY = 10;\n\tprivate WORKER_TASK_LOG_THRESHOLD_MS = 200;\n\tprivate WORKER_PUBLICATION_SLOW_MS = 20000;\n\tprivate _workerTaskDebug = false;\n\tprivate _aiWorkerDebug = false;\n\n\tconstructor() {}\n\n\tstatic create(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tconst workerDispatcherManager = new WorkerDispatcherManager();\n\t\tworkerDispatcherManager.initialize(websocketManager, methodManager);\n\t\treturn workerDispatcherManager;\n\t}\n\n\tpublic initialize(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tthis._websocketManager = websocketManager;\n\t\tthis._methodManager = methodManager;\n\t\tthis._workerTaskDebug = this.parseDebugFlag(process.env.WORKER_TASK_DEBUG ?? process.env.WORKER_DISPATCH_DEBUG);\n\t\tthis._aiWorkerDebug = this.parseDebugFlag(process.env.AI_ASSISTANT_WORKER_DEBUG);\n\t\tconst slowPublicationMs = parseInt(process.env.WORKER_PUBLICATION_SLOW_MS ?? '', 10);\n\t\tif (!Number.isNaN(slowPublicationMs) && slowPublicationMs > 0) {\n\t\t\tthis.WORKER_PUBLICATION_SLOW_MS = slowPublicationMs;\n\t\t}\n\t\tthis._nonCodexReserve = this.parsePositiveInt(\n\t\t\tprocess.env.WORKER_NON_CODEX_RESERVE ?? process.env.WORKER_RESERVED_SLOTS,\n\t\t\t0\n\t\t);\n\t\tthis._publicationWorkerIndexes = this.parseWorkerSelector(\n\t\t\tprocess.env.PUBLICATION_WORKER_INDEX\n\t\t\t|| process.env.SUBSCRIPTION_WORKER_INDEX\n\t\t\t|| process.env.WORKER_PUBLICATION_INDEX\n\t\t);\n\t\tthis._publicationWorkerInstances = this.parseWorkerSelector(\n\t\t\tprocess.env.PUBLICATION_WORKER_INSTANCE\n\t\t\t|| process.env.SUBSCRIPTION_WORKER_INSTANCE\n\t\t\t|| process.env.WORKER_PUBLICATION_INSTANCE\n\t\t);\n\t\tthis._codexWorkerIndexes = this.parseWorkerSelector(\n\t\t\tprocess.env.AI_ASSISTANT_CODEX_WORKER_INDEX\n\t\t\t|| process.env.CODEX_WORKER_INDEX\n\t\t\t|| process.env.WORKER_CODEX_INDEX\n\t\t);\n\t\tthis._codexWorkerInstances = this.parseWorkerSelector(\n\t\t\tprocess.env.AI_ASSISTANT_CODEX_WORKER_INSTANCE\n\t\t\t|| process.env.CODEX_WORKER_INSTANCE\n\t\t\t|| process.env.WORKER_CODEX_INSTANCE\n\t\t);\n\t}\n\n\tprivate parseDebugFlag(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate parsePositiveInt(value: any, fallback: number): number {\n\t\tconst parsed = parseInt(value ?? '', 10);\n\t\tif (Number.isNaN(parsed) || parsed < 0) {\n\t\t\treturn fallback;\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tprivate parseWorkerSelector(value: any): Set<string> | null {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parts: string[] = [];\n\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const item of value) {\n\t\t\t\tconst entry = String(item ?? '').split(',');\n\t\t\t\tfor (const chunk of entry) {\n\t\t\t\t\tconst trimmed = String(chunk ?? '').trim();\n\t\t\t\t\tif (trimmed) {\n\t\t\t\t\t\tparts.push(trimmed);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst entry = String(value ?? '').split(',');\n\t\t\tfor (const chunk of entry) {\n\t\t\t\tconst trimmed = String(chunk ?? '').trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tparts.push(trimmed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!parts.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new Set(parts);\n\t}\n\n\tprivate selectorToArray(value: Set<string> | null): string[] | null {\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn Array.from(value.values());\n\t}\n\n\tprivate hasWorkerSelector(indexes: Set<string> | null, instances: Set<string> | null): boolean {\n\t\treturn !!(indexes && indexes.size) || !!(instances && instances.size);\n\t}\n\n\tprivate workerMatchesSelector(worker: WorkerConnection, indexes: Set<string> | null, instances: Set<string> | null): boolean {\n\t\tif (!this.hasWorkerSelector(indexes, instances)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedIndex = this.normalizeWorkerIndex(worker.workerIndex);\n\t\tconst normalizedInstance = this.normalizeWorkerIndex(worker.workerInstance);\n\t\tconst indexMatch = indexes ? (normalizedIndex ? indexes.has(normalizedIndex) : false) : true;\n\t\tconst instanceMatch = instances ? (normalizedInstance ? instances.has(normalizedInstance) : false) : true;\n\n\t\treturn indexMatch && instanceMatch;\n\t}\n\n\tprivate resolveTaskQueue(methodName: string): 'publication' | 'codex' | 'default' {\n\t\tconst method = this._methodManager?.getMethod(methodName);\n\t\tconst queue = method?.workerQueue;\n\t\tif (queue === 'publication' || queue === 'codex') {\n\t\t\treturn queue;\n\t\t}\n\t\treturn 'default';\n\t}\n\n\tprivate summarizePublicationValue(value: any): any {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn value;\n\t\t}\n\n\t\tconst valueType = typeof value;\n\t\tif (valueType === 'string' || valueType === 'number' || valueType === 'boolean') {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn `[Array(${value.length})]`;\n\t\t}\n\n\t\tif (valueType === 'object') {\n\t\t\treturn `[Object keys=${Object.keys(value).length}]`;\n\t\t}\n\n\t\treturn `[${valueType}]`;\n\t}\n\n\tprivate getPublicationLogInfo(method?: string, params?: any[]): Record<string, any> | null {\n\t\tif (method !== 'runPublication' || !Array.isArray(params)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst publication = typeof params[0] === 'string' ? params[0] : null;\n\t\tconst subscriptionData = Array.isArray(params[1]) ? params[1] : [];\n\t\tconst userId = typeof params[2] === 'string' ? params[2] : null;\n\t\tconst subscriptionDataPreview = subscriptionData.slice(0, 3).map((item) => this.summarizePublicationValue(item));\n\n\t\treturn {\n\t\t\tpublication,\n\t\t\tsubscriptionDataCount: subscriptionData.length,\n\t\t\tsubscriptionDataPreview,\n\t\t\tuserId\n\t\t};\n\t}\n\n\tpublic isSafeShutdown() {\n\t\treturn !this._taskQueue.length && !this._pendingTasks.size;\n\t}\n\n\tpublic addWorker(ws: WebSocket.WebSocket) {\n\t\tthis._workers.push({\n\t\t\tid: ws['id_worker'],\n\t\t\tws: ws,\n\t\t\tactiveTasks: [],\n\t\t\tworkerIndex: ws['workerIndex'],\n\t\t\tworkerInstance: ws['workerInstance']\n\t\t});\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(JSON.stringify(this._workers.map(a => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: a.id,\n\t\t\t\t\t\tactiveTasks: a.activeTasks\n\t\t\t\t\t}\n\t\t\t\t}), null, 2));\n\t\t\t}\n\t\t}, 5000);\n\n\t\tif (this._taskQueue.length) {\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\tpublic disconnectWorker(workerId: string) {\n\t\tthis._workers = this._workers.filter(w => w.id !== workerId);\n\t}\n\n\tpublic hasWorkers() {\n\t\treturn this._workers.length > 0;\n\t}\n\n\tpublic getQueueSnapshot() {\n\t\tconst activeTasks = this._workers.reduce((total, worker) => total + (worker.activeTasks ? worker.activeTasks.length : 0), 0);\n\t\treturn {\n\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\tpendingTasks: this._pendingTasks.size,\n\t\t\tworkerCount: this._workers.length,\n\t\t\tactiveTasks,\n\t\t\tworkers: this._workers.map(worker => ({\n\t\t\t\tid: worker.id,\n\t\t\t\tindex: worker.workerIndex,\n\t\t\t\tinstance: worker.workerInstance,\n\t\t\t\tactiveTasks: worker.activeTasks ? worker.activeTasks.length : 0\n\t\t\t}))\n\t\t};\n\t}\n\n\tpublic hasWorkersForMethod(methodName: string) {\n\t\tif (!this._workers.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst method = this._methodManager.getMethod(methodName);\n\t\tconst taskQueue = this.resolveTaskQueue(methodName);\n\t\tconst targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\t\tconst targetWorkerInstance = this.normalizeWorkerIndex(method?.targetWorkerInstance);\n\t\tconst hasExplicitTarget = !!targetWorkerIndex || !!targetWorkerInstance;\n\n\t\tlet candidates = this.filterGeneralPurposeWorkers([...this._workers], hasExplicitTarget);\n\n\t\tconst hasPublicationSelector = this.hasWorkerSelector(this._publicationWorkerIndexes, this._publicationWorkerInstances);\n\t\tif (hasPublicationSelector && !hasExplicitTarget) {\n\t\t\tif (taskQueue === 'publication') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst hasCodexSelector = this.hasWorkerSelector(this._codexWorkerIndexes, this._codexWorkerInstances);\n\t\tif (hasCodexSelector) {\n\t\t\tif (taskQueue === 'codex') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse if (!hasExplicitTarget) {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (targetWorkerIndex) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex);\n\t\t}\n\t\tif (targetWorkerInstance) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerInstance) === targetWorkerInstance);\n\t\t}\n\n\t\treturn candidates.length > 0;\n\t}\n\n\t/**\n\t * Add a new task to our in-memory queue and try to dispatch.\n\t */\n\tpublic sendClientTask(messageId: number, method: string, params: any[], userContext?: { id_user?: string; user?: string; id_ws?: string }) {\n\t\tlet taskId = 'task-' + objectIdHexString();\n\t\tconst queuedAt = Date.now();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmessageId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tuserContext,\n\t\t\tqueuedAt\n\t\t});\n\n\t\tthis._taskTimings.set(taskId, {\n\t\t\tqueuedAt,\n\t\t\tmethod,\n\t\t\tmessageId,\n\t\t\tuserContext,\n\t\t\tparams\n\t\t});\n\n\t\tif (userContext && userContext.id_ws) {\n\t\t\tthis._clientRequests[taskId] = userContext.id_ws;\n\t\t}\n\n\t\tif (this.shouldDebug()) {\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tmessageId,\n\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\tuserContext\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * Same as sendInternalTask but returns a Promise so you can `await` it.\n\t */\n\tpublic sendInternalPromise(method: string, params: any[] = []): Promise<any> {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet taskId = 'task-' + objectIdHexString();\n\t\t\tconst queuedAt = Date.now();\n\n\t\t\tthis._taskQueue.push({\n\t\t\t\ttype: 'task',\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: {\n\t\t\t\t\tuser: 'Internal System'\n\t\t\t\t},\n\t\t\t\tqueuedAt\n\t\t\t});\n\n\t\t\tthis._taskTimings.set(taskId, {\n\t\t\t\tqueuedAt,\n\t\t\t\tmethod,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: { user: 'Internal System' },\n\t\t\t\tparams\n\t\t\t});\n\n\t\t\tthis._pendingTasks.set(taskId, {\n\t\t\t\ttimeout: null,\n\t\t\t\tpromise: { resolve, reject }\n\t\t\t});\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Send Internal Promise', this._taskQueue);\n\t\t\t}\n\n\t\t\tif (this.shouldDebug()) {\n\t\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tmethod,\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\t\tuserContext: { user: 'Internal System' }\n\t\t\t\t};\n\t\t\t\tif (publicationInfo) {\n\t\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t\t}\n\t\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t\t}\n\n\t\t\tthis.dispatchQueue();\n\t\t});\n\t}\n\n\t/**\n\t * Send a task internally and resolve with the raw TaskResponse (includes packedResult/meta).\n\t */\n\tpublic sendInternalPromiseRaw(method: string, params: any[] = []): Promise<TaskResponse> {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet taskId = 'task-' + objectIdHexString();\n\t\t\tconst queuedAt = Date.now();\n\n\t\t\tthis._taskQueue.push({\n\t\t\t\ttype: 'task',\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: {\n\t\t\t\t\tuser: 'Internal System'\n\t\t\t\t},\n\t\t\t\tqueuedAt\n\t\t\t});\n\n\t\t\tthis._taskTimings.set(taskId, {\n\t\t\t\tqueuedAt,\n\t\t\t\tmethod,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: { user: 'Internal System' },\n\t\t\t\tparams\n\t\t\t});\n\n\t\t\tthis._pendingTasks.set(taskId, {\n\t\t\t\ttimeout: null,\n\t\t\t\tpromise: { resolve, reject },\n\t\t\t\tresolveRaw: true\n\t\t\t});\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Send Internal Raw Promise', this._taskQueue);\n\t\t\t}\n\n\t\t\tif (this.shouldDebug()) {\n\t\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tmethod,\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\t\tuserContext: { user: 'Internal System' }\n\t\t\t\t};\n\t\t\t\tif (publicationInfo) {\n\t\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t\t}\n\t\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t\t}\n\n\t\t\tthis.dispatchQueue();\n\t\t});\n\t}\n\n\t/**\n\t * Send a task internally without returning a promise.\n\t */\n\tpublic sendInternalTask(method: string, params = []) {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\tlet taskId = 'task-' + objectIdHexString();\n\t\tconst queuedAt = Date.now();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tmessageId: 0,\n\t\t\tuserContext: {\n\t\t\t\tuser: 'Internal System'\n\t\t\t},\n\t\t\tqueuedAt\n\t\t});\n\n\t\tthis._taskTimings.set(taskId, {\n\t\t\tqueuedAt,\n\t\t\tmethod,\n\t\t\tmessageId: 0,\n\t\t\tuserContext: { user: 'Internal System' },\n\t\t\tparams\n\t\t});\n\n\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Send Internal Task', this._taskQueue);\n\t\t}\n\n\t\tif (this.shouldDebug()) {\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tmessageId: 0,\n\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\tuserContext: { user: 'Internal System' }\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * The main loop that assigns tasks from _taskQueue to any worker that has capacity.\n\t */\n\tprivate dispatchQueue() {\n\t\tif (!this._taskQueue.length) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this._workers.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst priorityMatchers: TaskMatcher[] = [\n\t\t\t(task) => this.resolveTaskQueue(task.method) === 'publication',\n\t\t\t(task) => this.resolveTaskQueue(task.method) === 'default',\n\t\t\t(task) => this.resolveTaskQueue(task.method) === 'codex'\n\t\t];\n\n\t\tconst tryAssignTask = (matcher: TaskMatcher): boolean => {\n\t\t\tfor (let i = 0; i < this._taskQueue.length; i++) {\n\t\t\t\tlet task = this._taskQueue[i];\n\t\t\t\tif (!matcher(task)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet targetWorker = this.findWorkerForTask(task);\n\n\t\t\t\tif (targetWorker) {\n\t\t\t\t\tthis._taskQueue.splice(i, 1);\n\t\t\t\t\tthis.assignTaskToWorker(targetWorker, task);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\twhile (this._taskQueue.length > 0) {\n\t\t\tlet assigned = false;\n\t\t\tfor (const matcher of priorityMatchers) {\n\t\t\t\tif (tryAssignTask(matcher)) {\n\t\t\t\t\tassigned = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!assigned) {\n\t\t\t\tthis.logNoWorkerAvailability();\n\t\t\t\tthis.scheduleDispatchRetry();\n\n\t\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'No Worker Available', JSON.stringify(this._workers, null, 2));\n\t\t\t\t}\n\n\t\t\t\treturn; // nothing can run right now due to per-worker limits\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleDispatchRetry(delayMs: number = this._dispatchRetryDelayMs) {\n\t\tif (this._dispatchRetryTimer) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._dispatchRetryTimer = setTimeout(() => {\n\t\t\tthis._dispatchRetryTimer = null;\n\t\t\tthis.dispatchQueue();\n\t\t}, delayMs);\n\t}\n\n\t/**\n\t * Returns the worker with the fewest activeTasks that is under maxConcurrency and per-method limit.\n\t */\n\tprivate findWorkerForTask(task: TaskPayload): WorkerConnection | null {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\t\tconst taskQueue = this.resolveTaskQueue(task.method);\n\t\tlet methodLimit = method && method.maxConcurrency && method.maxConcurrency > 0 ? method.maxConcurrency : null;\n\t\tlet methodLimitPerInstance = method && method.maxConcurrencyPerInstance && method.maxConcurrencyPerInstance > 0\n\t\t\t? method.maxConcurrencyPerInstance\n\t\t\t: null;\n\t\tlet targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\t\tlet targetWorkerInstance = this.normalizeWorkerIndex(method?.targetWorkerInstance);\n\t\tconst hasExplicitTarget = !!targetWorkerIndex || !!targetWorkerInstance;\n\t\tconst preferNonZero = !targetWorkerIndex;\n\t\tconst debugCodex = this._aiWorkerDebug && taskQueue === 'codex';\n\t\tconst debugState: Record<string, any> | null = debugCodex ? {\n\t\t\ttaskId: task.taskId,\n\t\t\tmethod: task.method,\n\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\ttargetWorkerIndex: targetWorkerIndex || null,\n\t\t\ttargetWorkerInstance: targetWorkerInstance || null,\n\t\t\tworkerCount: this._workers.length,\n\t\t\tpublicationSelector: {\n\t\t\t\tindexes: this.selectorToArray(this._publicationWorkerIndexes),\n\t\t\t\tinstances: this.selectorToArray(this._publicationWorkerInstances)\n\t\t\t},\n\t\t\tcodexSelector: {\n\t\t\t\tindexes: this.selectorToArray(this._codexWorkerIndexes),\n\t\t\t\tinstances: this.selectorToArray(this._codexWorkerInstances)\n\t\t\t},\n\t\t\tmaxConcurrency: this.MAX_CONCURRENCY,\n\t\t\tnonCodexReserve: this._nonCodexReserve\n\t\t} : null;\n\n\t\tlet candidates = this._workers.filter(x => x.activeTasks.length < this.MAX_CONCURRENCY);\n\t\tcandidates = this.filterGeneralPurposeWorkers(candidates, hasExplicitTarget);\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesInitial = candidates.length;\n\t\t}\n\t\tconst hasPublicationSelector = this.hasWorkerSelector(this._publicationWorkerIndexes, this._publicationWorkerInstances);\n\t\tif (hasPublicationSelector && !hasExplicitTarget) {\n\t\t\tif (taskQueue === 'publication') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesAfterPublicationFilter = candidates.length;\n\t\t\tdebugState.hasPublicationSelector = hasPublicationSelector;\n\t\t}\n\n\t\tconst hasCodexSelector = this.hasWorkerSelector(this._codexWorkerIndexes, this._codexWorkerInstances);\n\t\tif (hasCodexSelector) {\n\t\t\tif (taskQueue === 'codex') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse if (!hasExplicitTarget) {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesAfterCodexFilter = candidates.length;\n\t\t\tdebugState.hasCodexSelector = hasCodexSelector;\n\t\t}\n\t\tif (targetWorkerIndex) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex);\n\t\t}\n\t\tif (targetWorkerInstance) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerInstance) === targetWorkerInstance);\n\t\t}\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesAfterTargetFilter = candidates.length;\n\t\t}\n\t\tif (!candidates.length) {\n\t\t\tthis.logCodexSelection(debugState, 'noCandidates');\n\t\t\treturn null;\n\t\t}\n\n\t\tlet eligible = candidates.filter((worker) => {\n\t\t\tif (!methodLimit) {\n\t\t\t\tif (!methodLimitPerInstance) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (methodLimitPerInstance) {\n\t\t\t\tconst currentInstance = worker.activeTasks.filter(a => a.method === task.method).length;\n\t\t\t\tif (currentInstance >= methodLimitPerInstance) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!methodLimit) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet idx = worker.workerIndex || 'unknown';\n\t\t\tlet current = 0;\n\n\t\t\tthis._workers.forEach((w) => {\n\t\t\t\tif ((w.workerIndex || 'unknown') === idx) {\n\t\t\t\t\tcurrent += w.activeTasks.filter(a => a.method === task.method).length;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn current < methodLimit;\n\t\t});\n\n\t\tif (debugState) {\n\t\t\tdebugState.eligibleAfterLimits = eligible.length;\n\t\t}\n\t\tif (!eligible.length) {\n\t\t\tthis.logCodexSelection(debugState, 'limitsExceeded');\n\t\t\treturn null;\n\t\t}\n\n\t\tif (taskQueue === 'codex' && this._nonCodexReserve > 0) {\n\t\t\teligible = eligible.filter(worker => (this.MAX_CONCURRENCY - worker.activeTasks.length) > this._nonCodexReserve);\n\t\t}\n\n\t\tif (debugState) {\n\t\t\tdebugState.eligibleAfterReserve = eligible.length;\n\t\t}\n\t\tif (!eligible.length) {\n\t\t\tthis.logCodexSelection(debugState, 'reserveBlocked');\n\t\t\treturn null;\n\t\t}\n\n\t\teligible.sort((x, y) => {\n\t\t\tconst totalX = this.getWorkerLoad(x);\n\t\t\tconst totalY = this.getWorkerLoad(y);\n\t\t\tif (totalX !== totalY) {\n\t\t\t\treturn totalX - totalY;\n\t\t\t}\n\n\t\t\tif (preferNonZero) {\n\t\t\t\tconst xZero = this.isWorkerZero(x) ? 1 : 0;\n\t\t\t\tconst yZero = this.isWorkerZero(y) ? 1 : 0;\n\t\t\t\tif (xZero !== yZero) {\n\t\t\t\t\treturn xZero - yZero;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst idxX = this.normalizeWorkerIndex(x.workerIndex) || '';\n\t\t\tconst idxY = this.normalizeWorkerIndex(y.workerIndex) || '';\n\t\t\tconst idxCompare = idxX.localeCompare(idxY, undefined, { numeric: true, sensitivity: 'base' });\n\t\t\tif (idxCompare !== 0) {\n\t\t\t\treturn idxCompare;\n\t\t\t}\n\n\t\t\tconst instX = this.normalizeWorkerIndex(x.workerInstance) || '';\n\t\t\tconst instY = this.normalizeWorkerIndex(y.workerInstance) || '';\n\t\t\treturn instX.localeCompare(instY, undefined, { numeric: true, sensitivity: 'base' });\n\t\t});\n\n\t\t\tconst selected = eligible[0];\n\t\t\tif (this._aiWorkerDebug && taskQueue === 'codex') {\n\t\t\t\tconsole.log(new Date(), '[AI Worker Debug] AI worker selected', {\n\t\t\t\t\ttaskId: task.taskId,\n\t\t\t\t\tmethod: task.method,\n\t\t\t\t\tworkerIndex: selected?.workerIndex || null,\n\t\t\t\t\tworkerInstance: selected?.workerInstance || null,\n\t\t\t\tactiveTasks: selected?.activeTasks ? selected.activeTasks.length : 0,\n\t\t\t\tqueueDepth: this._taskQueue.length\n\t\t\t});\n\t\t}\n\t\treturn selected;\n\t}\n\n\tprivate logCodexSelection(debugState: Record<string, any> | null, reason: string): void {\n\t\tif (!debugState || !this._aiWorkerDebug) {\n\t\t\treturn;\n\t\t}\n\t\tconst taskId = String(debugState.taskId || '');\n\t\tif (!taskId || this._debugCodexTaskIds.has(taskId)) {\n\t\t\treturn;\n\t\t\t}\n\t\t\tthis._debugCodexTaskIds.add(taskId);\n\t\t\tconsole.warn(new Date(), '[AI Worker Debug] AI worker selection issue', {\n\t\t\t\treason,\n\t\t\t\t...debugState\n\t\t\t});\n\t\t}\n\n\tprivate normalizeWorkerIndex(value?: string | number | null): string | null {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst normalized = String(value).trim();\n\t\treturn normalized.length ? normalized : null;\n\t}\n\n\tprivate isGeneralPurposeWorker(worker: WorkerConnection): boolean {\n\t\tconst normalizedIndex = this.normalizeWorkerIndex(worker?.workerIndex);\n\t\tif (!normalizedIndex) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn /^[0-9]+$/.test(normalizedIndex);\n\t}\n\n\tprivate filterGeneralPurposeWorkers(candidates: WorkerConnection[], hasExplicitTarget: boolean): WorkerConnection[] {\n\t\tif (hasExplicitTarget) {\n\t\t\treturn candidates;\n\t\t}\n\n\t\treturn candidates.filter(worker => this.isGeneralPurposeWorker(worker));\n\t}\n\n\tprivate getWorkerLoad(worker: WorkerConnection): number {\n\t\treturn worker.activeTasks.reduce((sum, task) => sum + task.weight, 0);\n\t}\n\n\tprivate isWorkerZero(worker: WorkerConnection): boolean {\n\t\treturn this.normalizeWorkerIndex(worker.workerIndex) === '0';\n\t}\n\n\tprivate assignTaskToWorker(worker: WorkerConnection, task: TaskPayload) {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\n\t\tif (!method) {\n\t\t\tconsole.error('Failed to send task to worker - Could not find method:', task.method);\n\t\t\tthis._taskTimings.delete(task.taskId);\n\t\t\treturn;\n\t\t}\n\n\t\tconst dispatchedAt = Date.now();\n\t\tconst timing = this._taskTimings.get(task.taskId) || { queuedAt: dispatchedAt };\n\t\ttiming.dispatchedAt = dispatchedAt;\n\t\ttiming.method = task.method;\n\t\ttiming.messageId = task.messageId;\n\t\ttiming.userContext = task.userContext;\n\t\tif (!timing.params) {\n\t\t\ttiming.params = task.params;\n\t\t}\n\t\tthis._taskTimings.set(task.taskId, timing);\n\n\t\tworker.activeTasks.push({\n\t\t\ttaskId: task.taskId,\n\t\t\tweight: method && method.workerTaskWeight ? method.workerTaskWeight : 1,\n\t\t\tmethod: task.method,\n\t\t\tstartedAt: dispatchedAt,\n\t\t\tmessageId: task.messageId,\n\t\t\tuserContext: task.userContext\n\t\t});\n\t\tthis._debugNoWorkerTaskIds.delete(task.taskId);\n\n\t\tlet payload: TaskPayload = {\n\t\t\ttype: 'task',\n\t\t\ttaskId: task.taskId,\n\t\t\tmessageId: task.messageId,\n\t\t\tmethod: task.method,\n\t\t\tparams: task.params,\n\t\t\tuserContext: task.userContext || {},\n\t\t\tqueuedAt: timing.queuedAt,\n\t\t\tdispatchedAt\n\t\t};\n\n\t\tif (this.shouldDebug()) {\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(task.method, task.params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId: task.taskId,\n\t\t\t\tmethod: task.method,\n\t\t\t\tmessageId: task.messageId,\n\t\t\t\tpriority: task.method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\tworker: {\n\t\t\t\t\tid: worker.id,\n\t\t\t\t\tindex: worker.workerIndex,\n\t\t\t\t\tinstance: worker.workerInstance\n\t\t\t\t},\n\t\t\t\tqueueDepth: this._taskQueue.length\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskAssigned', logPayload);\n\t\t}\n\n\t\tlet timeoutHandle = setTimeout(() => {\n\t\t\tlet pending = this._pendingTasks.get(task.taskId);\n\t\t\tconst timeoutAt = Date.now();\n\t\t\tconst queuedAt = timing.queuedAt;\n\t\t\tconst queueWaitMs = queuedAt ? round(dispatchedAt - queuedAt) : null;\n\t\t\tconst dispatchToTimeoutMs = round(timeoutAt - dispatchedAt);\n\n\t\t\tif (pending) {\n\t\t\t\tif (pending.promise) {\n\t\t\t\t\tpending.promise.reject('Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method);\n\t\t\t\t}\n\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\t\t\t}\n\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(task.method, task.params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId: task.taskId,\n\t\t\t\tmethod: task.method,\n\t\t\t\tmessageId: task.messageId,\n\t\t\t\tqueueWaitMs,\n\t\t\t\tdispatchToTimeoutMs,\n\t\t\t\tuserContext: task.userContext,\n\t\t\t\tworker: {\n\t\t\t\t\tid: worker.id,\n\t\t\t\t\tindex: worker.workerIndex,\n\t\t\t\t\tinstance: worker.workerInstance\n\t\t\t\t},\n\t\t\t\tworkers: this._workers.map(a => a.activeTasks)\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskTimeout', logPayload);\n\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\t\t\tthis._taskTimings.delete(task.taskId);\n\n\t\t\tif (task.userContext && task.userContext.id_ws) {\n\t\t\t\tlet timeoutRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: task.messageId,\n\t\t\t\t\thasError: true,\n\t\t\t\t\tdata: 'Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method\n\t\t\t\t};\n\n\t\t\t\tlet clientWS = this._websocketManager.getWebSocket(task.userContext.id_ws);\n\n\t\t\t\tif (clientWS) {\n\t\t\t\t\tthis._websocketManager.send(clientWS, timeoutRes);\n\t\t\t\t}\n\t\t\t}\n\t\t}, method.timeoutOverride || (1000 * 60 * 2));\n\n\t\t// If we already stored a promise for this task (from sendInternalPromise), add the timeout now\n\t\tlet existing = this._pendingTasks.get(task.taskId);\n\t\tif (!existing) {\n\t\t\texisting = { timeout: null, method: task.method };\n\t\t}\n\t\telse {\n\t\t\texisting.method = task.method;\n\t\t}\n\n\t\texisting.timeout = timeoutHandle;\n\t\tthis._pendingTasks.set(task.taskId, existing);\n\n\t\ttry {\n\t\t\tthis.sendWorkerPayload(worker.ws, payload);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to send task to worker:', err);\n\n\t\t\tclearTimeout(timeoutHandle);\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\n\t\t\t// Put task back in front\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\tprivate logNoWorkerAvailability() {\n\t\tif (!this.shouldDebug()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst workers = this._workers.map(worker => ({\n\t\t\tid: worker.id,\n\t\t\tindex: this.normalizeWorkerIndex(worker.workerIndex),\n\t\t\tinstance: this.normalizeWorkerIndex(worker.workerInstance),\n\t\t\tactiveTasks: worker.activeTasks.length\n\t\t}));\n\n\t\tfor (const task of this._taskQueue) {\n\t\t\tconst method = this._methodManager.getMethod(task.method);\n\t\t\tconst targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\t\t\tconst targetWorkerInstance = this.normalizeWorkerIndex(method?.targetWorkerInstance);\n\n\t\t\tif (!targetWorkerIndex && !targetWorkerInstance) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (this._debugNoWorkerTaskIds.has(task.taskId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst hasMatch = this._workers.some(worker =>\n\t\t\t\t(!targetWorkerIndex || this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex) &&\n\t\t\t\t(!targetWorkerInstance || this.normalizeWorkerIndex(worker.workerInstance) === targetWorkerInstance)\n\t\t\t);\n\n\t\t\tif (!hasMatch) {\n\t\t\t\tthis._debugNoWorkerTaskIds.add(task.taskId);\n\t\t\t\tconsole.warn(new Date(), '[WorkerDispatcher] No matching worker for task', {\n\t\t\t\t\ttaskId: task.taskId,\n\t\t\t\t\tmethod: task.method,\n\t\t\t\t\ttargetWorkerIndex,\n\t\t\t\t\ttargetWorkerInstance,\n\t\t\t\t\tworkers\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate shouldDebug(): boolean {\n\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._workerTaskDebug) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.parseDebugFlag(process.env.WORKER_TASK_DEBUG ?? process.env.WORKER_DISPATCH_DEBUG);\n\t}\n\n\tprivate logWorkerEvent(event: string, details: Record<string, any>) {\n\t\tconsole.log(this.safeStringify({\n\t\t\tts: new Date().toISOString(),\n\t\t\tevent,\n\t\t\t...details\n\t\t}));\n\t}\n\n\tprivate safeStringify(value: any): string {\n\t\ttry {\n\t\t\tconst seen = new WeakSet();\n\t\t\treturn JSON.stringify(value, (key, val) => {\n\t\t\t\tif (key === '__proto__') {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tif (typeof val === 'bigint') {\n\t\t\t\t\treturn val.toString();\n\t\t\t\t}\n\t\t\t\tif (val instanceof Error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: val.name,\n\t\t\t\t\t\tmessage: val.message,\n\t\t\t\t\t\tstack: val.stack\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (val && typeof val === 'object') {\n\t\t\t\t\tif (seen.has(val)) {\n\t\t\t\t\t\treturn '[Circular]';\n\t\t\t\t\t}\n\t\t\t\t\tseen.add(val);\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t});\n\t\t}\n\t\tcatch (err) {\n\t\t\treturn JSON.stringify({\n\t\t\t\terror: 'safeStringifyFailed',\n\t\t\t\tmessage: err?.message || String(err)\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Handle messages coming back from a worker (like 'taskComplete').\n\t */\n\tpublic handleWorkerMessage(workerId: string, rawMessage: WebSocket.RawData) {\n\t\tlet data: TaskResponse;\n\n\t\ttry {\n\t\t\tif (typeof rawMessage === 'string') {\n\t\t\t\tdata = JSON.parse(rawMessage, dateReviver);\n\t\t\t}\n\t\t\telse if (Buffer.isBuffer(rawMessage)) {\n\t\t\t\tdata = unpack(rawMessage);\n\t\t\t}\n\t\t\telse if (Array.isArray(rawMessage)) {\n\t\t\t\tconst chunks = rawMessage as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\tdata = unpack(Buffer.concat(chunks));\n\t\t\t}\n\t\t\telse if (rawMessage instanceof ArrayBuffer) {\n\t\t\t\tdata = unpack(Buffer.from(rawMessage));\n\t\t\t}\n\t\t\telse if (ArrayBuffer.isView(rawMessage)) {\n\t\t\t\tconst view = rawMessage as NodeJS.ArrayBufferView;\n\t\t\t\tdata = unpack(Buffer.from(view.buffer, view.byteOffset, view.byteLength));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.error('Unsupported worker message type received:', typeof rawMessage);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to parse worker message:', err);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.type === 'taskComplete') {\n\t\t\tlet worker = this._workers.find(x => x.id === workerId);\n\n\t\t\tif (!worker) {\n\t\t\t\tconsole.error('Unknown worker for taskComplete:', workerId);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet { taskId, messageId, error, result } = data;\n\t\t\tconst timing = this._taskTimings.get(taskId);\n\t\t\tconst methodName = timing?.method;\n\t\t\tconst isAiMethod = !!methodName && methodName.startsWith('ai');\n\t\t\tlet unpackedResult = result;\n\t\t\tlet pendingTask = this._pendingTasks.get(taskId);\n\t\t\tconst resolveRaw = !!pendingTask?.resolveRaw;\n\n\t\t\tif (!error && !resolveRaw && unpackedResult === null && data['packedResult']) {\n\t\t\t\ttry {\n\t\t\t\t\tunpackedResult = unpack(data['packedResult']);\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.error('Failed to unpack worker result', err);\n\t\t\t\t}\n\t\t\t}\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== taskId);\n\t\t\tthis._taskTimings.delete(taskId);\n\n\t\t\tif (this._aiWorkerDebug && isAiMethod) {\n\t\t\t\tconst packedBytes = data['packedResult'] && data['packedResult'].byteLength\n\t\t\t\t\t? data['packedResult'].byteLength\n\t\t\t\t\t: null;\n\t\t\t\tlet resultBytes: number | null = null;\n\t\t\t\tif (!packedBytes) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresultBytes = Buffer.byteLength(JSON.stringify(result));\n\t\t\t\t\t}\n\t\t\t\t\tcatch {\n\t\t\t\t\t\tresultBytes = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconsole.log(new Date(), '[AI Worker Debug] worker result', {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tmethod: methodName,\n\t\t\t\t\tmessageId,\n\t\t\t\t\thasError: !!error,\n\t\t\t\t\tpackedBytes,\n\t\t\t\t\tresultBytes,\n\t\t\t\t\tworkerIndex: worker?.workerIndex || null,\n\t\t\t\t\tworkerInstance: worker?.workerInstance || null,\n\t\t\t\t\tqueueDepth: this._taskQueue.length\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tif (pendingTask) {\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tpendingTask.promise.reject(unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpendingTask.promise.resolve(resolveRaw ? data : unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(taskId);\n\t\t\t}\n\n\t\t\t// Look up original request if it came from a client\n\t\t\tlet clientReqId = this._clientRequests[taskId];\n\n\t\t\tif (clientReqId) {\n\t\t\t\tlet res: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: result\n\t\t\t\t};\n\n\t\t\t\tif (error) {\n\t\t\t\t\tres.hasError = true;\n\t\t\t\t\tres.data = result;\n\t\t\t\t}\n\n\t\t\t\tlet clientReqWS = this._websocketManager.getWebSocket(clientReqId);\n\n\t\t\t\tif (clientReqWS) {\n\t\t\t\t\tif (!error && data['packedResult']) {\n\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\t\t\tclientReqWS,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tdata['packedResult'],\n\t\t\t\t\t\t\tdata['encoding'] || 'msgpack',\n\t\t\t\t\t\t\t{ passThrough: true }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._websocketManager.send(clientReqWS, res);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._clientRequests[taskId]) {\n\t\t\t\t\tdelete this._clientRequests[taskId];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Try to dispatch more from the queue\n\t\t\tif (this._taskQueue.length) {\n\t\t\t\tthis.dispatchQueue();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic sendWorkerPayload(ws: WebSocket.WebSocket, payload: TaskPayload | string) {\n\t\tif (!ws) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (ws.readyState !== WebSocket.OPEN) {\n\t\t\tif (typeof payload !== 'string') {\n\t\t\t\tconst task = payload;\n\n\t\t\t\tthis._taskQueue.unshift(task);\n\t\t\t\tthis.dispatchQueue();\n\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Worker socket not open.');\n\t\t\t\t}\n\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof payload === 'string') {\n\t\t\ttry {\n\t\t\t\tws.send(payload);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t\tconsole.error('Failed to send worker payload:', err);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst task = payload;\n\t\tconst payloadBuffer = pack(task);\n\n\t\ttry {\n\t\t\tws.send(payloadBuffer);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sending to Server', task);\n\t\t\t}\n\n\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\tws.close();\n\t\t\tconsole.error('Failed to send worker response:', err);\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Failed to send worker response: ' + err?.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"sources":["../../src/managers/worker-dispatcher.manager.ts"],"names":[],"mappings":"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","file":"worker-dispatcher.manager.js","sourcesContent":["import * as WebSocket from 'ws';\nimport { ServerResponseModel, TaskPayload, TaskResponse } from '../models/server-message.model';\nimport { dateReviver, objectIdHexString, round } from '../util/common';\nimport { MethodManager } from './method.manager';\nimport { WebSocketManager } from './websocket.manager';\nimport { pack, unpack } from 'msgpackr';\n\nexport interface WorkerConnection {\n\tid: string;\n\tws: WebSocket.WebSocket;\n\tactiveTasks: {\n\t\ttaskId: string;\n\t\tweight: number;\n\t\tmethod?: string;\n\t\tstartedAt?: number;\n\t\tmessageId?: number;\n\t\tuserContext?: { id_user?: string; user?: string; id_ws?: string };\n\t}[];\n\tworkerIndex?: string;\n\tworkerInstance?: string;\n}\n\ninterface PendingTask {\n\ttimeout: NodeJS.Timeout;\n\tpromise?: {\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tresolve: (value: any) => void;\n\t\t// eslint-disable-next-line no-unused-vars\n\t\treject: (reason?: any) => void;\n\t};\n\tmethod?: string;\n\tresolveRaw?: boolean;\n}\n\n// eslint-disable-next-line no-unused-vars\ntype TaskMatcher = (task: TaskPayload) => boolean;\n\nexport class WorkerDispatcherManager {\n\tprivate _websocketManager: WebSocketManager;\n\tprivate _methodManager: MethodManager;\n\tprivate _workers: WorkerConnection[] = [];\n\tprivate _taskQueue: TaskPayload[] = [];\n\tprivate _clientRequests: { [taskId: string]: string } = {};\n\tprivate _pendingTasks: Map<string, PendingTask> = new Map();\n\tprivate _debugNoWorkerTaskIds: Set<string> = new Set();\n\tprivate _debugCodexTaskIds: Set<string> = new Set();\n\tprivate _taskTimings: Map<string, {\n\t\tqueuedAt: number;\n\t\tdispatchedAt?: number;\n\t\tmethod?: string;\n\t\tmessageId?: number;\n\t\tuserContext?: { id_user?: string; user?: string; id_ws?: string };\n\t\tparams?: any[];\n\t}> = new Map();\n\tprivate _dispatchRetryTimer: NodeJS.Timeout | null = null;\n\tprivate _dispatchRetryDelayMs = 25;\n\tprivate _nonCodexReserve = 0;\n\tprivate _publicationWorkerIndexes: Set<string> | null = null;\n\tprivate _publicationWorkerInstances: Set<string> | null = null;\n\tprivate _codexWorkerIndexes: Set<string> | null = null;\n\tprivate _codexWorkerInstances: Set<string> | null = null;\n\n\tprivate MAX_CONCURRENCY = 10;\n\tprivate WORKER_TASK_LOG_THRESHOLD_MS = 200;\n\tprivate WORKER_PUBLICATION_SLOW_MS = 20000;\n\tprivate _workerTaskDebug = false;\n\tprivate _aiWorkerDebug = false;\n\n\tconstructor() {}\n\n\tstatic create(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tconst workerDispatcherManager = new WorkerDispatcherManager();\n\t\tworkerDispatcherManager.initialize(websocketManager, methodManager);\n\t\treturn workerDispatcherManager;\n\t}\n\n\tpublic initialize(websocketManager: WebSocketManager, methodManager: MethodManager) {\n\t\tthis._websocketManager = websocketManager;\n\t\tthis._methodManager = methodManager;\n\t\tthis._workerTaskDebug = this.parseDebugFlag(process.env.WORKER_TASK_DEBUG ?? process.env.WORKER_DISPATCH_DEBUG);\n\t\tthis._aiWorkerDebug = this.parseDebugFlag(process.env.AI_ASSISTANT_WORKER_DEBUG);\n\t\tconst slowPublicationMs = parseInt(process.env.WORKER_PUBLICATION_SLOW_MS ?? '', 10);\n\t\tif (!Number.isNaN(slowPublicationMs) && slowPublicationMs > 0) {\n\t\t\tthis.WORKER_PUBLICATION_SLOW_MS = slowPublicationMs;\n\t\t}\n\t\tthis._nonCodexReserve = this.parsePositiveInt(\n\t\t\tprocess.env.WORKER_NON_CODEX_RESERVE ?? process.env.WORKER_RESERVED_SLOTS,\n\t\t\t0\n\t\t);\n\t\tthis._publicationWorkerIndexes = this.parseWorkerSelector(\n\t\t\tprocess.env.PUBLICATION_WORKER_INDEX\n\t\t\t|| process.env.SUBSCRIPTION_WORKER_INDEX\n\t\t\t|| process.env.WORKER_PUBLICATION_INDEX\n\t\t);\n\t\tthis._publicationWorkerInstances = this.parseWorkerSelector(\n\t\t\tprocess.env.PUBLICATION_WORKER_INSTANCE\n\t\t\t|| process.env.SUBSCRIPTION_WORKER_INSTANCE\n\t\t\t|| process.env.WORKER_PUBLICATION_INSTANCE\n\t\t);\n\t\tthis._codexWorkerIndexes = this.parseWorkerSelector(\n\t\t\tprocess.env.AI_ASSISTANT_CODEX_WORKER_INDEX\n\t\t\t|| process.env.CODEX_WORKER_INDEX\n\t\t\t|| process.env.WORKER_CODEX_INDEX\n\t\t);\n\t\tthis._codexWorkerInstances = this.parseWorkerSelector(\n\t\t\tprocess.env.AI_ASSISTANT_CODEX_WORKER_INSTANCE\n\t\t\t|| process.env.CODEX_WORKER_INSTANCE\n\t\t\t|| process.env.WORKER_CODEX_INSTANCE\n\t\t);\n\t}\n\n\tprivate parseDebugFlag(value: any): boolean {\n\t\tif (value === true) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (value === false || value === null || value === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (typeof value === 'number') {\n\t\t\treturn value === 1;\n\t\t}\n\n\t\tif (typeof value === 'string') {\n\t\t\tconst normalized = value.trim().toLowerCase();\n\t\t\treturn ['1', 'true', 'yes', 'y', 'on'].includes(normalized);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tprivate parsePositiveInt(value: any, fallback: number): number {\n\t\tconst parsed = parseInt(value ?? '', 10);\n\t\tif (Number.isNaN(parsed) || parsed < 0) {\n\t\t\treturn fallback;\n\t\t}\n\t\treturn parsed;\n\t}\n\n\tprivate parseWorkerSelector(value: any): Set<string> | null {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst parts: string[] = [];\n\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (const item of value) {\n\t\t\t\tconst entry = String(item ?? '').split(',');\n\t\t\t\tfor (const chunk of entry) {\n\t\t\t\t\tconst trimmed = String(chunk ?? '').trim();\n\t\t\t\t\tif (trimmed) {\n\t\t\t\t\t\tparts.push(trimmed);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tconst entry = String(value ?? '').split(',');\n\t\t\tfor (const chunk of entry) {\n\t\t\t\tconst trimmed = String(chunk ?? '').trim();\n\t\t\t\tif (trimmed) {\n\t\t\t\t\tparts.push(trimmed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!parts.length) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn new Set(parts);\n\t}\n\n\tprivate selectorToArray(value: Set<string> | null): string[] | null {\n\t\tif (!value) {\n\t\t\treturn null;\n\t\t}\n\t\treturn Array.from(value.values());\n\t}\n\n\tprivate hasWorkerSelector(indexes: Set<string> | null, instances: Set<string> | null): boolean {\n\t\treturn !!(indexes && indexes.size) || !!(instances && instances.size);\n\t}\n\n\tprivate workerMatchesSelector(worker: WorkerConnection, indexes: Set<string> | null, instances: Set<string> | null): boolean {\n\t\tif (!this.hasWorkerSelector(indexes, instances)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst normalizedIndex = this.normalizeWorkerIndex(worker.workerIndex);\n\t\tconst normalizedInstance = this.normalizeWorkerIndex(worker.workerInstance);\n\t\tconst indexMatch = indexes ? (normalizedIndex ? indexes.has(normalizedIndex) : false) : true;\n\t\tconst instanceMatch = instances ? (normalizedInstance ? instances.has(normalizedInstance) : false) : true;\n\n\t\treturn indexMatch && instanceMatch;\n\t}\n\n\tprivate resolveTaskQueue(methodName: string): 'publication' | 'codex' | 'default' {\n\t\tconst method = this._methodManager?.getMethod(methodName);\n\t\tconst queue = method?.workerQueue;\n\t\tif (queue === 'publication' || queue === 'codex') {\n\t\t\treturn queue;\n\t\t}\n\t\treturn 'default';\n\t}\n\n\tprivate summarizePublicationValue(value: any): any {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn value;\n\t\t}\n\n\t\tconst valueType = typeof value;\n\t\tif (valueType === 'string' || valueType === 'number' || valueType === 'boolean') {\n\t\t\treturn value;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\treturn `[Array(${value.length})]`;\n\t\t}\n\n\t\tif (valueType === 'object') {\n\t\t\treturn `[Object keys=${Object.keys(value).length}]`;\n\t\t}\n\n\t\treturn `[${valueType}]`;\n\t}\n\n\tprivate getPublicationLogInfo(method?: string, params?: any[]): Record<string, any> | null {\n\t\tif (method !== 'runPublication' || !Array.isArray(params)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst publication = typeof params[0] === 'string' ? params[0] : null;\n\t\tconst subscriptionData = Array.isArray(params[1]) ? params[1] : [];\n\t\tconst userId = typeof params[2] === 'string' ? params[2] : null;\n\t\tconst subscriptionDataPreview = subscriptionData.slice(0, 3).map((item) => this.summarizePublicationValue(item));\n\n\t\treturn {\n\t\t\tpublication,\n\t\t\tsubscriptionDataCount: subscriptionData.length,\n\t\t\tsubscriptionDataPreview,\n\t\t\tuserId\n\t\t};\n\t}\n\n\tpublic isSafeShutdown() {\n\t\treturn !this._taskQueue.length && !this._pendingTasks.size;\n\t}\n\n\tpublic addWorker(ws: WebSocket.WebSocket) {\n\t\tthis._workers.push({\n\t\t\tid: ws['id_worker'],\n\t\t\tws: ws,\n\t\t\tactiveTasks: [],\n\t\t\tworkerIndex: ws['workerIndex'],\n\t\t\tworkerInstance: ws['workerInstance']\n\t\t});\n\n\t\tsetInterval(() => {\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(JSON.stringify(this._workers.map(a => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: a.id,\n\t\t\t\t\t\tactiveTasks: a.activeTasks\n\t\t\t\t\t}\n\t\t\t\t}), null, 2));\n\t\t\t}\n\t\t}, 5000);\n\n\t\tif (this._taskQueue.length) {\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\tpublic disconnectWorker(workerId: string) {\n\t\tthis._workers = this._workers.filter(w => w.id !== workerId);\n\t}\n\n\tpublic hasWorkers() {\n\t\treturn this._workers.length > 0;\n\t}\n\n\tpublic getQueueSnapshot() {\n\t\tconst activeTasks = this._workers.reduce((total, worker) => total + (worker.activeTasks ? worker.activeTasks.length : 0), 0);\n\t\treturn {\n\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\tpendingTasks: this._pendingTasks.size,\n\t\t\tworkerCount: this._workers.length,\n\t\t\tactiveTasks,\n\t\t\tworkers: this._workers.map(worker => ({\n\t\t\t\tid: worker.id,\n\t\t\t\tindex: worker.workerIndex,\n\t\t\t\tinstance: worker.workerInstance,\n\t\t\t\tactiveTasks: worker.activeTasks ? worker.activeTasks.length : 0\n\t\t\t}))\n\t\t};\n\t}\n\n\tpublic hasWorkersForMethod(methodName: string) {\n\t\tif (!this._workers.length) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst method = this._methodManager.getMethod(methodName);\n\t\tconst taskQueue = this.resolveTaskQueue(methodName);\n\t\tconst targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\t\tconst targetWorkerInstance = this.normalizeWorkerIndex(method?.targetWorkerInstance);\n\t\tconst hasExplicitTarget = !!targetWorkerIndex || !!targetWorkerInstance;\n\n\t\tlet candidates = this.filterGeneralPurposeWorkers([...this._workers], hasExplicitTarget);\n\n\t\tconst hasPublicationSelector = this.hasWorkerSelector(this._publicationWorkerIndexes, this._publicationWorkerInstances);\n\t\tif (hasPublicationSelector && !hasExplicitTarget) {\n\t\t\tif (taskQueue === 'publication') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst hasCodexSelector = this.hasWorkerSelector(this._codexWorkerIndexes, this._codexWorkerInstances);\n\t\tif (hasCodexSelector) {\n\t\t\tif (taskQueue === 'codex') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse if (!hasExplicitTarget) {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tif (targetWorkerIndex) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex);\n\t\t}\n\t\tif (targetWorkerInstance) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerInstance) === targetWorkerInstance);\n\t\t}\n\n\t\treturn candidates.length > 0;\n\t}\n\n\t/**\n\t * Add a new task to our in-memory queue and try to dispatch.\n\t */\n\tpublic sendClientTask(messageId: number, method: string, params: any[], userContext?: { id_user?: string; user?: string; id_ws?: string }) {\n\t\tlet taskId = 'task-' + objectIdHexString();\n\t\tconst queuedAt = Date.now();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmessageId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tuserContext,\n\t\t\tqueuedAt\n\t\t});\n\n\t\tthis._taskTimings.set(taskId, {\n\t\t\tqueuedAt,\n\t\t\tmethod,\n\t\t\tmessageId,\n\t\t\tuserContext,\n\t\t\tparams\n\t\t});\n\n\t\tif (userContext && userContext.id_ws) {\n\t\t\tthis._clientRequests[taskId] = userContext.id_ws;\n\t\t}\n\n\t\tif (this.shouldDebug()) {\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tmessageId,\n\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\tuserContext\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * Same as sendInternalTask but returns a Promise so you can `await` it.\n\t */\n\tpublic sendInternalPromise(method: string, params: any[] = []): Promise<any> {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet taskId = 'task-' + objectIdHexString();\n\t\t\tconst queuedAt = Date.now();\n\n\t\t\tthis._taskQueue.push({\n\t\t\t\ttype: 'task',\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: {\n\t\t\t\t\tuser: 'Internal System'\n\t\t\t\t},\n\t\t\t\tqueuedAt\n\t\t\t});\n\n\t\t\tthis._taskTimings.set(taskId, {\n\t\t\t\tqueuedAt,\n\t\t\t\tmethod,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: { user: 'Internal System' },\n\t\t\t\tparams\n\t\t\t});\n\n\t\t\tthis._pendingTasks.set(taskId, {\n\t\t\t\ttimeout: null,\n\t\t\t\tpromise: { resolve, reject }\n\t\t\t});\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Send Internal Promise', this._taskQueue);\n\t\t\t}\n\n\t\t\tif (this.shouldDebug()) {\n\t\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tmethod,\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\t\tuserContext: { user: 'Internal System' }\n\t\t\t\t};\n\t\t\t\tif (publicationInfo) {\n\t\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t\t}\n\t\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t\t}\n\n\t\t\tthis.dispatchQueue();\n\t\t});\n\t}\n\n\t/**\n\t * Send a task internally and resolve with the raw TaskResponse (includes packedResult/meta).\n\t */\n\tpublic sendInternalPromiseRaw(method: string, params: any[] = []): Promise<TaskResponse> {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\t// eslint-disable-next-line no-restricted-syntax\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlet taskId = 'task-' + objectIdHexString();\n\t\t\tconst queuedAt = Date.now();\n\n\t\t\tthis._taskQueue.push({\n\t\t\t\ttype: 'task',\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tparams,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: {\n\t\t\t\t\tuser: 'Internal System'\n\t\t\t\t},\n\t\t\t\tqueuedAt\n\t\t\t});\n\n\t\t\tthis._taskTimings.set(taskId, {\n\t\t\t\tqueuedAt,\n\t\t\t\tmethod,\n\t\t\t\tmessageId: 0,\n\t\t\t\tuserContext: { user: 'Internal System' },\n\t\t\t\tparams\n\t\t\t});\n\n\t\t\tthis._pendingTasks.set(taskId, {\n\t\t\t\ttimeout: null,\n\t\t\t\tpromise: { resolve, reject },\n\t\t\t\tresolveRaw: true\n\t\t\t});\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Send Internal Raw Promise', this._taskQueue);\n\t\t\t}\n\n\t\t\tif (this.shouldDebug()) {\n\t\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tmethod,\n\t\t\t\t\tmessageId: 0,\n\t\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\t\tuserContext: { user: 'Internal System' }\n\t\t\t\t};\n\t\t\t\tif (publicationInfo) {\n\t\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t\t}\n\t\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t\t}\n\n\t\t\tthis.dispatchQueue();\n\t\t});\n\t}\n\n\t/**\n\t * Send a task internally without returning a promise.\n\t */\n\tpublic sendInternalTask(method: string, params = []) {\n\t\tif (!Array.isArray(params)) {\n\t\t\tparams = [params];\n\t\t}\n\n\t\tlet taskId = 'task-' + objectIdHexString();\n\t\tconst queuedAt = Date.now();\n\n\t\tthis._taskQueue.push({\n\t\t\ttype: 'task',\n\t\t\ttaskId,\n\t\t\tmethod,\n\t\t\tparams,\n\t\t\tmessageId: 0,\n\t\t\tuserContext: {\n\t\t\t\tuser: 'Internal System'\n\t\t\t},\n\t\t\tqueuedAt\n\t\t});\n\n\t\tthis._taskTimings.set(taskId, {\n\t\t\tqueuedAt,\n\t\t\tmethod,\n\t\t\tmessageId: 0,\n\t\t\tuserContext: { user: 'Internal System' },\n\t\t\tparams\n\t\t});\n\n\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\tconsole.log(new Date(), 'Send Internal Task', this._taskQueue);\n\t\t}\n\n\t\tif (this.shouldDebug()) {\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(method, params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId,\n\t\t\t\tmethod,\n\t\t\t\tmessageId: 0,\n\t\t\t\tpriority: method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\t\tuserContext: { user: 'Internal System' }\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskQueued', logPayload);\n\t\t}\n\n\t\tthis.dispatchQueue();\n\t}\n\n\t/**\n\t * The main loop that assigns tasks from _taskQueue to any worker that has capacity.\n\t */\n\tprivate dispatchQueue() {\n\t\tif (!this._taskQueue.length) {\n\t\t\treturn;\n\t\t}\n\t\tif (!this._workers.length) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst priorityMatchers: TaskMatcher[] = [\n\t\t\t(task) => this.resolveTaskQueue(task.method) === 'publication',\n\t\t\t(task) => this.resolveTaskQueue(task.method) === 'default',\n\t\t\t(task) => this.resolveTaskQueue(task.method) === 'codex'\n\t\t];\n\n\t\tconst tryAssignTask = (matcher: TaskMatcher): boolean => {\n\t\t\tfor (let i = 0; i < this._taskQueue.length; i++) {\n\t\t\t\tlet task = this._taskQueue[i];\n\t\t\t\tif (!matcher(task)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tlet targetWorker = this.findWorkerForTask(task);\n\n\t\t\t\tif (targetWorker) {\n\t\t\t\t\tthis._taskQueue.splice(i, 1);\n\t\t\t\t\tthis.assignTaskToWorker(targetWorker, task);\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\twhile (this._taskQueue.length > 0) {\n\t\t\tlet assigned = false;\n\t\t\tfor (const matcher of priorityMatchers) {\n\t\t\t\tif (tryAssignTask(matcher)) {\n\t\t\t\t\tassigned = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!assigned) {\n\t\t\t\tthis.logNoWorkerAvailability();\n\t\t\t\tthis.scheduleDispatchRetry();\n\n\t\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\t\tconsole.log(new Date(), 'No Worker Available', JSON.stringify(this._workers, null, 2));\n\t\t\t\t}\n\n\t\t\t\treturn; // nothing can run right now due to per-worker limits\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate scheduleDispatchRetry(delayMs: number = this._dispatchRetryDelayMs) {\n\t\tif (this._dispatchRetryTimer) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._dispatchRetryTimer = setTimeout(() => {\n\t\t\tthis._dispatchRetryTimer = null;\n\t\t\tthis.dispatchQueue();\n\t\t}, delayMs);\n\t}\n\n\t/**\n\t * Returns the worker with the fewest activeTasks that is under maxConcurrency and per-method limit.\n\t */\n\tprivate findWorkerForTask(task: TaskPayload): WorkerConnection | null {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\t\tconst taskQueue = this.resolveTaskQueue(task.method);\n\t\tlet methodLimit = method && method.maxConcurrency && method.maxConcurrency > 0 ? method.maxConcurrency : null;\n\t\tlet methodLimitPerInstance = method && method.maxConcurrencyPerInstance && method.maxConcurrencyPerInstance > 0\n\t\t\t? method.maxConcurrencyPerInstance\n\t\t\t: null;\n\t\tlet targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\t\tlet targetWorkerInstance = this.normalizeWorkerIndex(method?.targetWorkerInstance);\n\t\tconst hasExplicitTarget = !!targetWorkerIndex || !!targetWorkerInstance;\n\t\tconst preferNonZero = !targetWorkerIndex;\n\t\tconst debugCodex = this._aiWorkerDebug && taskQueue === 'codex';\n\t\tconst debugState: Record<string, any> | null = debugCodex ? {\n\t\t\ttaskId: task.taskId,\n\t\t\tmethod: task.method,\n\t\t\tqueueDepth: this._taskQueue.length,\n\t\t\ttargetWorkerIndex: targetWorkerIndex || null,\n\t\t\ttargetWorkerInstance: targetWorkerInstance || null,\n\t\t\tworkerCount: this._workers.length,\n\t\t\tpublicationSelector: {\n\t\t\t\tindexes: this.selectorToArray(this._publicationWorkerIndexes),\n\t\t\t\tinstances: this.selectorToArray(this._publicationWorkerInstances)\n\t\t\t},\n\t\t\tcodexSelector: {\n\t\t\t\tindexes: this.selectorToArray(this._codexWorkerIndexes),\n\t\t\t\tinstances: this.selectorToArray(this._codexWorkerInstances)\n\t\t\t},\n\t\t\tmaxConcurrency: this.MAX_CONCURRENCY,\n\t\t\tnonCodexReserve: this._nonCodexReserve\n\t\t} : null;\n\n\t\tlet candidates = this._workers.filter(x => x.activeTasks.length < this.MAX_CONCURRENCY);\n\t\tcandidates = this.filterGeneralPurposeWorkers(candidates, hasExplicitTarget);\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesInitial = candidates.length;\n\t\t}\n\t\tconst hasPublicationSelector = this.hasWorkerSelector(this._publicationWorkerIndexes, this._publicationWorkerInstances);\n\t\tif (hasPublicationSelector && !hasExplicitTarget) {\n\t\t\tif (taskQueue === 'publication') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._publicationWorkerIndexes, this._publicationWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesAfterPublicationFilter = candidates.length;\n\t\t\tdebugState.hasPublicationSelector = hasPublicationSelector;\n\t\t}\n\n\t\tconst hasCodexSelector = this.hasWorkerSelector(this._codexWorkerIndexes, this._codexWorkerInstances);\n\t\tif (hasCodexSelector) {\n\t\t\tif (taskQueue === 'codex') {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\tthis.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t\telse if (!hasExplicitTarget) {\n\t\t\t\tcandidates = candidates.filter(worker =>\n\t\t\t\t\t!this.workerMatchesSelector(worker, this._codexWorkerIndexes, this._codexWorkerInstances)\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesAfterCodexFilter = candidates.length;\n\t\t\tdebugState.hasCodexSelector = hasCodexSelector;\n\t\t}\n\t\tif (targetWorkerIndex) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex);\n\t\t}\n\t\tif (targetWorkerInstance) {\n\t\t\tcandidates = candidates.filter(worker => this.normalizeWorkerIndex(worker.workerInstance) === targetWorkerInstance);\n\t\t}\n\t\tif (debugState) {\n\t\t\tdebugState.candidatesAfterTargetFilter = candidates.length;\n\t\t}\n\t\tif (!candidates.length) {\n\t\t\tthis.logCodexSelection(debugState, 'noCandidates');\n\t\t\treturn null;\n\t\t}\n\n\t\tlet eligible = candidates.filter((worker) => {\n\t\t\tif (!methodLimit) {\n\t\t\t\tif (!methodLimitPerInstance) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (methodLimitPerInstance) {\n\t\t\t\tconst currentInstance = worker.activeTasks.filter(a => a.method === task.method).length;\n\t\t\t\tif (currentInstance >= methodLimitPerInstance) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!methodLimit) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlet idx = worker.workerIndex || 'unknown';\n\t\t\tlet current = 0;\n\n\t\t\tthis._workers.forEach((w) => {\n\t\t\t\tif ((w.workerIndex || 'unknown') === idx) {\n\t\t\t\t\tcurrent += w.activeTasks.filter(a => a.method === task.method).length;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn current < methodLimit;\n\t\t});\n\n\t\tif (debugState) {\n\t\t\tdebugState.eligibleAfterLimits = eligible.length;\n\t\t}\n\t\tif (!eligible.length) {\n\t\t\tthis.logCodexSelection(debugState, 'limitsExceeded');\n\t\t\treturn null;\n\t\t}\n\n\t\tif (taskQueue === 'codex' && this._nonCodexReserve > 0) {\n\t\t\teligible = eligible.filter(worker => (this.MAX_CONCURRENCY - worker.activeTasks.length) > this._nonCodexReserve);\n\t\t}\n\n\t\tif (debugState) {\n\t\t\tdebugState.eligibleAfterReserve = eligible.length;\n\t\t}\n\t\tif (!eligible.length) {\n\t\t\tthis.logCodexSelection(debugState, 'reserveBlocked');\n\t\t\treturn null;\n\t\t}\n\n\t\teligible.sort((x, y) => {\n\t\t\tconst totalX = this.getWorkerLoad(x);\n\t\t\tconst totalY = this.getWorkerLoad(y);\n\t\t\tif (totalX !== totalY) {\n\t\t\t\treturn totalX - totalY;\n\t\t\t}\n\n\t\t\tif (preferNonZero) {\n\t\t\t\tconst xZero = this.isWorkerZero(x) ? 1 : 0;\n\t\t\t\tconst yZero = this.isWorkerZero(y) ? 1 : 0;\n\t\t\t\tif (xZero !== yZero) {\n\t\t\t\t\treturn xZero - yZero;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst idxX = this.normalizeWorkerIndex(x.workerIndex) || '';\n\t\t\tconst idxY = this.normalizeWorkerIndex(y.workerIndex) || '';\n\t\t\tconst idxCompare = idxX.localeCompare(idxY, undefined, { numeric: true, sensitivity: 'base' });\n\t\t\tif (idxCompare !== 0) {\n\t\t\t\treturn idxCompare;\n\t\t\t}\n\n\t\t\tconst instX = this.normalizeWorkerIndex(x.workerInstance) || '';\n\t\t\tconst instY = this.normalizeWorkerIndex(y.workerInstance) || '';\n\t\t\treturn instX.localeCompare(instY, undefined, { numeric: true, sensitivity: 'base' });\n\t\t});\n\n\t\t\tconst selected = eligible[0];\n\t\t\tif (this._aiWorkerDebug && taskQueue === 'codex') {\n\t\t\t\tconsole.log(new Date(), '[AI Worker Debug] AI worker selected', {\n\t\t\t\t\ttaskId: task.taskId,\n\t\t\t\t\tmethod: task.method,\n\t\t\t\t\tworkerIndex: selected?.workerIndex || null,\n\t\t\t\t\tworkerInstance: selected?.workerInstance || null,\n\t\t\t\tactiveTasks: selected?.activeTasks ? selected.activeTasks.length : 0,\n\t\t\t\tqueueDepth: this._taskQueue.length\n\t\t\t});\n\t\t}\n\t\treturn selected;\n\t}\n\n\tprivate logCodexSelection(debugState: Record<string, any> | null, reason: string): void {\n\t\tif (!debugState || !this._aiWorkerDebug) {\n\t\t\treturn;\n\t\t}\n\t\tconst taskId = String(debugState.taskId || '');\n\t\tif (!taskId || this._debugCodexTaskIds.has(taskId)) {\n\t\t\treturn;\n\t\t\t}\n\t\t\tthis._debugCodexTaskIds.add(taskId);\n\t\t\tconsole.warn(new Date(), '[AI Worker Debug] AI worker selection issue', {\n\t\t\t\treason,\n\t\t\t\t...debugState\n\t\t\t});\n\t\t}\n\n\tprivate normalizeWorkerIndex(value?: string | number | null): string | null {\n\t\tif (value === null || value === undefined) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst normalized = String(value).trim();\n\t\treturn normalized.length ? normalized : null;\n\t}\n\n\tprivate isGeneralPurposeWorker(worker: WorkerConnection): boolean {\n\t\tconst normalizedIndex = this.normalizeWorkerIndex(worker?.workerIndex);\n\t\tconst normalizedInstance = this.normalizeWorkerIndex(worker?.workerInstance);\n\t\tif (!normalizedIndex || !normalizedInstance) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn /^[0-9]+$/.test(normalizedIndex) && /^[0-9]+$/.test(normalizedInstance);\n\t}\n\n\tprivate filterGeneralPurposeWorkers(candidates: WorkerConnection[], hasExplicitTarget: boolean): WorkerConnection[] {\n\t\tif (hasExplicitTarget) {\n\t\t\treturn candidates;\n\t\t}\n\n\t\treturn candidates.filter(worker => this.isGeneralPurposeWorker(worker));\n\t}\n\n\tprivate getWorkerLoad(worker: WorkerConnection): number {\n\t\treturn worker.activeTasks.reduce((sum, task) => sum + task.weight, 0);\n\t}\n\n\tprivate isWorkerZero(worker: WorkerConnection): boolean {\n\t\treturn this.normalizeWorkerIndex(worker.workerIndex) === '0';\n\t}\n\n\tprivate assignTaskToWorker(worker: WorkerConnection, task: TaskPayload) {\n\t\tlet method = this._methodManager.getMethod(task.method);\n\n\t\tif (!method) {\n\t\t\tconsole.error('Failed to send task to worker - Could not find method:', task.method);\n\t\t\tthis._taskTimings.delete(task.taskId);\n\t\t\treturn;\n\t\t}\n\n\t\tconst dispatchedAt = Date.now();\n\t\tconst timing = this._taskTimings.get(task.taskId) || { queuedAt: dispatchedAt };\n\t\ttiming.dispatchedAt = dispatchedAt;\n\t\ttiming.method = task.method;\n\t\ttiming.messageId = task.messageId;\n\t\ttiming.userContext = task.userContext;\n\t\tif (!timing.params) {\n\t\t\ttiming.params = task.params;\n\t\t}\n\t\tthis._taskTimings.set(task.taskId, timing);\n\n\t\tworker.activeTasks.push({\n\t\t\ttaskId: task.taskId,\n\t\t\tweight: method && method.workerTaskWeight ? method.workerTaskWeight : 1,\n\t\t\tmethod: task.method,\n\t\t\tstartedAt: dispatchedAt,\n\t\t\tmessageId: task.messageId,\n\t\t\tuserContext: task.userContext\n\t\t});\n\t\tthis._debugNoWorkerTaskIds.delete(task.taskId);\n\n\t\tlet payload: TaskPayload = {\n\t\t\ttype: 'task',\n\t\t\ttaskId: task.taskId,\n\t\t\tmessageId: task.messageId,\n\t\t\tmethod: task.method,\n\t\t\tparams: task.params,\n\t\t\tuserContext: task.userContext || {},\n\t\t\tqueuedAt: timing.queuedAt,\n\t\t\tdispatchedAt\n\t\t};\n\n\t\tif (this.shouldDebug()) {\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(task.method, task.params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId: task.taskId,\n\t\t\t\tmethod: task.method,\n\t\t\t\tmessageId: task.messageId,\n\t\t\t\tpriority: task.method === 'runPublication' ? 'publication' : 'method',\n\t\t\t\tworker: {\n\t\t\t\t\tid: worker.id,\n\t\t\t\t\tindex: worker.workerIndex,\n\t\t\t\t\tinstance: worker.workerInstance\n\t\t\t\t},\n\t\t\t\tqueueDepth: this._taskQueue.length\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskAssigned', logPayload);\n\t\t}\n\n\t\tlet timeoutHandle = setTimeout(() => {\n\t\t\tlet pending = this._pendingTasks.get(task.taskId);\n\t\t\tconst timeoutAt = Date.now();\n\t\t\tconst queuedAt = timing.queuedAt;\n\t\t\tconst queueWaitMs = queuedAt ? round(dispatchedAt - queuedAt) : null;\n\t\t\tconst dispatchToTimeoutMs = round(timeoutAt - dispatchedAt);\n\n\t\t\tif (pending) {\n\t\t\t\tif (pending.promise) {\n\t\t\t\t\tpending.promise.reject('Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method);\n\t\t\t\t}\n\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\t\t\t}\n\n\t\t\tconst publicationInfo = this.getPublicationLogInfo(task.method, task.params);\n\t\t\tconst logPayload: Record<string, any> = {\n\t\t\t\ttaskId: task.taskId,\n\t\t\t\tmethod: task.method,\n\t\t\t\tmessageId: task.messageId,\n\t\t\t\tqueueWaitMs,\n\t\t\t\tdispatchToTimeoutMs,\n\t\t\t\tuserContext: task.userContext,\n\t\t\t\tworker: {\n\t\t\t\t\tid: worker.id,\n\t\t\t\t\tindex: worker.workerIndex,\n\t\t\t\t\tinstance: worker.workerInstance\n\t\t\t\t},\n\t\t\t\tworkers: this._workers.map(a => a.activeTasks)\n\t\t\t};\n\t\t\tif (publicationInfo) {\n\t\t\t\tObject.assign(logPayload, publicationInfo);\n\t\t\t}\n\t\t\tthis.logWorkerEvent('workerTaskTimeout', logPayload);\n\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\t\t\tthis._taskTimings.delete(task.taskId);\n\n\t\t\tif (task.userContext && task.userContext.id_ws) {\n\t\t\t\tlet timeoutRes: ServerResponseModel = {\n\t\t\t\t\tmessageId: task.messageId,\n\t\t\t\t\thasError: true,\n\t\t\t\t\tdata: 'Task timed out after 2m in WorkerDispatcherManager for method: ' + task.method\n\t\t\t\t};\n\n\t\t\t\tlet clientWS = this._websocketManager.getWebSocket(task.userContext.id_ws);\n\n\t\t\t\tif (clientWS) {\n\t\t\t\t\tthis._websocketManager.send(clientWS, timeoutRes);\n\t\t\t\t}\n\t\t\t}\n\t\t}, method.timeoutOverride || (1000 * 60 * 2));\n\n\t\t// If we already stored a promise for this task (from sendInternalPromise), add the timeout now\n\t\tlet existing = this._pendingTasks.get(task.taskId);\n\t\tif (!existing) {\n\t\t\texisting = { timeout: null, method: task.method };\n\t\t}\n\t\telse {\n\t\t\texisting.method = task.method;\n\t\t}\n\n\t\texisting.timeout = timeoutHandle;\n\t\tthis._pendingTasks.set(task.taskId, existing);\n\n\t\ttry {\n\t\t\tthis.sendWorkerPayload(worker.ws, payload);\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to send task to worker:', err);\n\n\t\t\tclearTimeout(timeoutHandle);\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== task.taskId);\n\n\t\t\t// Put task back in front\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\t\t}\n\t}\n\n\tprivate logNoWorkerAvailability() {\n\t\tif (!this.shouldDebug()) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst workers = this._workers.map(worker => ({\n\t\t\tid: worker.id,\n\t\t\tindex: this.normalizeWorkerIndex(worker.workerIndex),\n\t\t\tinstance: this.normalizeWorkerIndex(worker.workerInstance),\n\t\t\tactiveTasks: worker.activeTasks.length\n\t\t}));\n\n\t\tfor (const task of this._taskQueue) {\n\t\t\tconst method = this._methodManager.getMethod(task.method);\n\t\t\tconst targetWorkerIndex = this.normalizeWorkerIndex(method?.targetWorkerIndex);\n\t\t\tconst targetWorkerInstance = this.normalizeWorkerIndex(method?.targetWorkerInstance);\n\n\t\t\tif (!targetWorkerIndex && !targetWorkerInstance) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (this._debugNoWorkerTaskIds.has(task.taskId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst hasMatch = this._workers.some(worker =>\n\t\t\t\t(!targetWorkerIndex || this.normalizeWorkerIndex(worker.workerIndex) === targetWorkerIndex) &&\n\t\t\t\t(!targetWorkerInstance || this.normalizeWorkerIndex(worker.workerInstance) === targetWorkerInstance)\n\t\t\t);\n\n\t\t\tif (!hasMatch) {\n\t\t\t\tthis._debugNoWorkerTaskIds.add(task.taskId);\n\t\t\t\tconsole.warn(new Date(), '[WorkerDispatcher] No matching worker for task', {\n\t\t\t\t\ttaskId: task.taskId,\n\t\t\t\t\tmethod: task.method,\n\t\t\t\t\ttargetWorkerIndex,\n\t\t\t\t\ttargetWorkerInstance,\n\t\t\t\t\tworkers\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate shouldDebug(): boolean {\n\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (this._workerTaskDebug) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn this.parseDebugFlag(process.env.WORKER_TASK_DEBUG ?? process.env.WORKER_DISPATCH_DEBUG);\n\t}\n\n\tprivate logWorkerEvent(event: string, details: Record<string, any>) {\n\t\tconsole.log(this.safeStringify({\n\t\t\tts: new Date().toISOString(),\n\t\t\tevent,\n\t\t\t...details\n\t\t}));\n\t}\n\n\tprivate safeStringify(value: any): string {\n\t\ttry {\n\t\t\tconst seen = new WeakSet();\n\t\t\treturn JSON.stringify(value, (key, val) => {\n\t\t\t\tif (key === '__proto__') {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\t\t\t\tif (typeof val === 'bigint') {\n\t\t\t\t\treturn val.toString();\n\t\t\t\t}\n\t\t\t\tif (val instanceof Error) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tname: val.name,\n\t\t\t\t\t\tmessage: val.message,\n\t\t\t\t\t\tstack: val.stack\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (val && typeof val === 'object') {\n\t\t\t\t\tif (seen.has(val)) {\n\t\t\t\t\t\treturn '[Circular]';\n\t\t\t\t\t}\n\t\t\t\t\tseen.add(val);\n\t\t\t\t}\n\t\t\t\treturn val;\n\t\t\t});\n\t\t}\n\t\tcatch (err) {\n\t\t\treturn JSON.stringify({\n\t\t\t\terror: 'safeStringifyFailed',\n\t\t\t\tmessage: err?.message || String(err)\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Handle messages coming back from a worker (like 'taskComplete').\n\t */\n\tpublic handleWorkerMessage(workerId: string, rawMessage: WebSocket.RawData) {\n\t\tlet data: TaskResponse;\n\n\t\ttry {\n\t\t\tif (typeof rawMessage === 'string') {\n\t\t\t\tdata = JSON.parse(rawMessage, dateReviver);\n\t\t\t}\n\t\t\telse if (Buffer.isBuffer(rawMessage)) {\n\t\t\t\tdata = unpack(rawMessage);\n\t\t\t}\n\t\t\telse if (Array.isArray(rawMessage)) {\n\t\t\t\tconst chunks = rawMessage as unknown as ReadonlyArray<Uint8Array>;\n\t\t\t\tdata = unpack(Buffer.concat(chunks));\n\t\t\t}\n\t\t\telse if (rawMessage instanceof ArrayBuffer) {\n\t\t\t\tdata = unpack(Buffer.from(rawMessage));\n\t\t\t}\n\t\t\telse if (ArrayBuffer.isView(rawMessage)) {\n\t\t\t\tconst view = rawMessage as NodeJS.ArrayBufferView;\n\t\t\t\tdata = unpack(Buffer.from(view.buffer, view.byteOffset, view.byteLength));\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconsole.error('Unsupported worker message type received:', typeof rawMessage);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t\tcatch (err) {\n\t\t\tconsole.error('Failed to parse worker message:', err);\n\t\t\treturn;\n\t\t}\n\n\t\tif (data.type === 'taskComplete') {\n\t\t\tlet worker = this._workers.find(x => x.id === workerId);\n\n\t\t\tif (!worker) {\n\t\t\t\tconsole.error('Unknown worker for taskComplete:', workerId);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tlet { taskId, messageId, error, result } = data;\n\t\t\tconst timing = this._taskTimings.get(taskId);\n\t\t\tconst methodName = timing?.method;\n\t\t\tconst isAiMethod = !!methodName && methodName.startsWith('ai');\n\t\t\tlet unpackedResult = result;\n\t\t\tlet pendingTask = this._pendingTasks.get(taskId);\n\t\t\tconst resolveRaw = !!pendingTask?.resolveRaw;\n\n\t\t\tif (!error && !resolveRaw && unpackedResult === null && data['packedResult']) {\n\t\t\t\ttry {\n\t\t\t\t\tunpackedResult = unpack(data['packedResult']);\n\t\t\t\t}\n\t\t\t\tcatch (err) {\n\t\t\t\t\tconsole.error('Failed to unpack worker result', err);\n\t\t\t\t}\n\t\t\t}\n\t\t\tworker.activeTasks = worker.activeTasks.filter(a => a.taskId !== taskId);\n\t\t\tthis._taskTimings.delete(taskId);\n\n\t\t\tif (this._aiWorkerDebug && isAiMethod) {\n\t\t\t\tconst packedBytes = data['packedResult'] && data['packedResult'].byteLength\n\t\t\t\t\t? data['packedResult'].byteLength\n\t\t\t\t\t: null;\n\t\t\t\tlet resultBytes: number | null = null;\n\t\t\t\tif (!packedBytes) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresultBytes = Buffer.byteLength(JSON.stringify(result));\n\t\t\t\t\t}\n\t\t\t\t\tcatch {\n\t\t\t\t\t\tresultBytes = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconsole.log(new Date(), '[AI Worker Debug] worker result', {\n\t\t\t\t\ttaskId,\n\t\t\t\t\tmethod: methodName,\n\t\t\t\t\tmessageId,\n\t\t\t\t\thasError: !!error,\n\t\t\t\t\tpackedBytes,\n\t\t\t\t\tresultBytes,\n\t\t\t\t\tworkerIndex: worker?.workerIndex || null,\n\t\t\t\t\tworkerInstance: worker?.workerInstance || null,\n\t\t\t\t\tqueueDepth: this._taskQueue.length\n\t\t\t\t});\n\t\t\t}\n\n\n\t\t\tif (pendingTask) {\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tif (error) {\n\t\t\t\t\t\tpendingTask.promise.reject(unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tpendingTask.promise.resolve(resolveRaw ? data : unpackedResult);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(taskId);\n\t\t\t}\n\n\t\t\t// Look up original request if it came from a client\n\t\t\tlet clientReqId = this._clientRequests[taskId];\n\n\t\t\tif (clientReqId) {\n\t\t\t\tlet res: ServerResponseModel = {\n\t\t\t\t\tmessageId: messageId,\n\t\t\t\t\thasError: false,\n\t\t\t\t\tdata: result\n\t\t\t\t};\n\n\t\t\t\tif (error) {\n\t\t\t\t\tres.hasError = true;\n\t\t\t\t\tres.data = result;\n\t\t\t\t}\n\n\t\t\t\tlet clientReqWS = this._websocketManager.getWebSocket(clientReqId);\n\n\t\t\t\tif (clientReqWS) {\n\t\t\t\t\tif (!error && data['packedResult']) {\n\t\t\t\t\t\tthis._websocketManager.sendPackedBuffer(\n\t\t\t\t\t\t\tclientReqWS,\n\t\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\tdata['packedResult'],\n\t\t\t\t\t\t\tdata['encoding'] || 'msgpack',\n\t\t\t\t\t\t\t{ passThrough: true }\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis._websocketManager.send(clientReqWS, res);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (this._clientRequests[taskId]) {\n\t\t\t\t\tdelete this._clientRequests[taskId];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Try to dispatch more from the queue\n\t\t\tif (this._taskQueue.length) {\n\t\t\t\tthis.dispatchQueue();\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic sendWorkerPayload(ws: WebSocket.WebSocket, payload: TaskPayload | string) {\n\t\tif (!ws) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (ws.readyState !== WebSocket.OPEN) {\n\t\t\tif (typeof payload !== 'string') {\n\t\t\t\tconst task = payload;\n\n\t\t\t\tthis._taskQueue.unshift(task);\n\t\t\t\tthis.dispatchQueue();\n\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Worker socket not open.');\n\t\t\t\t}\n\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (typeof payload === 'string') {\n\t\t\ttry {\n\t\t\t\tws.send(payload);\n\t\t\t}\n\t\t\tcatch (err) {\n\t\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\t\tws.close();\n\t\t\t\tconsole.error('Failed to send worker payload:', err);\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tconst task = payload;\n\t\tconst payloadBuffer = pack(task);\n\n\t\ttry {\n\t\t\tws.send(payloadBuffer);\n\t\t}\n\t\tcatch (err) {\n\t\t\tthis._taskQueue.unshift(task);\n\t\t\tthis.dispatchQueue();\n\n\t\t\tif (this._methodManager.getEnableDebug()) {\n\t\t\t\tconsole.log(new Date(), 'Sending to Server', task);\n\t\t\t}\n\n\t\t\tthis.disconnectWorker(ws['id_worker']);\n\t\t\tws.close();\n\t\t\tconsole.error('Failed to send worker response:', err);\n\n\t\t\tlet pendingTask = this._pendingTasks.get(task.taskId);\n\n\t\t\tif (pendingTask) {\n\t\t\t\tclearTimeout(pendingTask.timeout);\n\t\t\t\tthis._pendingTasks.delete(task.taskId);\n\n\t\t\t\tif (pendingTask.promise) {\n\t\t\t\t\tpendingTask.promise.reject('Failed to send worker response: ' + err?.toString());\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -179,8 +179,6 @@ var DEFAULT_MAX_FILE_MB = 50;
179
179
  var DEFAULT_MAX_TOTAL_MB = 100;
180
180
  var DEFAULT_MAX_ATTACHMENT_CHARS = 12000;
181
181
  var DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS = 40000;
182
- var DEFAULT_CODEX_MODEL = 'gpt-5.3-codex';
183
- var DEFAULT_CODEX_FALLBACK_MODEL = 'gpt-5.2-codex';
184
182
  var DEFAULT_CODEX_TIMEOUT_MS = 180000;
185
183
  var DEFAULT_AI_ASSISTANT_RUN_BUDGET_MS = 120000;
186
184
  var DEFAULT_AI_ASSISTANT_MONGO_MAX_TIME_MS = 12000;
@@ -20659,7 +20657,7 @@ function resolveCodexModel(config) {
20659
20657
  || process.env.AI_TERMINAL_CODEX_MODEL
20660
20658
  || serverConfig['AI_DASHBOARD_CODEX_MODEL']
20661
20659
  || process.env.AI_DASHBOARD_CODEX_MODEL);
20662
- return raw || DEFAULT_CODEX_MODEL;
20660
+ return raw;
20663
20661
  }
20664
20662
  function resolveCodexFallbackModels(config, primaryModel) {
20665
20663
  var serverConfig = resolveio_server_app_1.ResolveIOServer.getServerConfig() || {};
@@ -20682,9 +20680,6 @@ function resolveCodexFallbackModels(config, primaryModel) {
20682
20680
  push(serverConfig['AI_TERMINAL_CODEX_FALLBACK_MODEL'] || process.env.AI_TERMINAL_CODEX_FALLBACK_MODEL);
20683
20681
  normalizeCodexModelList(serverConfig['AI_DASHBOARD_CODEX_FALLBACK_MODELS'] || process.env.AI_DASHBOARD_CODEX_FALLBACK_MODELS).forEach(push);
20684
20682
  push(serverConfig['AI_DASHBOARD_CODEX_FALLBACK_MODEL'] || process.env.AI_DASHBOARD_CODEX_FALLBACK_MODEL);
20685
- if (!models.length) {
20686
- push(DEFAULT_CODEX_FALLBACK_MODEL);
20687
- }
20688
20683
  return models;
20689
20684
  }
20690
20685
  var CODEX_THOUGHT_LEVEL_VALUES = ['minimal', 'low', 'medium', 'high', 'xhigh'];
@@ -20740,7 +20735,7 @@ function resolveCodexSettings(options) {
20740
20735
  }
20741
20736
  var model = normalizeOptionalString(options === null || options === void 0 ? void 0 : options.model) || resolveCodexModel();
20742
20737
  var fallbackModels = resolveCodexFallbackModels({ fallbackModels: options === null || options === void 0 ? void 0 : options.fallbackModels }, model);
20743
- return __assign(__assign({ apiKey: apiKey, baseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined, model: model }, (fallbackModels.length ? { fallbackModel: fallbackModels[0], fallbackModels: fallbackModels } : {})), { maxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES), retryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS) });
20738
+ return __assign(__assign(__assign({ apiKey: apiKey, baseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined }, (model ? { model: model } : {})), (fallbackModels.length ? { fallbackModel: fallbackModels[0], fallbackModels: fallbackModels } : {})), { maxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES), retryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS) });
20744
20739
  }
20745
20740
  function buildAssistantCodexClientCacheKey(config) {
20746
20741
  var _a, _b;