@igniter-js/agents 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/adapters/memory.adapter.ts","../../src/adapters/json-file.adapter.ts"],"names":["join","readFile","writeFile","mkdir"],"mappings":";;;;;;AAsGO,IAAM,2BAAA,GAAN,MAAM,4BAAA,CAAqG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyChH,WAAA,CAAY,OAAA,GAA8C,EAAC,EAAG;AA9B9D;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAiB,cAAA,uBAA6D,GAAA,EAAI;AAOlF;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAiB,SAAA,uBAAgE,GAAA,EAAI;AAOrF;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAiB,MAAA,uBAAmD,GAAA,EAAI;AAiBtE,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,SAAA,EAAW,QAAQ,SAAA,IAAa,SAAA;AAAA,MAChC,WAAA,EAAa,QAAQ,WAAA,IAAe,GAAA;AAAA,MACpC,QAAA,EAAU,QAAQ,QAAA,IAAY;AAAA,KAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,OACL,OAAA,EAC6B;AAC7B,IAAA,OAAO,IAAI,6BAA4B,OAAO,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,QAAQ,KAAA,EAAyB;AACvC,IAAA,OAAO,CAAC,KAAK,OAAA,CAAQ,SAAA,EAAW,GAAG,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,OAAA,GAAyB;AAAA,EAE/B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,UAAA,GAA4B;AAAA,EAElC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,GAAuB;AACrB,IAAA,OAAO,IAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AACrB,IAAA,IAAA,CAAK,OAAO,KAAA,EAAM;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyBA,MAAM,iBACJ,MAAA,EAC2C;AAC3C,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,UAAU,MAAA,CAAO,KAAA,EAAO,OAAO,UAAU,CAAA;AAE/D,IAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,MAAM,oBACJ,MAAA,EACe;AACf,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,UAAU,MAAA,CAAO,KAAA,EAAO,OAAO,UAAU,CAAA;AAE/D,IAAA,IAAA,CAAK,cAAA,CAAe,IAAI,GAAA,EAAK;AAAA,MAC3B,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAA,sBAAe,IAAA;AAAK,KACrB,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAM,YAAY,OAAA,EAAyD;AACzE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,QAAQ,MAAM,CAAA;AAGhD,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,GAAG,CAAA;AACrC,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,GAAW,EAAC;AACZ,MAAA,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AAAA,IAClC;AAGA,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAGrB,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa;AAC9C,MAAA,QAAA,CAAS,OAAO,CAAA,EAAG,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,QAAQ,WAAW,CAAA;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,YACJ,MAAA,EACc;AACd,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,OAAO,MAAM,CAAA;AAE/C,IAAA,IAAI,WAAW,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,GAAG,KAAK,EAAC;AAG3C,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,QAAA,GAAW,SAAS,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,KAAW,OAAO,MAAM,CAAA;AAAA,IAC5D;AAGA,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG;AACpC,MAAA,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,CAAC,MAAA,CAAO,KAAK,CAAA;AAAA,IACzC;AAGA,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,CAAA,MAAM;AAAA,MACxB,EAAA,EAAI,GAAG,CAAA,CAAE,MAAM,IAAI,CAAA,CAAE,SAAA,CAAU,SAAS,CAAA,CAAA;AAAA,MACxC,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,WAAW,CAAA,CAAE;AAAA,KACf,CAAE,CAAA;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAM,SAAS,IAAA,EAA8C;AAC3D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,KAAK,MAAM,CAAA;AAE1C,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AAGzB,IAAA,IAAI,IAAA,CAAK,MAAA,CAAO,IAAA,GAAO,IAAA,CAAK,QAAQ,QAAA,EAAU;AAE5C,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,OAAA,EAAS,CAAA,CAC7C,IAAA,CAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,CAAC,CAAA,CAAE,SAAA,CAAU,OAAA,EAAQ,GAAI,EAAE,CAAC,CAAA,CAAE,SAAA,CAAU,OAAA,EAAS,CAAA;AAErE,MAAA,MAAM,QAAA,GAAW,QAAQ,KAAA,CAAM,CAAA,EAAG,KAAK,MAAA,CAAO,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AAC1E,MAAA,KAAA,MAAW,CAAC,CAAC,CAAA,IAAK,QAAA,EAAU;AAC1B,QAAA,IAAA,CAAK,MAAA,CAAO,OAAO,CAAC,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,SACJ,MAAA,EACoC;AACpC,IAAA,IAAI,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAG3C,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAA,CAAA,KAAK,CAAA,CAAE,MAAA,KAAW,OAAO,MAAM,CAAA;AAAA,IACtD;AAGA,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,WAAA,EAAY;AAC9C,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA;AAAA,QAAO,OACnB,CAAA,CAAE,KAAA,EAAO,WAAA,EAAY,CAAE,SAAS,WAAW;AAAA,OAC7C;AAAA,IACF;AAGA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,CAAU,OAAA,EAAQ,GAAI,CAAA,CAAE,SAAA,CAAU,OAAA,EAAS,CAAA;AAGlE,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG;AACpC,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,QAAQ,MAAA,EAAyD;AACrE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAErC,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,eAAA,CAAgB,MAAA,EAAgB,KAAA,EAA8B;AAClE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAErC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,GAAG,CAAA;AAChC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,MAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAAA,IAC5B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,WAAW,MAAA,EAA+B;AAC9C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AACzC,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AAEhD,IAAA,IAAA,CAAK,MAAA,CAAO,OAAO,OAAO,CAAA;AAC1B,IAAA,IAAA,CAAK,SAAA,CAAU,OAAO,WAAW,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,QAAA,GAA8C;AAClD,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,SAAA,CAAU,MAAA,EAAO,EAAG;AAC9C,MAAA,YAAA,IAAgB,QAAA,CAAS,MAAA;AAAA,IAC3B;AAEA,IAAA,OAAO;AAAA,MACL,kBAAA,EAAoB,KAAK,cAAA,CAAe,IAAA;AAAA,MACxC,YAAA;AAAA,MACA,SAAA,EAAW,KAAK,MAAA,CAAO,IAAA;AAAA,MACvB,SAAA,sBAAe,IAAA;AAAK,KACtB;AAAA,EACF;AACF;AC5XO,IAAM,2BAAA,GAAN,MAAM,4BAAA,CAEb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA6CE,WAAA,CAAY,OAAA,GAA8C,EAAC,EAAG;AAnC9D;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,UAAA,GAAsB,KAAA;AAM9B;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,mBAAA,uBACF,GAAA,EAAI;AAMV;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,cAAA,uBACF,GAAA,EAAI;AAMV;AAAA;AAAA;AAAA;AAAA,IAAA,IAAA,CAAQ,WAAA,uBAAwD,GAAA,EAAI;AAgBlE,IAAA,IAAA,CAAK,OAAA,GAAU;AAAA,MACb,OAAA,EAAS,QAAQ,OAAA,IAAW,wBAAA;AAAA,MAC5B,SAAA,EAAW,QAAQ,SAAA,IAAa,SAAA;AAAA,MAChC,QAAA,EAAU,QAAQ,QAAA,IAAY,IAAA;AAAA,MAC9B,KAAA,EAAO,QAAQ,KAAA,IAAS,KAAA;AAAA,MACxB,WAAA,EAAa,QAAQ,WAAA,IAAe,GAAA;AAAA,MACpC,QAAA,EAAU,QAAQ,QAAA,IAAY;AAAA,KAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,OAAO,OACL,OAAA,EAC6B;AAC7B,IAAA,OAAO,IAAI,6BAA4B,OAAO,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUQ,IAAA,CAAK,SAAiB,IAAA,EAAsB;AAClD,IAAA,IAAI,IAAA,CAAK,QAAQ,KAAA,EAAO;AACtB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAA,EAAI,QAAQ,EAAE,CAAA;AAAA,IACpE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,qBAAA,GAAgC;AACtC,IAAA,OAAOA,SAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,qBAAqB,CAAA;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,aAAA,GAAwB;AAC9B,IAAA,OAAOA,SAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,YAAY,CAAA;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,eAAA,GAA0B;AAChC,IAAA,OAAOA,SAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,OAAA,EAAS,UAAU,CAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAiB,MAAA,EAAwB;AAC/C,IAAA,OAAOA,UAAK,IAAA,CAAK,eAAA,EAAgB,EAAG,CAAA,EAAG,MAAM,CAAA,KAAA,CAAO,CAAA;AAAA,EACtD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,QAAQ,KAAA,EAAyB;AACvC,IAAA,OAAO,CAAC,KAAK,OAAA,CAAQ,SAAA,EAAW,GAAG,KAAK,CAAA,CAAE,KAAK,GAAG,CAAA;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,kBAAA,GAAoC;AAChD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,KAAK,qBAAA,EAAsB;AACxC,MAAA,MAAM,OAAA,GAAU,MAAMC,iBAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAE/B,MAAA,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAC/B,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,QAAA,IAAA,CAAK,mBAAA,CAAoB,IAAI,GAAA,EAAK;AAAA,UAChC,SAAU,KAAA,CAAc,OAAA;AAAA,UACxB,SAAA,EAAW,IAAI,IAAA,CAAM,KAAA,CAAc,SAAS;AAAA,SAC7C,CAAA;AAAA,MACH;AACA,MAAA,IAAA,CAAK,KAAK,uBAAA,EAAyB;AAAA,QACjC,OAAA,EAAS,KAAK,mBAAA,CAAoB;AAAA,OACnC,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AAEZ,MAAA,IAAA,CAAK,KAAK,+CAA+C,CAAA;AAAA,IAC3D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,UAAA,GAA4B;AACxC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,KAAK,aAAA,EAAc;AAChC,MAAA,MAAM,OAAA,GAAU,MAAMA,iBAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAE/B,MAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AACvB,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/C,QAAA,MAAM,IAAA,GAAO,KAAA;AACb,QAAA,IAAA,CAAK,WAAA,CAAY,IAAI,GAAA,EAAK;AAAA,UACxB,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,SAAA,EAAW,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,UAClC,SAAA,EAAW,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA;AAAA,UAClC,cAAc,IAAA,CAAK;AAAA,SACpB,CAAA;AAAA,MACH;AACA,MAAA,IAAA,CAAK,KAAK,cAAA,EAAgB,EAAE,SAAS,IAAA,CAAK,WAAA,CAAY,MAAM,CAAA;AAAA,IAC9D,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,KAAK,sCAAsC,CAAA;AAAA,IAClD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAc,MAAA,EAA+B;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AACzC,MAAA,MAAM,OAAA,GAAU,MAAMA,iBAAA,CAAS,IAAA,EAAM,OAAO,CAAA;AAC5C,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAE/B,MAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AACxC,MAAA,MAAM,WAA8C,IAAA,CAAK,GAAA;AAAA,QACvD,CAAC,GAAA,MAAc;AAAA,UACb,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ,MAAM,GAAA,CAAI,IAAA;AAAA,UACV,SAAS,GAAA,CAAI,OAAA;AAAA,UACb,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS;AAAA,SACnC;AAAA,OACF;AAEA,MAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AACrC,MAAA,IAAA,CAAK,KAAK,iBAAA,EAAmB,EAAE,QAAQ,KAAA,EAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,IACjE,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,IAAA,CAAK,kCAAA,EAAoC,EAAE,MAAA,EAAQ,CAAA;AAAA,IAC1D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,kBAAA,GAAoC;AAChD,IAAA,MAAM,IAAA,GAAO,KAAK,qBAAA,EAAsB;AACxC,IAAA,MAAM,OAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,IAAA,CAAK,mBAAA,CAAoB,SAAQ,EAAG;AAC7D,MAAA,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,QACV,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,WAAA;AAAY,OACzC;AAAA,IACF;AAEA,IAAA,MAAMC,mBAAU,IAAA,EAAM,IAAA,CAAK,UAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AACnD,IAAA,IAAA,CAAK,KAAK,sBAAsB,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,UAAA,GAA4B;AACxC,IAAA,MAAM,IAAA,GAAO,KAAK,aAAA,EAAc;AAChC,IAAA,MAAM,OAA4B,EAAC;AAEnC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,IAAA,CAAK,WAAA,CAAY,SAAQ,EAAG;AACrD,MAAA,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,QACV,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,WAAA,EAAY;AAAA,QACvC,SAAA,EAAW,KAAA,CAAM,SAAA,CAAU,WAAA,EAAY;AAAA,QACvC,cAAc,KAAA,CAAM;AAAA,OACtB;AAAA,IACF;AAEA,IAAA,MAAMA,mBAAU,IAAA,EAAM,IAAA,CAAK,UAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AACnD,IAAA,IAAA,CAAK,KAAK,aAAa,CAAA;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,cAAc,MAAA,EAA+B;AACzD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AACxC,IAAA,MAAM,WAAW,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAG,KAAK,EAAC;AAClD,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AAEzC,IAAA,MAAM,IAAA,GAAO,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAClC,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,MAAM,GAAA,CAAI,IAAA;AAAA,MACV,SAAS,GAAA,CAAI,OAAA;AAAA,MACb,SAAA,EAAW,GAAA,CAAI,SAAA,CAAU,WAAA;AAAY,KACvC,CAAE,CAAA;AAEF,IAAA,MAAMA,mBAAU,IAAA,EAAM,IAAA,CAAK,UAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAC,CAAA;AACnD,IAAA,IAAA,CAAK,KAAK,gBAAA,EAAkB,EAAE,QAAQ,KAAA,EAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,OAAA,GAAyB;AAC7B,IAAA,IAAI;AACF,MAAA,MAAMC,eAAM,IAAA,CAAK,OAAA,CAAQ,SAAS,EAAE,SAAA,EAAW,MAAM,CAAA;AACrD,MAAA,MAAMA,eAAM,IAAA,CAAK,eAAA,IAAmB,EAAE,SAAA,EAAW,MAAM,CAAA;AAEvD,MAAA,MAAM,KAAK,kBAAA,EAAmB;AAC9B,MAAA,MAAM,KAAK,UAAA,EAAW;AAEtB,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA;AAClB,MAAA,IAAA,CAAK,KAAK,wBAAA,EAA0B;AAAA,QAClC,OAAA,EAAS,KAAK,OAAA,CAAQ;AAAA,OACvB,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,IAAA,CAAK,qBAAqB,GAAG,CAAA;AAClC,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,UAAA,GAA4B;AAChC,IAAA,IAAI,KAAK,UAAA,EAAY;AACnB,MAAA,MAAM,KAAK,IAAA,EAAK;AAChB,MAAA,IAAA,CAAK,UAAA,GAAa,KAAA;AAClB,MAAA,IAAA,CAAK,KAAK,cAAc,CAAA;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAA,GAAuB;AACrB,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,IAAA,GAAsB;AAC1B,IAAA,IAAI;AACF,MAAA,MAAM,KAAK,kBAAA,EAAmB;AAC9B,MAAA,MAAM,KAAK,UAAA,EAAW;AAGtB,MAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,cAAA,CAAe,IAAA,EAAK,EAAG;AAC/C,QAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAChC,QAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,UAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAC,CAAA;AAC/C,UAAA,MAAM,IAAA,CAAK,cAAc,YAAY,CAAA;AAAA,QACvC;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,KAAK,yBAAyB,CAAA;AAAA,IACrC,SAAS,GAAA,EAAK;AACZ,MAAA,IAAA,CAAK,IAAA,CAAK,eAAe,GAAG,CAAA;AAC5B,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,KAAA,GAAuB;AAC3B,IAAA,IAAA,CAAK,oBAAoB,KAAA,EAAM;AAC/B,IAAA,IAAA,CAAK,eAAe,KAAA,EAAM;AAC1B,IAAA,IAAA,CAAK,YAAY,KAAA,EAAM;AAEvB,IAAA,IAAI,IAAA,CAAK,QAAQ,QAAA,EAAU;AACzB,MAAA,MAAM,KAAK,IAAA,EAAK;AAAA,IAClB;AAEA,IAAA,IAAA,CAAK,KAAK,kBAAkB,CAAA;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,MAAM,iBACJ,MAAA,EAC2C;AAC3C,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,UAAU,MAAA,CAAO,KAAA,EAAO,OAAO,UAAU,CAAA;AAC/D,IAAA,OAAO,IAAA,CAAK,mBAAA,CAAoB,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,oBACJ,MAAA,EACe;AACf,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,UAAU,MAAA,CAAO,KAAA,EAAO,OAAO,UAAU,CAAA;AAE/D,IAAA,IAAA,CAAK,mBAAA,CAAoB,IAAI,GAAA,EAAK;AAAA,MAChC,SAAS,MAAA,CAAO,OAAA;AAAA,MAChB,SAAA,sBAAe,IAAA;AAAK,KACrB,CAAA;AAED,IAAA,IAAI,IAAA,CAAK,QAAQ,QAAA,EAAU;AACzB,MAAA,MAAM,KAAK,kBAAA,EAAmB;AAAA,IAChC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAsBA,MAAM,YAAY,OAAA,EAAyD;AACzE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,QAAQ,MAAM,CAAA;AAEhD,IAAA,IAAI,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA;AAC1C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,QAAA,GAAW,EAAC;AACZ,MAAA,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAA,EAAK,QAAQ,CAAA;AAAA,IACvC;AAEA,IAAA,QAAA,CAAS,KAAK,OAAO,CAAA;AAGrB,IAAA,IAAI,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,OAAA,CAAQ,WAAA,EAAa;AAC9C,MAAA,QAAA,CAAS,OAAO,CAAA,EAAG,QAAA,CAAS,MAAA,GAAS,IAAA,CAAK,QAAQ,WAAW,CAAA;AAAA,IAC/D;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,QAAA,EAAU;AACzB,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,MAAM,CAAA;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,YACJ,MAAA,EACc;AACd,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,OAAO,MAAM,CAAA;AAG/C,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAG,CAAA,EAAG;AACjC,MAAA,MAAM,IAAA,CAAK,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAAA,IACxC;AAEA,IAAA,IAAI,WAAW,IAAA,CAAK,cAAA,CAAe,GAAA,CAAI,GAAG,KAAK,EAAC;AAGhD,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,QAAA,GAAW,SAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,OAAO,MAAM,CAAA;AAAA,IAC9D;AAGA,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG;AACpC,MAAA,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,CAAC,MAAA,CAAO,KAAK,CAAA;AAAA,IACzC;AAGA,IAAA,OAAO,QAAA,CAAS,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC1B,EAAA,EAAI,GAAG,CAAA,CAAE,MAAM,IAAI,CAAA,CAAE,SAAA,CAAU,SAAS,CAAA,CAAA;AAAA,MACxC,MAAM,CAAA,CAAE,IAAA;AAAA,MACR,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,WAAW,CAAA,CAAE;AAAA,KACf,CAAE,CAAA;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAuBA,MAAM,SAAS,IAAA,EAA8C;AAC3D,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,KAAK,MAAM,CAAA;AAE1C,IAAA,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAA,EAAK,IAAI,CAAA;AAG9B,IAAA,IAAI,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,QAAQ,QAAA,EAAU;AACjD,MAAA,MAAM,UAAU,KAAA,CAAM,IAAA,CAAK,KAAK,WAAA,CAAY,OAAA,EAAS,CAAA,CAClD,IAAA;AAAA,QACC,CAAC,CAAA,EAAG,CAAA,KACF,CAAA,CAAE,CAAC,CAAA,CAAE,SAAA,CAAU,OAAA,EAAQ,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,UAAU,OAAA;AAAQ,OACtD;AAEF,MAAA,MAAM,WAAW,OAAA,CAAQ,KAAA;AAAA,QACvB,CAAA;AAAA,QACA,IAAA,CAAK,WAAA,CAAY,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ;AAAA,OACvC;AACA,MAAA,KAAA,MAAW,CAAC,CAAC,CAAA,IAAK,QAAA,EAAU;AAC1B,QAAA,IAAA,CAAK,WAAA,CAAY,OAAO,CAAC,CAAA;AAAA,MAC3B;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,QAAQ,QAAA,EAAU;AACzB,MAAA,MAAM,KAAK,UAAA,EAAW;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,SACJ,MAAA,EACoC;AACpC,IAAA,IAAI,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,WAAA,CAAY,QAAQ,CAAA;AAGhD,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,OAAO,MAAM,CAAA;AAAA,IACxD;AAGA,IAAA,IAAI,OAAO,MAAA,EAAQ;AACjB,MAAA,MAAM,WAAA,GAAc,MAAA,CAAO,MAAA,CAAO,WAAA,EAAY;AAC9C,MAAA,KAAA,GAAQ,KAAA,CAAM,MAAA;AAAA,QAAO,CAAC,CAAA,KACpB,CAAA,CAAE,OAAO,WAAA,EAAY,CAAE,SAAS,WAAW;AAAA,OAC7C;AAAA,IACF;AAGA,IAAA,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,CAAU,OAAA,EAAQ,GAAI,CAAA,CAAE,SAAA,CAAU,OAAA,EAAS,CAAA;AAGlE,IAAA,IAAI,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG;AACpC,MAAA,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA;AAAA,IACrC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,MAAM,QAAQ,MAAA,EAAyD;AACrE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AACrC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,IAAK,IAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,eAAA,CAAgB,MAAA,EAAgB,KAAA,EAA8B;AAClE,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AAErC,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA;AACrC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,MAAA,IAAA,CAAK,SAAA,uBAAgB,IAAA,EAAK;AAE1B,MAAA,IAAI,IAAA,CAAK,QAAQ,QAAA,EAAU;AACzB,QAAA,MAAM,KAAK,UAAA,EAAW;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,WAAW,MAAA,EAA+B;AAC9C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,MAAM,CAAA;AACzC,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,UAAA,EAAY,MAAM,CAAA;AAEhD,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,OAAO,CAAA;AAC/B,IAAA,IAAA,CAAK,cAAA,CAAe,OAAO,WAAW,CAAA;AAEtC,IAAA,IAAI,IAAA,CAAK,QAAQ,QAAA,EAAU;AACzB,MAAA,MAAM,KAAK,UAAA,EAAW;AAEtB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,GAAO,IAAA,CAAK,gBAAA,CAAiB,MAAM,CAAA;AACzC,QAAA,MAAMF,kBAAS,IAAI,CAAA;AACnB,QAAA,IAAA,CAAK,KAAK,6CAA6C,CAAA;AAAA,MACzD,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBA,MAAM,QAAA,GAA8C;AAClD,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,KAAA,MAAW,QAAA,IAAY,IAAA,CAAK,cAAA,CAAe,MAAA,EAAO,EAAG;AACnD,MAAA,YAAA,IAAgB,QAAA,CAAS,MAAA;AAAA,IAC3B;AAEA,IAAA,OAAO;AAAA,MACL,kBAAA,EAAoB,KAAK,mBAAA,CAAoB,IAAA;AAAA,MAC7C,YAAA;AAAA,MACA,SAAA,EAAW,KAAK,WAAA,CAAY,IAAA;AAAA,MAC5B,SAAA,sBAAe,IAAA;AAAK,KACtB;AAAA,EACF;AACF","file":"index.js","sourcesContent":["/**\n * @fileoverview In-memory adapter for IgniterAgent memory storage.\n * This module provides a simple in-memory implementation of the memory provider.\n * \n * @description\n * The IgniterAgentInMemoryAdapter stores all data in JavaScript Maps,\n * making it ideal for:\n * - Development and testing\n * - Short-lived applications\n * - Prototyping\n * - Demos\n * \n * **Important:** Data is lost when the process restarts. For production use,\n * consider using a persistent adapter like Redis or PostgreSQL.\n * \n * @example\n * ```typescript\n * import { IgniterAgentInMemoryAdapter } from '@igniter-js/agents/adapters';\n * \n * // Create adapter\n * const adapter = new IgniterAgentInMemoryAdapter({\n * namespace: 'myapp',\n * debug: true\n * });\n * \n * // Use with memory config\n * const memoryConfig: IgniterAgentMemoryConfig = {\n * provider: adapter,\n * working: { enabled: true, scope: 'chat' },\n * history: { enabled: true, limit: 100 }\n * };\n * ```\n * \n * @module adapters/memory\n * @packageDocumentation\n */\n\nimport type {\n IgniterAgentMemoryProvider,\n IgniterAgentWorkingMemory,\n IgniterAgentConversationMessage,\n IgniterAgentChatSession,\n IgniterAgentWorkingMemoryParams,\n IgniterAgentUpdateWorkingMemoryParams,\n IgniterAgentGetMessagesParams,\n IgniterAgentGetChatsParams,\n IgniterAgentInMemoryAdapterOptions,\n IgniterAgentMemoryAdapter,\n IgniterAgentAdapterStats,\n} from \"../types\";\n\n/* =============================================================================\n * IN-MEMORY ADAPTER CLASS\n * ============================================================================= */\n\n/**\n * In-memory implementation of the IgniterAgent memory provider.\n * \n * @description\n * Stores all memory data in JavaScript Maps. Provides a complete implementation\n * of the memory provider interface for development and testing purposes.\n * \n * **Features:**\n * - Full implementation of all memory provider methods\n * - Optional message/chat limits to control memory usage\n * - Debug logging\n * - Namespace support for multi-tenant applications\n * \n * **Limitations:**\n * - Data is not persisted across process restarts\n * - Not suitable for production with high availability requirements\n * - No horizontal scaling support\n * \n * @example\n * ```typescript\n * import { IgniterAgentInMemoryAdapter } from '@igniter-js/agents/adapters';\n * \n * const adapter = new IgniterAgentInMemoryAdapter({\n * namespace: 'test',\n * debug: process.env.NODE_ENV === 'development',\n * maxMessages: 500,\n * maxChats: 50\n * });\n * \n * // Store working memory\n * await adapter.updateWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123',\n * content: 'User prefers TypeScript'\n * });\n * \n * // Retrieve working memory\n * const memory = await adapter.getWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123'\n * });\n * \n * console.log(memory?.content); // 'User prefers TypeScript'\n * ```\n * \n * @public\n */\nexport class IgniterAgentInMemoryAdapter implements IgniterAgentMemoryAdapter<IgniterAgentInMemoryAdapterOptions> {\n /**\n * The adapter configuration options.\n */\n public readonly options: Required<IgniterAgentInMemoryAdapterOptions>;\n\n /**\n * Storage for working memory.\n * Key format: `{namespace}:{scope}:{identifier}`\n * @internal\n */\n private readonly _workingMemory: Map<string, IgniterAgentWorkingMemory> = new Map();\n\n /**\n * Storage for conversation messages.\n * Key format: `{namespace}:{chatId}`\n * @internal\n */\n private readonly _messages: Map<string, IgniterAgentConversationMessage[]> = new Map();\n\n /**\n * Storage for chat sessions.\n * Key format: `{namespace}:{chatId}`\n * @internal\n */\n private readonly _chats: Map<string, IgniterAgentChatSession> = new Map();\n\n /**\n * Creates a new IgniterAgentInMemoryAdapter.\n * \n * @param options - Adapter configuration\n * \n * @example\n * ```typescript\n * const adapter = new IgniterAgentInMemoryAdapter({\n * namespace: 'myapp',\n * maxMessages: 1000,\n * maxChats: 100\n * });\n * ```\n */\n constructor(options: IgniterAgentInMemoryAdapterOptions = {}) {\n this.options = {\n namespace: options.namespace ?? 'igniter',\n maxMessages: options.maxMessages ?? 1000,\n maxChats: options.maxChats ?? 100,\n };\n }\n\n /**\n * Factory method to create a new adapter instance.\n * @param options - Adapter configuration\n * @returns A new IgniterAgentInMemoryAdapter instance\n *\n * @example\n * ```typescript\n * const adapter = IgniterAgentInMemoryAdapter.create({\n * namespace: 'test',\n * });\n * ```\n */\n static create(\n options?: IgniterAgentInMemoryAdapterOptions\n ): IgniterAgentInMemoryAdapter {\n return new IgniterAgentInMemoryAdapter(options);\n }\n\n /* ---------------------------------------------------------------------------\n * HELPER METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Generates a storage key with namespace prefix.\n * @internal\n */\n private _key(...parts: string[]): string {\n return [this.options.namespace, ...parts].join(':');\n }\n\n /* ---------------------------------------------------------------------------\n * LIFECYCLE METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Connects to the storage backend (no-op for in-memory).\n * \n * @description\n * In-memory adapter doesn't require connection setup.\n * This method exists for interface compatibility.\n */\n async connect(): Promise<void> {\n // No-op for in-memory adapter\n }\n\n /**\n * Disconnects from the storage backend (no-op for in-memory).\n * \n * @description\n * In-memory adapter doesn't require disconnection.\n * This method exists for interface compatibility.\n */\n async disconnect(): Promise<void> {\n // No-op for in-memory adapter\n }\n\n /**\n * Checks if the adapter is connected.\n * \n * @returns Always true for in-memory adapter\n */\n isConnected(): boolean {\n return true;\n }\n\n /**\n * Clears all stored data.\n * \n * @description\n * Removes all working memory, messages, and chat sessions.\n * Use with caution.\n * \n * @example\n * ```typescript\n * // Clear all data (useful for testing)\n * await adapter.clear();\n * ```\n */\n async clear(): Promise<void> {\n this._workingMemory.clear();\n this._messages.clear();\n this._chats.clear();\n }\n\n /* ---------------------------------------------------------------------------\n * WORKING MEMORY METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Gets working memory for a scope and identifier.\n * \n * @param params - The scope and identifier\n * @returns The working memory or null if not found\n * \n * @example\n * ```typescript\n * const memory = await adapter.getWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123'\n * });\n * \n * if (memory) {\n * console.log('Content:', memory.content);\n * console.log('Updated:', memory.updatedAt);\n * }\n * ```\n */\n async getWorkingMemory(\n params: IgniterAgentWorkingMemoryParams\n ): Promise<IgniterAgentWorkingMemory | null> {\n const key = this._key('memory', params.scope, params.identifier);\n \n return this._workingMemory.get(key) ?? null;\n }\n\n /**\n * Updates working memory for a scope and identifier.\n * \n * @param params - The scope, identifier, and new content\n * \n * @example\n * ```typescript\n * await adapter.updateWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123',\n * content: `\n * ## User Preferences\n * - Prefers TypeScript\n * - Uses VS Code\n * `\n * });\n * ```\n */\n async updateWorkingMemory(\n params: IgniterAgentUpdateWorkingMemoryParams\n ): Promise<void> {\n const key = this._key('memory', params.scope, params.identifier);\n \n this._workingMemory.set(key, {\n content: params.content,\n updatedAt: new Date(),\n });\n }\n\n /* ---------------------------------------------------------------------------\n * MESSAGE METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Saves a message to the conversation history.\n * \n * @param message - The message to save\n * \n * @example\n * ```typescript\n * await adapter.saveMessage({\n * chatId: 'chat_123',\n * userId: 'user_456',\n * role: 'user',\n * content: 'How do I use TypeScript?',\n * timestamp: new Date()\n * });\n * ```\n */\n async saveMessage(message: IgniterAgentConversationMessage): Promise<void> {\n const key = this._key('messages', message.chatId);\n \n // Get or create messages array\n let messages = this._messages.get(key);\n if (!messages) {\n messages = [];\n this._messages.set(key, messages);\n }\n \n // Add message\n messages.push(message);\n \n // Enforce max messages limit\n if (messages.length > this.options.maxMessages) {\n messages.splice(0, messages.length - this.options.maxMessages);\n }\n }\n\n /**\n * Gets messages from the conversation history.\n * \n * @typeParam T - The message type to return\n * @param params - Query parameters\n * @returns Array of messages\n * \n * @example\n * ```typescript\n * const messages = await adapter.getMessages({\n * chatId: 'chat_123',\n * limit: 50\n * });\n * \n * for (const msg of messages) {\n * console.log(`[${msg.role}]: ${msg.content}`);\n * }\n * ```\n */\n async getMessages<T = unknown>(\n params: IgniterAgentGetMessagesParams\n ): Promise<T[]> {\n const key = this._key('messages', params.chatId);\n \n let messages = this._messages.get(key) ?? [];\n \n // Filter by userId if provided\n if (params.userId) {\n messages = messages.filter(m => m.userId === params.userId);\n }\n \n // Apply limit\n if (params.limit && params.limit > 0) {\n messages = messages.slice(-params.limit);\n }\n \n // Convert to expected format (extract content)\n return messages.map(m => ({\n id: `${m.chatId}-${m.timestamp.getTime()}`,\n role: m.role,\n content: m.content,\n createdAt: m.timestamp,\n })) as T[];\n }\n\n /* ---------------------------------------------------------------------------\n * CHAT SESSION METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Saves or updates a chat session.\n * \n * @param chat - The chat session to save\n * \n * @example\n * ```typescript\n * await adapter.saveChat({\n * chatId: 'chat_123',\n * userId: 'user_456',\n * title: 'TypeScript Help',\n * createdAt: new Date(),\n * updatedAt: new Date(),\n * messageCount: 0\n * });\n * ```\n */\n async saveChat(chat: IgniterAgentChatSession): Promise<void> {\n const key = this._key('chats', chat.chatId);\n \n this._chats.set(key, chat);\n \n // Enforce max chats limit\n if (this._chats.size > this.options.maxChats) {\n // Remove oldest chats\n const entries = Array.from(this._chats.entries())\n .sort((a, b) => a[1].updatedAt.getTime() - b[1].updatedAt.getTime());\n \n const toRemove = entries.slice(0, this._chats.size - this.options.maxChats);\n for (const [k] of toRemove) {\n this._chats.delete(k);\n }\n }\n }\n\n /**\n * Gets chat sessions matching the query parameters.\n * \n * @param params - Query parameters\n * @returns Array of chat sessions\n * \n * @example\n * ```typescript\n * const chats = await adapter.getChats({\n * userId: 'user_456',\n * search: 'typescript',\n * limit: 10\n * });\n * \n * for (const chat of chats) {\n * console.log(`${chat.title} (${chat.messageCount} messages)`);\n * }\n * ```\n */\n async getChats(\n params: IgniterAgentGetChatsParams\n ): Promise<IgniterAgentChatSession[]> { \n let chats = Array.from(this._chats.values());\n \n // Filter by userId\n if (params.userId) {\n chats = chats.filter(c => c.userId === params.userId);\n }\n \n // Filter by search term (title)\n if (params.search) {\n const searchLower = params.search.toLowerCase();\n chats = chats.filter(c => \n c.title?.toLowerCase().includes(searchLower)\n );\n }\n \n // Sort by most recent\n chats.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n \n // Apply limit\n if (params.limit && params.limit > 0) {\n chats = chats.slice(0, params.limit);\n }\n \n return chats;\n }\n\n /**\n * Gets a specific chat session by ID.\n * \n * @param chatId - The chat ID\n * @returns The chat session or null if not found\n * \n * @example\n * ```typescript\n * const chat = await adapter.getChat('chat_123');\n * \n * if (chat) {\n * console.log('Title:', chat.title);\n * console.log('Messages:', chat.messageCount);\n * }\n * ```\n */\n async getChat(chatId: string): Promise<IgniterAgentChatSession | null> {\n const key = this._key('chats', chatId);\n \n return this._chats.get(key) ?? null;\n }\n\n /**\n * Updates the title of a chat session.\n * \n * @param chatId - The chat ID\n * @param title - The new title\n * \n * @example\n * ```typescript\n * await adapter.updateChatTitle('chat_123', 'New Title');\n * ```\n */\n async updateChatTitle(chatId: string, title: string): Promise<void> {\n const key = this._key('chats', chatId);\n \n const chat = this._chats.get(key);\n if (chat) {\n chat.title = title;\n chat.updatedAt = new Date();\n }\n }\n\n /**\n * Deletes a chat session and its messages.\n * \n * @param chatId - The chat ID to delete\n * \n * @example\n * ```typescript\n * await adapter.deleteChat('chat_123');\n * ```\n */\n async deleteChat(chatId: string): Promise<void> {\n const chatKey = this._key('chats', chatId);\n const messagesKey = this._key('messages', chatId);\n \n this._chats.delete(chatKey);\n this._messages.delete(messagesKey);\n }\n\n /* ---------------------------------------------------------------------------\n * STATS METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Gets storage statistics.\n * \n * @returns Current storage stats\n * \n * @example\n * ```typescript\n * const stats = await adapter.getStats();\n * console.log(`Storing ${stats.messageCount} messages`);\n * console.log(`Across ${stats.chatCount} chats`);\n * ```\n */\n async getStats(): Promise<IgniterAgentAdapterStats> {\n let messageCount = 0;\n for (const messages of this._messages.values()) {\n messageCount += messages.length;\n }\n\n return {\n workingMemoryCount: this._workingMemory.size,\n messageCount,\n chatCount: this._chats.size,\n timestamp: new Date(),\n };\n }\n}","/**\n * @fileoverview JSON file-based adapter for IgniterAgent memory storage.\n * This module provides a simple file-based implementation of the memory provider.\n * \n * @description\n * The IgniterAgentJSONFileAdapter stores all data in JSON files on the local filesystem,\n * making it ideal for:\n * - Development and testing\n * - Single-machine deployments\n * - Offline-first applications\n * - Simple persistence without external databases\n * \n * **Directory Structure:**\n * ```\n * {dataDir}/\n * ├── working-memory.json # All working memory entries\n * ├── chats.json # All chat sessions\n * └── messages/\n * ├── {chatId}.json # Messages for specific chat\n * └── ...\n * ```\n * \n * @example\n * ```typescript\n * import { IgniterAgentJSONFileAdapter } from '@igniter-js/agents/adapters';\n * \n * // Create adapter\n * const adapter = new IgniterAgentJSONFileAdapter({\n * dataDir: './data/agent-memory',\n * namespace: 'myapp',\n * autoSync: true\n * });\n * \n * // Use with memory config\n * const memoryConfig: IgniterAgentMemoryConfig = {\n * provider: adapter,\n * working: { enabled: true, scope: 'chat' },\n * history: { enabled: true, limit: 100 }\n * };\n * ```\n * \n * @module adapters/json-file\n * @packageDocumentation\n */\n\nimport { mkdir, readFile, writeFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport type {\n IgniterAgentMemoryProvider,\n IgniterAgentWorkingMemory,\n IgniterAgentConversationMessage,\n IgniterAgentChatSession,\n IgniterAgentWorkingMemoryParams,\n IgniterAgentUpdateWorkingMemoryParams,\n IgniterAgentGetMessagesParams,\n IgniterAgentGetChatsParams,\n IgniterAgentMemoryAdapter,\n IgniterAgentAdapterStats,\n} from \"../types\";\n\n/* =============================================================================\n * TYPES\n * ============================================================================= */\n\n/**\n * Options for IgniterAgentJSONFileAdapter.\n * \n * @public\n */\nexport interface IgniterAgentJSONFileAdapterOptions {\n /**\n * Directory path where JSON files will be stored.\n * Will be created if it doesn't exist.\n * \n * @default './igniter-agent-memory'\n */\n dataDir?: string;\n\n /**\n * Namespace prefix for keys in the JSON files.\n * Allows storing data for multiple apps/instances in the same directory.\n * \n * @default 'igniter'\n */\n namespace?: string;\n\n /**\n * Whether to automatically sync changes to disk.\n * If false, call `sync()` manually after modifications.\n * \n * @default true\n */\n autoSync?: boolean;\n\n /**\n * Whether to enable debug logging.\n * \n * @default false\n */\n debug?: boolean;\n\n /**\n * Maximum number of messages to store per chat.\n * Older messages are removed when limit is exceeded.\n * \n * @default 1000\n */\n maxMessages?: number;\n\n /**\n * Maximum number of chat sessions to store.\n * Older chats are removed when limit is exceeded.\n * \n * @default 100\n */\n maxChats?: number;\n}\n\n/* =============================================================================\n * JSON FILE ADAPTER CLASS\n * ============================================================================= */\n\n/**\n * File-based (JSON) implementation of the IgniterAgent memory provider.\n * \n * @description\n * Stores all memory data in JSON files on the local filesystem. Provides a complete\n * implementation of the memory provider interface for development and testing purposes.\n * \n * **Features:**\n * - Full implementation of all memory provider methods\n * - Persistent storage across process restarts\n * - Namespace support for multi-tenant applications\n * - Optional automatic file synchronization\n * - Message/chat limits to control storage\n * - Debug logging\n * \n * **Limitations:**\n * - Not suitable for concurrent access from multiple processes\n * - Performance degrades with large numbers of messages/chats\n * - Not suitable for high-frequency writes\n * \n * **File Format:**\n * All data is stored in JSON format with ISO 8601 timestamps.\n * \n * @example\n * ```typescript\n * import { IgniterAgentJSONFileAdapter } from '@igniter-js/agents/adapters';\n * \n * const adapter = new IgniterAgentJSONFileAdapter({\n * dataDir: './memory',\n * namespace: 'myapp',\n * debug: true\n * });\n * \n * // Connect to initialize directories\n * await adapter.connect();\n * \n * // Store working memory\n * await adapter.updateWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123',\n * content: 'User prefers TypeScript'\n * });\n * \n * // Retrieve working memory\n * const memory = await adapter.getWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123'\n * });\n * \n * console.log(memory?.content); // 'User prefers TypeScript'\n * ```\n * \n * @public\n */\nexport class IgniterAgentJSONFileAdapter\n implements IgniterAgentMemoryAdapter<IgniterAgentJSONFileAdapterOptions>\n{\n /**\n * The adapter configuration options.\n */\n public readonly options: Required<IgniterAgentJSONFileAdapterOptions>;\n\n /**\n * Whether the adapter is currently connected and ready to use.\n * @internal\n */\n private _connected: boolean = false;\n\n /**\n * In-memory cache of working memory entries.\n * @internal\n */\n private _workingMemoryCache: Map<string, IgniterAgentWorkingMemory> =\n new Map();\n\n /**\n * In-memory cache of messages.\n * @internal\n */\n private _messagesCache: Map<string, IgniterAgentConversationMessage[]> =\n new Map();\n\n /**\n * In-memory cache of chat sessions.\n * @internal\n */\n private _chatsCache: Map<string, IgniterAgentChatSession> = new Map();\n\n /**\n * Creates a new IgniterAgentJSONFileAdapter.\n * \n * @param options - Adapter configuration\n * \n * @example\n * ```typescript\n * const adapter = new IgniterAgentJSONFileAdapter({\n * dataDir: './memory',\n * namespace: 'myapp'\n * });\n * ```\n */\n constructor(options: IgniterAgentJSONFileAdapterOptions = {}) {\n this.options = {\n dataDir: options.dataDir ?? \"./igniter-agent-memory\",\n namespace: options.namespace ?? \"igniter\",\n autoSync: options.autoSync ?? true,\n debug: options.debug ?? false,\n maxMessages: options.maxMessages ?? 1000,\n maxChats: options.maxChats ?? 100,\n };\n }\n\n /**\n * Factory method to create a new adapter instance.\n * @param options - Adapter configuration\n * @returns A new IgniterAgentJSONFileAdapter instance\n *\n * @example\n * ```typescript\n * const adapter = IgniterAgentJSONFileAdapter.create({\n * dataDir: './data',\n * });\n * ```\n */\n static create(\n options?: IgniterAgentJSONFileAdapterOptions\n ): IgniterAgentJSONFileAdapter {\n return new IgniterAgentJSONFileAdapter(options);\n }\n\n /* ---------------------------------------------------------------------------\n * PRIVATE HELPER METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Logs debug messages if debug mode is enabled.\n * @internal\n */\n private _log(message: string, data?: unknown): void {\n if (this.options.debug) {\n console.log(`[IgniterAgentJSONFileAdapter] ${message}`, data ?? \"\");\n }\n }\n\n /**\n * Gets the path for the working memory JSON file.\n * @internal\n */\n private _getWorkingMemoryPath(): string {\n return join(this.options.dataDir, \"working-memory.json\");\n }\n\n /**\n * Gets the path for the chats JSON file.\n * @internal\n */\n private _getChatsPath(): string {\n return join(this.options.dataDir, \"chats.json\");\n }\n\n /**\n * Gets the directory for message files.\n * @internal\n */\n private _getMessagesDir(): string {\n return join(this.options.dataDir, \"messages\");\n }\n\n /**\n * Gets the path for a specific chat's messages JSON file.\n * @internal\n */\n private _getMessagesPath(chatId: string): string {\n return join(this._getMessagesDir(), `${chatId}.json`);\n }\n\n /**\n * Generates a cache key with namespace prefix.\n * @internal\n */\n private _key(...parts: string[]): string {\n return [this.options.namespace, ...parts].join(\":\");\n }\n\n /**\n * Loads working memory from disk.\n * @internal\n */\n private async _loadWorkingMemory(): Promise<void> {\n try {\n const path = this._getWorkingMemoryPath();\n const content = await readFile(path, \"utf-8\");\n const data = JSON.parse(content);\n\n this._workingMemoryCache.clear();\n for (const [key, value] of Object.entries(data)) {\n this._workingMemoryCache.set(key, {\n content: (value as any).content,\n updatedAt: new Date((value as any).updatedAt),\n });\n }\n this._log(\"Loaded working memory\", {\n entries: this._workingMemoryCache.size,\n });\n } catch (err) {\n // File doesn't exist yet, that's ok\n this._log(\"Working memory file not found, starting fresh\");\n }\n }\n\n /**\n * Loads chats from disk.\n * @internal\n */\n private async _loadChats(): Promise<void> {\n try {\n const path = this._getChatsPath();\n const content = await readFile(path, \"utf-8\");\n const data = JSON.parse(content);\n\n this._chatsCache.clear();\n for (const [key, value] of Object.entries(data)) {\n const chat = value as any;\n this._chatsCache.set(key, {\n chatId: chat.chatId,\n userId: chat.userId,\n title: chat.title,\n createdAt: new Date(chat.createdAt),\n updatedAt: new Date(chat.updatedAt),\n messageCount: chat.messageCount,\n });\n }\n this._log(\"Loaded chats\", { entries: this._chatsCache.size });\n } catch (err) {\n this._log(\"Chats file not found, starting fresh\");\n }\n }\n\n /**\n * Loads a specific chat's messages from disk.\n * @internal\n */\n private async _loadMessages(chatId: string): Promise<void> {\n try {\n const path = this._getMessagesPath(chatId);\n const content = await readFile(path, \"utf-8\");\n const data = JSON.parse(content);\n\n const key = this._key(\"messages\", chatId);\n const messages: IgniterAgentConversationMessage[] = data.map(\n (msg: any) => ({\n chatId: msg.chatId,\n userId: msg.userId,\n role: msg.role,\n content: msg.content,\n timestamp: new Date(msg.timestamp),\n })\n );\n\n this._messagesCache.set(key, messages);\n this._log(\"Loaded messages\", { chatId, count: messages.length });\n } catch (err) {\n this._log(\"Messages file not found for chat\", { chatId });\n }\n }\n\n /**\n * Saves working memory to disk.\n * @internal\n */\n private async _saveWorkingMemory(): Promise<void> {\n const path = this._getWorkingMemoryPath();\n const data: Record<string, any> = {};\n\n for (const [key, value] of this._workingMemoryCache.entries()) {\n data[key] = {\n content: value.content,\n updatedAt: value.updatedAt.toISOString(),\n };\n }\n\n await writeFile(path, JSON.stringify(data, null, 2));\n this._log(\"Saved working memory\");\n }\n\n /**\n * Saves chats to disk.\n * @internal\n */\n private async _saveChats(): Promise<void> {\n const path = this._getChatsPath();\n const data: Record<string, any> = {};\n\n for (const [key, value] of this._chatsCache.entries()) {\n data[key] = {\n chatId: value.chatId,\n userId: value.userId,\n title: value.title,\n createdAt: value.createdAt.toISOString(),\n updatedAt: value.updatedAt.toISOString(),\n messageCount: value.messageCount,\n };\n }\n\n await writeFile(path, JSON.stringify(data, null, 2));\n this._log(\"Saved chats\");\n }\n\n /**\n * Saves messages for a specific chat to disk.\n * @internal\n */\n private async _saveMessages(chatId: string): Promise<void> {\n const key = this._key(\"messages\", chatId);\n const messages = this._messagesCache.get(key) ?? [];\n const path = this._getMessagesPath(chatId);\n\n const data = messages.map((msg) => ({\n chatId: msg.chatId,\n userId: msg.userId,\n role: msg.role,\n content: msg.content,\n timestamp: msg.timestamp.toISOString(),\n }));\n\n await writeFile(path, JSON.stringify(data, null, 2));\n this._log(\"Saved messages\", { chatId, count: messages.length });\n }\n\n /* ---------------------------------------------------------------------------\n * LIFECYCLE METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Connects to the storage backend and loads data from disk.\n * \n * @description\n * Creates necessary directories and loads all data into memory cache.\n * Must be called before using the adapter.\n * \n * @throws {Error} If directory creation fails\n * \n * @example\n * ```typescript\n * const adapter = new IgniterAgentJSONFileAdapter();\n * await adapter.connect();\n * ```\n */\n async connect(): Promise<void> {\n try {\n await mkdir(this.options.dataDir, { recursive: true });\n await mkdir(this._getMessagesDir(), { recursive: true });\n\n await this._loadWorkingMemory();\n await this._loadChats();\n\n this._connected = true;\n this._log(\"Connected successfully\", {\n dataDir: this.options.dataDir,\n });\n } catch (err) {\n this._log(\"Connection failed\", err);\n throw err;\n }\n }\n\n /**\n * Disconnects from the storage backend.\n * \n * @description\n * Syncs any pending changes to disk before disconnecting.\n * \n * @example\n * ```typescript\n * await adapter.disconnect();\n * ```\n */\n async disconnect(): Promise<void> {\n if (this._connected) {\n await this.sync();\n this._connected = false;\n this._log(\"Disconnected\");\n }\n }\n\n /**\n * Checks if the adapter is connected and ready to use.\n * \n * @returns True if connected, false otherwise\n */\n isConnected(): boolean {\n return this._connected;\n }\n\n /**\n * Manually syncs all in-memory data to disk.\n * \n * @description\n * Called automatically if autoSync is enabled. Can be called manually\n * to ensure data is persisted to disk.\n * \n * @example\n * ```typescript\n * await adapter.updateWorkingMemory({ ... });\n * await adapter.sync(); // Ensure written to disk\n * ```\n */\n async sync(): Promise<void> {\n try {\n await this._saveWorkingMemory();\n await this._saveChats();\n\n // Save all loaded message files\n for (const chatId of this._messagesCache.keys()) {\n const idParts = chatId.split(\":\");\n if (idParts.length > 0) {\n const actualChatId = idParts[idParts.length - 1];\n await this._saveMessages(actualChatId);\n }\n }\n\n this._log(\"Synced all data to disk\");\n } catch (err) {\n this._log(\"Sync failed\", err);\n throw err;\n }\n }\n\n /**\n * Clears all stored data from disk and memory.\n * \n * @description\n * Removes all working memory, messages, and chat sessions.\n * Use with caution.\n * \n * @example\n * ```typescript\n * await adapter.clear();\n * ```\n */\n async clear(): Promise<void> {\n this._workingMemoryCache.clear();\n this._messagesCache.clear();\n this._chatsCache.clear();\n\n if (this.options.autoSync) {\n await this.sync();\n }\n\n this._log(\"Cleared all data\");\n }\n\n /* ---------------------------------------------------------------------------\n * WORKING MEMORY METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Gets working memory for a scope and identifier.\n * \n * @param params - The scope and identifier\n * @returns The working memory or null if not found\n * \n * @example\n * ```typescript\n * const memory = await adapter.getWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123'\n * });\n * \n * if (memory) {\n * console.log('Content:', memory.content);\n * }\n * ```\n */\n async getWorkingMemory(\n params: IgniterAgentWorkingMemoryParams\n ): Promise<IgniterAgentWorkingMemory | null> {\n const key = this._key(\"memory\", params.scope, params.identifier);\n return this._workingMemoryCache.get(key) ?? null;\n }\n\n /**\n * Updates working memory for a scope and identifier.\n * \n * @param params - The scope, identifier, and new content\n * \n * @example\n * ```typescript\n * await adapter.updateWorkingMemory({\n * scope: 'chat',\n * identifier: 'chat_123',\n * content: 'User prefers TypeScript'\n * });\n * ```\n */\n async updateWorkingMemory(\n params: IgniterAgentUpdateWorkingMemoryParams\n ): Promise<void> {\n const key = this._key(\"memory\", params.scope, params.identifier);\n\n this._workingMemoryCache.set(key, {\n content: params.content,\n updatedAt: new Date(),\n });\n\n if (this.options.autoSync) {\n await this._saveWorkingMemory();\n }\n }\n\n /* ---------------------------------------------------------------------------\n * MESSAGE METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Saves a message to the conversation history.\n * \n * @param message - The message to save\n * \n * @example\n * ```typescript\n * await adapter.saveMessage({\n * chatId: 'chat_123',\n * userId: 'user_456',\n * role: 'user',\n * content: 'How do I use TypeScript?',\n * timestamp: new Date()\n * });\n * ```\n */\n async saveMessage(message: IgniterAgentConversationMessage): Promise<void> {\n const key = this._key(\"messages\", message.chatId);\n\n let messages = this._messagesCache.get(key);\n if (!messages) {\n messages = [];\n this._messagesCache.set(key, messages);\n }\n\n messages.push(message);\n\n // Enforce max messages limit\n if (messages.length > this.options.maxMessages) {\n messages.splice(0, messages.length - this.options.maxMessages);\n }\n\n if (this.options.autoSync) {\n await this._saveMessages(message.chatId);\n }\n }\n\n /**\n * Gets messages from the conversation history.\n * \n * @typeParam T - The message type to return\n * @param params - Query parameters\n * @returns Array of messages\n * \n * @example\n * ```typescript\n * const messages = await adapter.getMessages({\n * chatId: 'chat_123',\n * limit: 50\n * });\n * \n * for (const msg of messages) {\n * console.log(`[${msg.role}]: ${msg.content}`);\n * }\n * ```\n */\n async getMessages<T = unknown>(\n params: IgniterAgentGetMessagesParams\n ): Promise<T[]> {\n const key = this._key(\"messages\", params.chatId);\n\n // Load messages if not in cache\n if (!this._messagesCache.has(key)) {\n await this._loadMessages(params.chatId);\n }\n\n let messages = this._messagesCache.get(key) ?? [];\n\n // Filter by userId if provided\n if (params.userId) {\n messages = messages.filter((m) => m.userId === params.userId);\n }\n\n // Apply limit\n if (params.limit && params.limit > 0) {\n messages = messages.slice(-params.limit);\n }\n\n // Convert to expected format\n return messages.map((m) => ({\n id: `${m.chatId}-${m.timestamp.getTime()}`,\n role: m.role,\n content: m.content,\n createdAt: m.timestamp,\n })) as T[];\n }\n\n /* ---------------------------------------------------------------------------\n * CHAT SESSION METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Saves or updates a chat session.\n * \n * @param chat - The chat session to save\n * \n * @example\n * ```typescript\n * await adapter.saveChat({\n * chatId: 'chat_123',\n * userId: 'user_456',\n * title: 'TypeScript Help',\n * createdAt: new Date(),\n * updatedAt: new Date(),\n * messageCount: 0\n * });\n * ```\n */\n async saveChat(chat: IgniterAgentChatSession): Promise<void> {\n const key = this._key(\"chats\", chat.chatId);\n\n this._chatsCache.set(key, chat);\n\n // Enforce max chats limit\n if (this._chatsCache.size > this.options.maxChats) {\n const entries = Array.from(this._chatsCache.entries())\n .sort(\n (a, b) =>\n a[1].updatedAt.getTime() - b[1].updatedAt.getTime()\n );\n\n const toRemove = entries.slice(\n 0,\n this._chatsCache.size - this.options.maxChats\n );\n for (const [k] of toRemove) {\n this._chatsCache.delete(k);\n }\n }\n\n if (this.options.autoSync) {\n await this._saveChats();\n }\n }\n\n /**\n * Gets chat sessions matching the query parameters.\n * \n * @param params - Query parameters\n * @returns Array of chat sessions\n * \n * @example\n * ```typescript\n * const chats = await adapter.getChats({\n * userId: 'user_456',\n * search: 'typescript',\n * limit: 10\n * });\n * \n * for (const chat of chats) {\n * console.log(`${chat.title} (${chat.messageCount} messages)`);\n * }\n * ```\n */\n async getChats(\n params: IgniterAgentGetChatsParams\n ): Promise<IgniterAgentChatSession[]> {\n let chats = Array.from(this._chatsCache.values());\n\n // Filter by userId\n if (params.userId) {\n chats = chats.filter((c) => c.userId === params.userId);\n }\n\n // Filter by search term (title)\n if (params.search) {\n const searchLower = params.search.toLowerCase();\n chats = chats.filter((c) =>\n c.title?.toLowerCase().includes(searchLower)\n );\n }\n\n // Sort by most recent\n chats.sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime());\n\n // Apply limit\n if (params.limit && params.limit > 0) {\n chats = chats.slice(0, params.limit);\n }\n\n return chats;\n }\n\n /**\n * Gets a specific chat session by ID.\n * \n * @param chatId - The chat ID\n * @returns The chat session or null if not found\n * \n * @example\n * ```typescript\n * const chat = await adapter.getChat('chat_123');\n * \n * if (chat) {\n * console.log('Title:', chat.title);\n * }\n * ```\n */\n async getChat(chatId: string): Promise<IgniterAgentChatSession | null> {\n const key = this._key(\"chats\", chatId);\n return this._chatsCache.get(key) ?? null;\n }\n\n /**\n * Updates the title of a chat session.\n * \n * @param chatId - The chat ID\n * @param title - The new title\n * \n * @example\n * ```typescript\n * await adapter.updateChatTitle('chat_123', 'New Title');\n * ```\n */\n async updateChatTitle(chatId: string, title: string): Promise<void> {\n const key = this._key(\"chats\", chatId);\n\n const chat = this._chatsCache.get(key);\n if (chat) {\n chat.title = title;\n chat.updatedAt = new Date();\n\n if (this.options.autoSync) {\n await this._saveChats();\n }\n }\n }\n\n /**\n * Deletes a chat session and its messages.\n * \n * @param chatId - The chat ID to delete\n * \n * @example\n * ```typescript\n * await adapter.deleteChat('chat_123');\n * ```\n */\n async deleteChat(chatId: string): Promise<void> {\n const chatKey = this._key(\"chats\", chatId);\n const messagesKey = this._key(\"messages\", chatId);\n\n this._chatsCache.delete(chatKey);\n this._messagesCache.delete(messagesKey);\n\n if (this.options.autoSync) {\n await this._saveChats();\n // Optionally delete the messages file\n try {\n const path = this._getMessagesPath(chatId);\n await readFile(path); // Check if exists\n this._log(\"Messages file for deleted chat still exists\");\n } catch {\n // File doesn't exist, that's fine\n }\n }\n }\n\n /* ---------------------------------------------------------------------------\n * STATS METHODS\n * --------------------------------------------------------------------------- */\n\n /**\n * Gets storage statistics.\n * \n * @returns Current storage stats\n * \n * @example\n * ```typescript\n * const stats = await adapter.getStats();\n * console.log(`Storing ${stats.messageCount} messages`);\n * console.log(`Across ${stats.chatCount} chats`);\n * ```\n */\n async getStats(): Promise<IgniterAgentAdapterStats> {\n let messageCount = 0;\n for (const messages of this._messagesCache.values()) {\n messageCount += messages.length;\n }\n\n return {\n workingMemoryCount: this._workingMemoryCache.size,\n messageCount,\n chatCount: this._chatsCache.size,\n timestamp: new Date(),\n };\n }\n}\n"]}