@kb-labs/core-state-daemon 2.119.0 → 2.119.1-canary.b53bbee1d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.cjs.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/manifest.js.map +1 -1
- package/dist/manifest.json +22 -0
- package/package.json +11 -11
- package/dist/bin.d.cts +0 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../home/runner/work/kb-labs/kb-labs/plugins/state/daemon/src/server.ts","../../home/runner/work/kb-labs/kb-labs/plugins/state/daemon/src/bootstrap.ts"],"names":[],"mappings":";;;;;;;;;;AA4BA,SAAS,oBAAA,GAAuC;AAC9C,EAAA,OAAO,mBAAA,CAAoB,IAAI,aAAA,EAAc,EAAG;AAAA,IAC9C,aAAA,EAAe,SAAA;AAAA,IACf,SAAA,EAAW,cAAA;AAAA,IACX,UAAA,EAAY,CAAA,MAAA,EAAS,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,IAChC,KAAA,EAAO;AAAA,GACR,CAAA;AACH;AAEO,IAAM,oBAAN,MAAwB;AAAA,EAW7B,WAAA,CAA6B,MAAA,GAA4B,EAAC,EAAG;AAAhC,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAC3B,IAAA,IAAA,CAAK,MAAA,GAAS,mBAAA,CAAoB,MAAA,CAAO,MAAA,IAAU,sBAAqB,EAAG;AAAA,MACzE,aAAA,EAAe,SAAA;AAAA,MACf,SAAA,EAAW,cAAA;AAAA,MACX,UAAA,EAAY,CAAA,MAAA,EAAS,OAAA,CAAQ,GAAG,CAAA,CAAA;AAAA,MAChC,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AAAA,EAP6B,MAAA;AAAA,EAVZ,MAAA,GAAS,IAAI,mBAAA,EAAoB;AAAA,EACjC,aAAA,GAAgB,IAAI,0BAAA,CAA2B;AAAA,IAC9D,SAAA,EAAW,cAAA;AAAA,IACX,WAAA,EAAa,cAAA;AAAA,IACb,OAAA,EAAS,OAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACb,CAAA;AAAA,EACgB,MAAA;AAAA,EACT,MAAA,GAAiC,IAAA;AAAA,EAWzC,MAAM,KAAA,GAAuB;AAC3B,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAA,IAAQ,IAAA;AACjC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,IAAA,IAAQ,WAAA;AAEjC,IAAA,MAAM,SAAS,OAAA,CAAQ;AAAA,MACrB,MAAA,EAAQ,KAAA;AAAA,MACR,SAAA,EAAW;AAAA,KACZ,CAAA;AAED,IAAA,MAAA,CAAO,OAAA,CAAQ,WAAA,EAAa,OAAO,OAAA,EAAS,KAAA,KAAU;AACpD,MAAA,MAAM,SAAA,GACH,OAAA,CAAQ,OAAA,CAAQ,cAAc,KAA4B,UAAA,EAAW;AACxE,MAAA,MAAM,OAAA,GACH,OAAA,CAAQ,OAAA,CAAQ,YAAY,KAA4B,UAAA,EAAW;AAEtE,MAAA,OAAA,CAAQ,EAAA,GAAK,SAAA;AACb,MAAA,KAAA,CAAM,MAAA,CAAO,gBAAgB,SAAS,CAAA;AACtC,MAAA,KAAA,CAAM,MAAA,CAAO,cAAc,OAAO,CAAA;AAElC,MAAA,OAAA,CAAQ,QAAA,GAAW,gBAAA,CAAiB,IAAA,CAAK,MAAA,EAAQ;AAAA,QAC/C,SAAA,EAAW,cAAA;AAAA,QACX,KAAA,EAAO,SAAA;AAAA,QACP,SAAA,EAAW,cAAA;AAAA,QACX,SAAA;AAAA,QACA,OAAA;AAAA,QACA,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,KAAK,OAAA,CAAQ,GAAA;AAAA,QACb,SAAA,EAAW;AAAA,OACZ,CAAA;AACD,MAAA,OAAA,CAAQ,QAAA,CAAS,MAAM,sBAAsB,CAAA;AAE7C,MAAA,IAAI,OAAA,CAAQ,WAAW,SAAA,EAAW;AAChC,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,MACvB;AAAA,IACF,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,OAAA,CAAQ,YAAA,EAAc,OAAO,OAAA,EAAS,KAAA,KAAU;AACrD,MAAA,MAAM,SAAS,OAAA,CAAQ,QAAA;AACvB,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA;AAAA,MACF;AAEA,MAAA,MAAA,CAAO,KAAK,wBAAA,EAA0B;AAAA,QACpC,oBAAoB,KAAA,CAAM;AAAA,OAC3B,CAAA;AAAA,IACH,CAAC,CAAA;AACD,IAAA,MAAA,CAAO,OAAA,CAAQ,QAAA,EAAU,OAAO,QAAA,EAAU,OAAO,OAAA,KAAY;AAC3D,MAAA,KAAA,CAAM,MAAA,CAAO,+BAA+B,GAAG,CAAA;AAC/C,MAAA,KAAA,CAAM,MAAA;AAAA,QACJ,8BAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,KAAA,CAAM,MAAA,CAAO,gCAAgC,cAAc,CAAA;AAC3D,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAM,gBAAgB,MAAA,EAAQ;AAAA,MAC5B,KAAA,EAAO,sBAAA;AAAA,MACP,WAAA,EAAa,4DAAA;AAAA,MACb,OAAA,EAAS,OAAA;AAAA,MACT,OAAA,EAAS,CAAC,EAAE,GAAA,EAAK,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,WAAA,EAAa,WAAA,EAAa,CAAA;AAAA,MACrE,EAAA,EAAI;AAAA,KACL,CAAA;AAED,IAAA,IAAA,CAAK,aAAA,CAAc,SAAS,MAAM,CAAA;AAClC,IAAA,IAAA,CAAK,eAAe,MAAM,CAAA;AAC1B,IAAA,IAAA,CAAK,aAAA,CAAc,eAAA,CAAgB,iBAAA,EAAmB,CAAA,EAAG,IAAI,CAAA;AAC7D,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAEd,IAAA,MAAM,MAAA,CAAO,MAAA,CAAO,gBAAA,CAAiB,IAAA,EAAM,IAAI,CAAC,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,IAAA,GAAsB;AAC1B,IAAA,MAAM,IAAA,CAAK,OAAO,IAAA,EAAK;AACvB,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,IAAA,CAAK,OAAO,KAAA,EAAM;AACxB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AAAA,IAChB;AAAA,EACF;AAAA,EAEQ,eAAA,GAAkB;AACxB,IAAA,OAAO,KAAK,aAAA,CAAc,gBAAA;AAAA,MAAiB,cAAA;AAAA,MAAgB,MACzD,IAAA,CAAK,MAAA,CAAO,SAAA;AAAU,KACxB;AAAA,EACF;AAAA,EAEQ,cAAA,GAAiB;AACvB,IAAA,OAAO,KAAK,aAAA,CAAc,gBAAA;AAAA,MAAiB,aAAA;AAAA,MAAe,MACxD,IAAA,CAAK,MAAA,CAAO,QAAA;AAAS,KACvB;AAAA,EACF;AAAA,EAEQ,eAAe,MAAA,EAA+B;AACpD,IAAA,MAAA,CAAO,GAAA,CAAI,SAAA,EAAW,YAAY,IAAA,CAAK,iBAAiB,CAAA;AAExD,IAAA,MAAA,CAAO,GAAA,CAAI,UAAU,YAAY;AAC/B,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,EAAgB;AAC1C,MAAA,MAAM,QAAA,GAAW,OAAO,MAAA,KAAW,IAAA;AACnC,MAAA,OAAO,0BAAA,CAA2B;AAAA,QAChC,KAAA,EAAO,OAAO,MAAA,KAAW,IAAA;AAAA,QACzB,MAAA,EAAQ,WAAW,UAAA,GAAa,OAAA;AAAA,QAChC,MAAA,EAAQ,QAAA,GAAW,CAAA,aAAA,EAAgB,MAAA,CAAO,MAAM,CAAA,CAAA,GAAK,OAAA;AAAA,QACrD,UAAA,EAAY;AAAA,UACV,WAAA,EAAa;AAAA,YACX,KAAA,EAAO,OAAO,MAAA,KAAW,IAAA;AAAA,YACzB,QAAQ,MAAA,CAAO;AAAA;AACjB;AACF,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,GAAA,CAAI,QAAA,EAAU,YAAY,IAAA,CAAK,gBAAgB,CAAA;AAEtD,IAAA,MAAA,CAAO,GAAA,CAAI,UAAA,EAAY,OAAO,QAAA,EAAU,KAAA,KAAU;AAChD,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,EAAgB;AAC1C,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,cAAA,EAAe;AACxC,MAAA,KAAA,CAAM,MAAA,CAAO,gBAAgB,0CAA0C,CAAA;AACvE,MAAA,OAAO,KAAK,aAAA,CAAc,uBAAA;AAAA,QACxB,qBAAA,CAAsB,OAAO,MAAM,CAAA;AAAA,QACnC,uBAAuB,KAAK;AAAA,OAC9B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,GAAA;AAAA,MAAI,yBAAA;AAAA,MAA2B,YACpC,IAAA,CAAK,aAAA,CAAc,aAAA;AAAc,KACnC;AAEA,IAAA,MAAA,CAAO,GAAA,CAAI,yBAAyB,YAAY;AAC9C,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,eAAA,EAAgB;AAC1C,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,cAAA,EAAe;AAExC,MAAA,OAAO,IAAA,CAAK,cAAc,WAAA,CAAY;AAAA,QACpC,MAAA,EAAQ,qBAAA,CAAsB,MAAA,CAAO,MAAM,CAAA;AAAA,QAC3C,MAAA,EAAQ,kBAAkB,MAAM,CAAA;AAAA,QAChC,IAAA,EAAM;AAAA,UACJ,qBAAA,EAAuB,SAAA;AAAA,UACvB,aAAA,EAAe,QAAA;AAAA,UACf,cAAc,KAAA,CAAM,YAAA;AAAA,UACpB,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,SAAS,KAAA,CAAM,OAAA;AAAA,UACf,UAAU,KAAA,CAAM,QAAA;AAAA,UAChB,WAAW,KAAA,CAAM;AAAA;AACnB,OACD,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,GAAA,CAAI,aAAA,EAAe,OAAO,OAAA,EAAS,KAAA,KAAU;AAClD,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,aAAA,CAAc,gBAAA;AAAA,QAAiB,WAAA;AAAA,QAAa,MACnE,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAG;AAAA,OACrB;AAEA,MAAA,IAAI,UAAU,IAAA,EAAM;AAClB,QAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,QAAA,OAAO,IAAA;AAAA,MACT;AAEA,MAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,MAAA,OAAO,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,IAC7B,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,GAAA,CAAI,aAAA,EAAe,OAAO,OAAA,EAAS,KAAA,KAAU;AAClD,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,OAAA,CAAQ,IAAA;AAC/B,MAAA,MAAM,KAAK,aAAA,CAAc,gBAAA;AAAA,QAAiB,WAAA;AAAA,QAAa,MACrD,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,OAAO,GAAG;AAAA,OACjC;AACA,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,GAAA,CAAI,uBAAA,EAAyB,OAAO,OAAA,EAAS,KAAA,KAAU;AAC5D,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,OAAA,CAAQ,IAAA;AAC/B,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,aAAA,CAAc,gBAAA;AAAA,QACxC,sBAAA;AAAA,QACA,MAAM,IAAA,CAAK,MAAA,CAAO,cAAA,CAAe,GAAA,EAAK,OAAO,GAAG;AAAA,OAClD;AACA,MAAA,KAAA,CAAM,IAAA,CAAK,QAAA,GAAW,GAAA,GAAM,GAAG,CAAA;AAC/B,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,GAAA,CAAI,kBAAA,EAAoB,OAAO,OAAA,EAAS,KAAA,KAAU;AACvD,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,EAAE,KAAA,EAAO,MAAA,EAAO,GAAI,OAAA,CAAQ,IAAA;AAIlC,MAAA,MAAM,KAAK,aAAA,CAAc,gBAAA;AAAA,QAAiB,YAAA;AAAA,QAAc,MACtD,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,GAAA,EAAK,OAAO,MAAM;AAAA,OACrC;AACA,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,MAAA,CAAO,kBAAA,EAAoB,OAAO,OAAA,EAAS,KAAA,KAAU;AAC1D,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,EAAE,MAAA,EAAO,GAAI,OAAA,CAAQ,IAAA;AAC3B,MAAA,MAAM,KAAK,aAAA,CAAc,gBAAA;AAAA,QAAiB,YAAA;AAAA,QAAc,MACtD,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,KAAK,MAAM;AAAA,OAC9B;AACA,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,GAAA,CAAI,mBAAA,EAAqB,OAAO,OAAA,EAAS,KAAA,KAAU;AACxD,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,QAAQ,OAAA,CAAQ,KAAA;AACtB,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,aAAA,CAAc,gBAAA;AAAA,QACvC,qBAAA;AAAA,QACA,MACE,IAAA,CAAK,MAAA,CAAO,aAAA,CAAc,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC;AAAA,OACvE;AACA,MAAA,KAAA,CAAM,KAAK,kBAAkB,CAAA;AAC7B,MAAA,OAAO,OAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,MAAA,CAAO,aAAA,EAAe,OAAO,OAAA,EAAS,KAAA,KAAU;AACrD,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,OAAA,CAAQ,MAAA;AACxB,MAAA,MAAM,KAAK,aAAA,CAAc,gBAAA;AAAA,QAAiB,cAAA;AAAA,QAAgB,MACxD,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,GAAG;AAAA,OACxB;AACA,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAA,CAAO,IAAA,CAAK,cAAA,EAAgB,OAAO,OAAA,EAAS,KAAA,KAAU;AACpD,MAAA,MAAM,OAAA,GAAW,QAAQ,KAAA,CAA+B,OAAA;AACxD,MAAA,MAAM,KAAK,aAAA,CAAc,gBAAA;AAAA,QAAiB,aAAA;AAAA,QAAe,MACvD,IAAA,CAAK,MAAA,CAAO,KAAA,CAAM,OAAO;AAAA,OAC3B;AACA,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA,OAAO,IAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH;AACF;AAEA,SAAS,sBACP,MAAA,EACqB;AACrB,EAAA,IAAI,WAAW,IAAA,EAAM;AACnB,IAAA,OAAO,SAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,OAAO,UAAA;AAAA,EACT;AACA,EAAA,OAAO,WAAA;AACT;AAEA,SAAS,kBACP,MAAA,EACsB;AACtB,EAAA,OAAO;AAAA,IACL;AAAA,MACE,EAAA,EAAI,cAAA;AAAA,MACJ,MAAA,EACE,OAAO,MAAA,KAAW,IAAA,GACd,OACA,MAAA,CAAO,MAAA,KAAW,aAChB,MAAA,GACA,OAAA;AAAA,MACR,OAAA,EAAS,CAAA,iBAAA,EAAoB,MAAA,CAAO,MAAM,CAAA;AAAA;AAC5C,GACF;AACF;AAEA,SAAS,uBACP,KAAA,EACU;AACV,EAAA,OAAO;AAAA,IACL,4EAAA;AAAA,IACA,yCAAA;AAAA,IACA,UAAA,CAAW,4BAAA,EAA8B,KAAA,CAAM,YAAY,CAAA;AAAA,IAC3D,6EAAA;AAAA,IACA,sCAAA;AAAA,IACA,UAAA,CAAW,yBAAA,EAA2B,KAAA,CAAM,SAAS,CAAA;AAAA,IACrD,4EAAA;AAAA,IACA,2CAAA;AAAA,IACA,UAAA,CAAW,8BAAA,EAAgC,KAAA,CAAM,SAAS;AAAA,GAC5D;AACF;AC5UA,eAAsB,SAAA,CAAU,IAAA,GAAe,OAAA,CAAQ,GAAA,EAAI,EAAkB;AAC3E,EAAA,MAAM,UAAA,CAAW;AAAA,IACf,KAAA,EAAO,cAAA;AAAA,IACP,QAAA,EAAU,IAAA;AAAA,IACV,WAAA,EAAa,IAAA;AAAA,IACb,UAAA,EAAY,sBAAA;AAAA,IACZ,WAAA,EAAa,WAAA;AAAA,IACb,UAAA,EAAY,sBAAA;AAAA,IACZ,QAAA,EAAU;AAAA,MACR,cAAc,gBAAA;AAAiB,KACjC;AAAA,IACA,MAAM,KAAA,CAAM,EAAE,IAAA,EAAM,IAAA,EAAM,QAAO,EAAG;AAClC,MAAA,MAAM,MAAA,GAAS,IAAI,iBAAA,CAAkB;AAAA,QACnC,IAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,MAAM,OAAO,KAAA,EAAM;AACnB,MAAA,OAAO,MAAM,OAAO,IAAA,EAAK;AAAA,IAC3B;AAAA,GACD,CAAA;AACH","file":"index.js","sourcesContent":["import Fastify, { type FastifyInstance } from \"fastify\";\nimport { InMemoryStateBroker } from \"@kb-labs/core-state-broker\";\nimport {\n createContextLogger,\n type IContextLogger,\n type ILogger,\n} from \"@kb-labs/core-platform\";\nimport { ConsoleLogger } from \"@kb-labs/core-platform/inmemory\";\nimport {\n createHttpLogger,\n HttpObservabilityCollector,\n createServiceReadyResponse,\n getListenOptions,\n metricLine,\n registerOpenAPI,\n} from \"@kb-labs/shared-http\";\nimport type {\n ObservabilityCheck,\n ServiceHealthStatus,\n} from \"@kb-labs/core-contracts\";\nimport { randomUUID } from \"node:crypto\";\n\nexport interface StateDaemonConfig {\n port?: number;\n host?: string;\n logger?: ILogger;\n}\n\nfunction createFallbackLogger(): IContextLogger {\n return createContextLogger(new ConsoleLogger(), {\n applicationId: \"kb-labs\",\n serviceId: \"state-daemon\",\n instanceId: `local:${process.pid}`,\n layer: \"service\",\n });\n}\n\nexport class StateDaemonServer {\n private readonly broker = new InMemoryStateBroker();\n private readonly observability = new HttpObservabilityCollector({\n serviceId: \"state-daemon\",\n serviceType: \"state-daemon\",\n version: \"1.2.0\",\n logsSource: \"state-daemon\",\n });\n private readonly logger: IContextLogger;\n private server: FastifyInstance | null = null;\n\n constructor(private readonly config: StateDaemonConfig = {}) {\n this.logger = createContextLogger(config.logger ?? createFallbackLogger(), {\n applicationId: \"kb-labs\",\n serviceId: \"state-daemon\",\n instanceId: `local:${process.pid}`,\n layer: \"service\",\n });\n }\n\n async start(): Promise<void> {\n const port = this.config.port ?? 7777;\n const host = this.config.host ?? \"localhost\";\n\n const server = Fastify({\n logger: false,\n bodyLimit: 1048576,\n });\n\n server.addHook(\"onRequest\", async (request, reply) => {\n const requestId =\n (request.headers[\"x-request-id\"] as string | undefined) || randomUUID();\n const traceId =\n (request.headers[\"x-trace-id\"] as string | undefined) || randomUUID();\n\n request.id = requestId;\n reply.header(\"X-Request-Id\", requestId);\n reply.header(\"X-Trace-Id\", traceId);\n\n request.kbLogger = createHttpLogger(this.logger, {\n serviceId: \"state-daemon\",\n layer: \"service\",\n component: \"http-request\",\n requestId,\n traceId,\n method: request.method,\n url: request.url,\n operation: \"http.request\",\n });\n request.kbLogger.debug(\"HTTP request started\");\n\n if (request.method === \"OPTIONS\") {\n reply.code(204).send();\n }\n });\n server.addHook(\"onResponse\", async (request, reply) => {\n const logger = request.kbLogger;\n if (!logger) {\n return;\n }\n\n logger.info(\"HTTP request completed\", {\n \"http.status_code\": reply.statusCode,\n });\n });\n server.addHook(\"onSend\", async (_request, reply, payload) => {\n reply.header(\"Access-Control-Allow-Origin\", \"*\");\n reply.header(\n \"Access-Control-Allow-Methods\",\n \"GET, PUT, DELETE, POST, OPTIONS\",\n );\n reply.header(\"Access-Control-Allow-Headers\", \"Content-Type\");\n return payload;\n });\n\n await registerOpenAPI(server, {\n title: \"KB Labs State Daemon\",\n description: \"State broker service for persistent cross-invocation state\",\n version: \"1.2.0\",\n servers: [{ url: `http://${host}:${port}`, description: \"Local dev\" }],\n ui: false,\n });\n\n this.observability.register(server);\n this.registerRoutes(server);\n this.observability.recordOperation(\"state.bootstrap\", 0, \"ok\");\n this.server = server;\n\n await server.listen(getListenOptions(port, host));\n }\n\n async stop(): Promise<void> {\n await this.broker.stop();\n if (this.server) {\n await this.server.close();\n this.server = null;\n }\n }\n\n private getBrokerHealth() {\n return this.observability.observeOperation(\"state.health\", () =>\n this.broker.getHealth(),\n );\n }\n\n private getBrokerStats() {\n return this.observability.observeOperation(\"state.stats\", () =>\n this.broker.getStats(),\n );\n }\n\n private registerRoutes(server: FastifyInstance): void {\n server.get(\"/health\", async () => this.getBrokerHealth());\n\n server.get(\"/ready\", async () => {\n const health = await this.getBrokerHealth();\n const degraded = health.status !== \"ok\";\n return createServiceReadyResponse({\n ready: health.status === \"ok\",\n status: degraded ? \"degraded\" : \"ready\",\n reason: degraded ? `state_broker_${health.status}` : \"ready\",\n components: {\n stateBroker: {\n ready: health.status === \"ok\",\n status: health.status,\n },\n },\n });\n });\n\n server.get(\"/stats\", async () => this.getBrokerStats());\n\n server.get(\"/metrics\", async (_request, reply) => {\n const health = await this.getBrokerHealth();\n const stats = await this.getBrokerStats();\n reply.header(\"Content-Type\", \"text/plain; version=0.0.4; charset=utf-8\");\n return this.observability.renderPrometheusMetrics(\n mapBrokerHealthStatus(health.status),\n buildBrokerMetricLines(stats),\n );\n });\n\n server.get(\"/observability/describe\", async () =>\n this.observability.buildDescribe(),\n );\n\n server.get(\"/observability/health\", async () => {\n const health = await this.getBrokerHealth();\n const stats = await this.getBrokerStats();\n\n return this.observability.buildHealth({\n status: mapBrokerHealthStatus(health.status),\n checks: buildBrokerChecks(health),\n meta: {\n serviceHealthEndpoint: \"/health\",\n statsEndpoint: \"/stats\",\n totalEntries: stats.totalEntries,\n totalSize: stats.totalSize,\n hitRate: stats.hitRate,\n missRate: stats.missRate,\n evictions: stats.evictions,\n },\n });\n });\n\n server.get(\"/state/:key\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const value = await this.observability.observeOperation(\"state.get\", () =>\n this.broker.get(key),\n );\n\n if (value === null) {\n reply.code(404);\n return null;\n }\n\n reply.type(\"application/json\");\n return JSON.stringify(value);\n });\n\n server.put(\"/state/:key\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { value, ttl } = request.body as { value: unknown; ttl?: number };\n await this.observability.observeOperation(\"state.set\", () =>\n this.broker.set(key, value, ttl),\n );\n reply.code(204);\n return null;\n });\n\n server.put(\"/state/:key/if-absent\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { value, ttl } = request.body as { value: unknown; ttl?: number };\n const inserted = await this.observability.observeOperation(\n \"state.setIfNotExists\",\n () => this.broker.setIfNotExists(key, value, ttl),\n );\n reply.code(inserted ? 204 : 409);\n return null;\n });\n\n server.put(\"/state/:key/zset\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { score, member } = request.body as {\n score: number;\n member: string;\n };\n await this.observability.observeOperation(\"state.zadd\", () =>\n this.broker.zadd(key, score, member),\n );\n reply.code(204);\n return null;\n });\n\n server.delete(\"/state/:key/zset\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { member } = request.body as { member: string };\n await this.observability.observeOperation(\"state.zrem\", () =>\n this.broker.zrem(key, member),\n );\n reply.code(204);\n return null;\n });\n\n server.get(\"/state/:key/range\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const query = request.query as { min?: string; max?: string };\n const members = await this.observability.observeOperation(\n \"state.zrangebyscore\",\n () =>\n this.broker.zrangebyscore(key, Number(query.min), Number(query.max)),\n );\n reply.type(\"application/json\");\n return members;\n });\n\n server.delete(\"/state/:key\", async (request, reply) => {\n const { key } = request.params as { key: string };\n await this.observability.observeOperation(\"state.delete\", () =>\n this.broker.delete(key),\n );\n reply.code(204);\n return null;\n });\n\n server.post(\"/state/clear\", async (request, reply) => {\n const pattern = (request.query as { pattern?: string }).pattern;\n await this.observability.observeOperation(\"state.clear\", () =>\n this.broker.clear(pattern),\n );\n reply.code(204);\n return null;\n });\n }\n}\n\nfunction mapBrokerHealthStatus(\n status: \"ok\" | \"degraded\" | \"shutting_down\",\n): ServiceHealthStatus {\n if (status === \"ok\") {\n return \"healthy\";\n }\n if (status === \"degraded\") {\n return \"degraded\";\n }\n return \"unhealthy\";\n}\n\nfunction buildBrokerChecks(\n health: Awaited<ReturnType<InMemoryStateBroker[\"getHealth\"]>>,\n): ObservabilityCheck[] {\n return [\n {\n id: \"state-broker\",\n status:\n health.status === \"ok\"\n ? \"ok\"\n : health.status === \"degraded\"\n ? \"warn\"\n : \"error\",\n message: `Broker status is ${health.status}`,\n },\n ];\n}\n\nfunction buildBrokerMetricLines(\n stats: Awaited<ReturnType<InMemoryStateBroker[\"getStats\"]>>,\n): string[] {\n return [\n \"# HELP state_broker_entries_total Total entries stored by the state broker\",\n \"# TYPE state_broker_entries_total gauge\",\n metricLine(\"state_broker_entries_total\", stats.totalEntries),\n \"# HELP state_broker_size_bytes Estimated total size of state broker entries\",\n \"# TYPE state_broker_size_bytes gauge\",\n metricLine(\"state_broker_size_bytes\", stats.totalSize),\n \"# HELP state_broker_evictions_total Number of evicted state broker entries\",\n \"# TYPE state_broker_evictions_total gauge\",\n metricLine(\"state_broker_evictions_total\", stats.evictions),\n ];\n}\n","import { makeAssemblyHook } from \"@kb-labs/plugin-runtime\";\nimport { runService } from \"@kb-labs/shared-daemon\";\nimport { StateDaemonServer } from \"./server.js\";\n\nexport async function bootstrap(_cwd: string = process.cwd()): Promise<void> {\n await runService({\n appId: \"state-daemon\",\n startDir: _cwd,\n defaultPort: 7777,\n portEnvVar: \"KB_STATE_DAEMON_PORT\",\n defaultHost: \"localhost\",\n hostEnvVar: \"KB_STATE_DAEMON_HOST\",\n platform: {\n assemblyHook: makeAssemblyHook(),\n },\n async setup({ port, host, logger }) {\n const server = new StateDaemonServer({\n port,\n host,\n logger,\n });\n await server.start();\n return () => server.stop();\n },\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/server.ts","../src/bootstrap.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import Fastify, { type FastifyInstance } from \"fastify\";\nimport { InMemoryStateBroker } from \"@kb-labs/core-state-broker\";\nimport {\n createContextLogger,\n type IContextLogger,\n type ILogger,\n} from \"@kb-labs/core-platform\";\nimport { ConsoleLogger } from \"@kb-labs/core-platform/inmemory\";\nimport {\n createHttpLogger,\n HttpObservabilityCollector,\n createServiceReadyResponse,\n getListenOptions,\n metricLine,\n registerOpenAPI,\n} from \"@kb-labs/shared-http\";\nimport type {\n ObservabilityCheck,\n ServiceHealthStatus,\n} from \"@kb-labs/core-contracts\";\nimport { randomUUID } from \"node:crypto\";\n\nexport interface StateDaemonConfig {\n port?: number;\n host?: string;\n logger?: ILogger;\n}\n\nfunction createFallbackLogger(): IContextLogger {\n return createContextLogger(new ConsoleLogger(), {\n applicationId: \"kb-labs\",\n serviceId: \"state-daemon\",\n instanceId: `local:${process.pid}`,\n layer: \"service\",\n });\n}\n\nexport class StateDaemonServer {\n private readonly broker = new InMemoryStateBroker();\n private readonly observability = new HttpObservabilityCollector({\n serviceId: \"state-daemon\",\n serviceType: \"state-daemon\",\n version: \"1.2.0\",\n logsSource: \"state-daemon\",\n });\n private readonly logger: IContextLogger;\n private server: FastifyInstance | null = null;\n\n constructor(private readonly config: StateDaemonConfig = {}) {\n this.logger = createContextLogger(config.logger ?? createFallbackLogger(), {\n applicationId: \"kb-labs\",\n serviceId: \"state-daemon\",\n instanceId: `local:${process.pid}`,\n layer: \"service\",\n });\n }\n\n async start(): Promise<void> {\n const port = this.config.port ?? 7777;\n const host = this.config.host ?? \"localhost\";\n\n const server = Fastify({\n logger: false,\n bodyLimit: 1048576,\n });\n\n server.addHook(\"onRequest\", async (request, reply) => {\n const requestId =\n (request.headers[\"x-request-id\"] as string | undefined) || randomUUID();\n const traceId =\n (request.headers[\"x-trace-id\"] as string | undefined) || randomUUID();\n\n request.id = requestId;\n reply.header(\"X-Request-Id\", requestId);\n reply.header(\"X-Trace-Id\", traceId);\n\n request.kbLogger = createHttpLogger(this.logger, {\n serviceId: \"state-daemon\",\n layer: \"service\",\n component: \"http-request\",\n requestId,\n traceId,\n method: request.method,\n url: request.url,\n operation: \"http.request\",\n });\n request.kbLogger.debug(\"HTTP request started\");\n\n if (request.method === \"OPTIONS\") {\n reply.code(204).send();\n }\n });\n server.addHook(\"onResponse\", async (request, reply) => {\n const logger = request.kbLogger;\n if (!logger) {\n return;\n }\n\n logger.info(\"HTTP request completed\", {\n \"http.status_code\": reply.statusCode,\n });\n });\n server.addHook(\"onSend\", async (_request, reply, payload) => {\n reply.header(\"Access-Control-Allow-Origin\", \"*\");\n reply.header(\n \"Access-Control-Allow-Methods\",\n \"GET, PUT, DELETE, POST, OPTIONS\",\n );\n reply.header(\"Access-Control-Allow-Headers\", \"Content-Type\");\n return payload;\n });\n\n await registerOpenAPI(server, {\n title: \"KB Labs State Daemon\",\n description: \"State broker service for persistent cross-invocation state\",\n version: \"1.2.0\",\n servers: [{ url: `http://${host}:${port}`, description: \"Local dev\" }],\n ui: false,\n });\n\n this.observability.register(server);\n this.registerRoutes(server);\n this.observability.recordOperation(\"state.bootstrap\", 0, \"ok\");\n this.server = server;\n\n await server.listen(getListenOptions(port, host));\n }\n\n async stop(): Promise<void> {\n await this.broker.stop();\n if (this.server) {\n await this.server.close();\n this.server = null;\n }\n }\n\n private getBrokerHealth() {\n return this.observability.observeOperation(\"state.health\", () =>\n this.broker.getHealth(),\n );\n }\n\n private getBrokerStats() {\n return this.observability.observeOperation(\"state.stats\", () =>\n this.broker.getStats(),\n );\n }\n\n private registerRoutes(server: FastifyInstance): void {\n server.get(\"/health\", async () => this.getBrokerHealth());\n\n server.get(\"/ready\", async () => {\n const health = await this.getBrokerHealth();\n const degraded = health.status !== \"ok\";\n return createServiceReadyResponse({\n ready: health.status === \"ok\",\n status: degraded ? \"degraded\" : \"ready\",\n reason: degraded ? `state_broker_${health.status}` : \"ready\",\n components: {\n stateBroker: {\n ready: health.status === \"ok\",\n status: health.status,\n },\n },\n });\n });\n\n server.get(\"/stats\", async () => this.getBrokerStats());\n\n server.get(\"/metrics\", async (_request, reply) => {\n const health = await this.getBrokerHealth();\n const stats = await this.getBrokerStats();\n reply.header(\"Content-Type\", \"text/plain; version=0.0.4; charset=utf-8\");\n return this.observability.renderPrometheusMetrics(\n mapBrokerHealthStatus(health.status),\n buildBrokerMetricLines(stats),\n );\n });\n\n server.get(\"/observability/describe\", async () =>\n this.observability.buildDescribe(),\n );\n\n server.get(\"/observability/health\", async () => {\n const health = await this.getBrokerHealth();\n const stats = await this.getBrokerStats();\n\n return this.observability.buildHealth({\n status: mapBrokerHealthStatus(health.status),\n checks: buildBrokerChecks(health),\n meta: {\n serviceHealthEndpoint: \"/health\",\n statsEndpoint: \"/stats\",\n totalEntries: stats.totalEntries,\n totalSize: stats.totalSize,\n hitRate: stats.hitRate,\n missRate: stats.missRate,\n evictions: stats.evictions,\n },\n });\n });\n\n server.get(\"/state/:key\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const value = await this.observability.observeOperation(\"state.get\", () =>\n this.broker.get(key),\n );\n\n if (value === null) {\n reply.code(404);\n return null;\n }\n\n reply.type(\"application/json\");\n return JSON.stringify(value);\n });\n\n server.put(\"/state/:key\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { value, ttl } = request.body as { value: unknown; ttl?: number };\n await this.observability.observeOperation(\"state.set\", () =>\n this.broker.set(key, value, ttl),\n );\n reply.code(204);\n return null;\n });\n\n server.put(\"/state/:key/if-absent\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { value, ttl } = request.body as { value: unknown; ttl?: number };\n const inserted = await this.observability.observeOperation(\n \"state.setIfNotExists\",\n () => this.broker.setIfNotExists(key, value, ttl),\n );\n reply.code(inserted ? 204 : 409);\n return null;\n });\n\n server.put(\"/state/:key/zset\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { score, member } = request.body as {\n score: number;\n member: string;\n };\n await this.observability.observeOperation(\"state.zadd\", () =>\n this.broker.zadd(key, score, member),\n );\n reply.code(204);\n return null;\n });\n\n server.delete(\"/state/:key/zset\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const { member } = request.body as { member: string };\n await this.observability.observeOperation(\"state.zrem\", () =>\n this.broker.zrem(key, member),\n );\n reply.code(204);\n return null;\n });\n\n server.get(\"/state/:key/range\", async (request, reply) => {\n const { key } = request.params as { key: string };\n const query = request.query as { min?: string; max?: string };\n const members = await this.observability.observeOperation(\n \"state.zrangebyscore\",\n () =>\n this.broker.zrangebyscore(key, Number(query.min), Number(query.max)),\n );\n reply.type(\"application/json\");\n return members;\n });\n\n server.delete(\"/state/:key\", async (request, reply) => {\n const { key } = request.params as { key: string };\n await this.observability.observeOperation(\"state.delete\", () =>\n this.broker.delete(key),\n );\n reply.code(204);\n return null;\n });\n\n server.post(\"/state/clear\", async (request, reply) => {\n const pattern = (request.query as { pattern?: string }).pattern;\n await this.observability.observeOperation(\"state.clear\", () =>\n this.broker.clear(pattern),\n );\n reply.code(204);\n return null;\n });\n }\n}\n\nfunction mapBrokerHealthStatus(\n status: \"ok\" | \"degraded\" | \"shutting_down\",\n): ServiceHealthStatus {\n if (status === \"ok\") {\n return \"healthy\";\n }\n if (status === \"degraded\") {\n return \"degraded\";\n }\n return \"unhealthy\";\n}\n\nfunction buildBrokerChecks(\n health: Awaited<ReturnType<InMemoryStateBroker[\"getHealth\"]>>,\n): ObservabilityCheck[] {\n return [\n {\n id: \"state-broker\",\n status:\n health.status === \"ok\"\n ? \"ok\"\n : health.status === \"degraded\"\n ? \"warn\"\n : \"error\",\n message: `Broker status is ${health.status}`,\n },\n ];\n}\n\nfunction buildBrokerMetricLines(\n stats: Awaited<ReturnType<InMemoryStateBroker[\"getStats\"]>>,\n): string[] {\n return [\n \"# HELP state_broker_entries_total Total entries stored by the state broker\",\n \"# TYPE state_broker_entries_total gauge\",\n metricLine(\"state_broker_entries_total\", stats.totalEntries),\n \"# HELP state_broker_size_bytes Estimated total size of state broker entries\",\n \"# TYPE state_broker_size_bytes gauge\",\n metricLine(\"state_broker_size_bytes\", stats.totalSize),\n \"# HELP state_broker_evictions_total Number of evicted state broker entries\",\n \"# TYPE state_broker_evictions_total gauge\",\n metricLine(\"state_broker_evictions_total\", stats.evictions),\n ];\n}\n","import { makeAssemblyHook } from \"@kb-labs/plugin-runtime\";\nimport { runService } from \"@kb-labs/shared-daemon\";\nimport { StateDaemonServer } from \"./server.js\";\n\nexport async function bootstrap(_cwd: string = process.cwd()): Promise<void> {\n await runService({\n appId: \"state-daemon\",\n startDir: _cwd,\n defaultPort: 7777,\n portEnvVar: \"KB_STATE_DAEMON_PORT\",\n defaultHost: \"localhost\",\n hostEnvVar: \"KB_STATE_DAEMON_HOST\",\n platform: {\n assemblyHook: makeAssemblyHook(),\n },\n async setup({ port, host, logger }) {\n const server = new StateDaemonServer({\n port,\n host,\n logger,\n });\n await server.start();\n return () => server.stop();\n },\n });\n}\n"]}
|
package/dist/manifest.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["
|
|
1
|
+
{"version":3,"sources":["../src/manifest.ts"],"names":[],"mappings":";AAEO,IAAM,QAAA,GAA4B;AAAA,EACvC,MAAA,EAAQ,cAAA;AAAA,EACR,EAAA,EAAI,cAAA;AAAA,EACJ,IAAA,EAAM,cAAA;AAAA,EACN,OAAA,EAAS,OAAA;AAAA,EACT,WAAA,EAAa,yDAAA;AAAA,EACb,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,cAAA;AAAA,IACP,IAAA,EAAM,IAAA;AAAA,IACN,WAAA,EAAa;AAAA;AAAA;AAAA;AAAA;AAAA,GAKf;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,EAAE,WAAA,EAAa,WAAA,EAAa,SAAS,MAAA,EAAO;AAAA,IAClD,QAAA,EAAU,EAAE,WAAA,EAAa,kBAAA,EAAoB,SAAS,aAAA;AAAc;AAExE;AAEA,IAAO,gBAAA,GAAQ","file":"manifest.js","sourcesContent":["import type { ServiceManifest } from '@kb-labs/plugin-contracts';\n\nexport const manifest: ServiceManifest = {\n schema: 'kb.service/1',\n id: 'state-daemon',\n name: 'State Daemon',\n version: '1.4.0',\n description: 'Distributed state management (State Broker HTTP server)',\n runtime: {\n entry: 'dist/bin.cjs',\n port: 7777,\n healthCheck: '/health',\n // No socket: state-daemon stays on TCP. Its consumers (core/state-broker\n // HTTP backend, rest-api observability) connect via http://localhost:7777\n // directly — not through the gateway/serviceTransport — so a socket-only\n // bind would break them.\n },\n env: {\n PORT: { description: 'HTTP port', default: '7777' },\n NODE_ENV: { description: 'Environment mode', default: 'development' },\n },\n};\n\nexport default manifest;\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "kb.service/1",
|
|
3
|
+
"id": "state-daemon",
|
|
4
|
+
"name": "State Daemon",
|
|
5
|
+
"version": "1.4.0",
|
|
6
|
+
"description": "Distributed state management (State Broker HTTP server)",
|
|
7
|
+
"runtime": {
|
|
8
|
+
"entry": "dist/bin.cjs",
|
|
9
|
+
"port": 7777,
|
|
10
|
+
"healthCheck": "/health"
|
|
11
|
+
},
|
|
12
|
+
"env": {
|
|
13
|
+
"PORT": {
|
|
14
|
+
"description": "HTTP port",
|
|
15
|
+
"default": "7777"
|
|
16
|
+
},
|
|
17
|
+
"NODE_ENV": {
|
|
18
|
+
"description": "Environment mode",
|
|
19
|
+
"default": "development"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kb-labs/core-state-daemon",
|
|
3
3
|
"description": "State daemon server for persistent cross-invocation state",
|
|
4
|
-
"version": "2.119.
|
|
4
|
+
"version": "2.119.1-canary.b53bbee1d",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -23,15 +23,15 @@
|
|
|
23
23
|
"@fastify/swagger-ui": "^5.2.0",
|
|
24
24
|
"fastify": "^5.12.1",
|
|
25
25
|
"fastify-type-provider-zod": "^4.0.2",
|
|
26
|
-
"@kb-labs/core-
|
|
27
|
-
"@kb-labs/core-
|
|
28
|
-
"@kb-labs/core-runtime": "2.119.
|
|
29
|
-
"@kb-labs/core-state-broker": "2.119.
|
|
30
|
-
"@kb-labs/
|
|
31
|
-
"@kb-labs/
|
|
32
|
-
"@kb-labs/plugin-runtime": "2.119.
|
|
33
|
-
"@kb-labs/shared-
|
|
34
|
-
"@kb-labs/shared-
|
|
26
|
+
"@kb-labs/core-platform": "2.119.1-canary.b53bbee1d",
|
|
27
|
+
"@kb-labs/core-contracts": "2.119.1-canary.b53bbee1d",
|
|
28
|
+
"@kb-labs/core-runtime": "2.119.1-canary.b53bbee1d",
|
|
29
|
+
"@kb-labs/core-state-broker": "2.119.1-canary.b53bbee1d",
|
|
30
|
+
"@kb-labs/core-sys": "2.119.1-canary.b53bbee1d",
|
|
31
|
+
"@kb-labs/plugin-contracts": "2.119.1-canary.b53bbee1d",
|
|
32
|
+
"@kb-labs/plugin-runtime": "2.119.1-canary.b53bbee1d",
|
|
33
|
+
"@kb-labs/shared-http": "2.119.1-canary.b53bbee1d",
|
|
34
|
+
"@kb-labs/shared-daemon": "2.119.1-canary.b53bbee1d"
|
|
35
35
|
},
|
|
36
36
|
"devDependencies": {
|
|
37
37
|
"@types/node": "^24.3.3",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"tsup": "^8.5.0",
|
|
40
40
|
"typescript": "^5.6.3",
|
|
41
41
|
"vitest": "^3.2.6",
|
|
42
|
-
"@kb-labs/devkit": "2.119.
|
|
42
|
+
"@kb-labs/devkit": "2.119.1-canary.b53bbee1d"
|
|
43
43
|
},
|
|
44
44
|
"engines": {
|
|
45
45
|
"node": ">=24.0.0",
|
package/dist/bin.d.cts
DELETED