lemura 1.0.0 → 1.4.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.
Files changed (49) hide show
  1. package/CHANGELOG.md +162 -0
  2. package/README.md +17 -4
  3. package/dist/adapters/index.d.mts +2 -3
  4. package/dist/adapters/index.d.ts +2 -3
  5. package/dist/adapters/index.js +15 -7
  6. package/dist/adapters/index.js.map +1 -1
  7. package/dist/adapters/index.mjs +15 -7
  8. package/dist/adapters/index.mjs.map +1 -1
  9. package/dist/{adapters-BnG0LEYD.d.mts → adapters-BhTAnrOM.d.mts} +160 -2
  10. package/dist/{adapters-BSkhv5ac.d.ts → adapters-CVcfWf85.d.ts} +160 -2
  11. package/dist/agent-38El9_yp.d.ts +279 -0
  12. package/dist/agent-CJvmcAbT.d.mts +279 -0
  13. package/dist/context/index.d.mts +71 -8
  14. package/dist/context/index.d.ts +71 -8
  15. package/dist/context/index.js +75 -4
  16. package/dist/context/index.js.map +1 -1
  17. package/dist/context/index.mjs +74 -5
  18. package/dist/context/index.mjs.map +1 -1
  19. package/dist/index.d.mts +557 -33
  20. package/dist/index.d.ts +557 -33
  21. package/dist/index.js +2526 -258
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.mjs +2517 -259
  24. package/dist/index.mjs.map +1 -1
  25. package/dist/skills/index.d.mts +92 -3
  26. package/dist/skills/index.d.ts +92 -3
  27. package/dist/skills/index.js +138 -8
  28. package/dist/skills/index.js.map +1 -1
  29. package/dist/skills/index.mjs +138 -8
  30. package/dist/skills/index.mjs.map +1 -1
  31. package/dist/skills-Y6D7zSSw.d.mts +66 -0
  32. package/dist/skills-Y6D7zSSw.d.ts +66 -0
  33. package/dist/tools/index.d.mts +125 -5
  34. package/dist/tools/index.d.ts +125 -5
  35. package/dist/tools/index.js +278 -7
  36. package/dist/tools/index.js.map +1 -1
  37. package/dist/tools/index.mjs +277 -8
  38. package/dist/tools/index.mjs.map +1 -1
  39. package/dist/types/index.d.mts +18 -69
  40. package/dist/types/index.d.ts +18 -69
  41. package/dist/types/index.js +21 -0
  42. package/dist/types/index.js.map +1 -1
  43. package/dist/types/index.mjs +19 -1
  44. package/dist/types/index.mjs.map +1 -1
  45. package/package.json +6 -1
  46. package/dist/skills-wc8S-OvC.d.mts +0 -14
  47. package/dist/skills-wc8S-OvC.d.ts +0 -14
  48. package/dist/storage-BGu4Loao.d.ts +0 -121
  49. package/dist/storage-DMcliVVj.d.mts +0 -121
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/errors.ts","../../src/adapters/OpenAICompatibleAdapter.ts"],"names":[],"mappings":";AAMO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnC,YACI,OAAA,EACgB,IAAA,EACA,OAAA,EACA,KAAA,GAAkB,EAAC,EACrC;AACE,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EACpD;AACJ,CAAA;AAmBO,IAAM,kBAAA,GAAN,cAAiC,WAAA,CAAY;AAAA,EAChD,WAAA,CACI,SACA,IAAA,GAAO,eAAA,EACA,OACP,OAAA,EACA,KAAA,GAAkB,EAAC,EACrB;AACE,IAAA,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,KAAK,CAAA;AAJ5B,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAKP,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EAChB;AACJ,CAAA;;;ACnBO,IAAM,0BAAN,MAA0D;AAAA,EACpD,IAAA,GAAO,mBAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EAEX,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAwC,EAAC,EAAG;AACpD,IAAA,IAAA,CAAK,OAAA,GAAA,CACD,MAAA,CAAO,OAAA,IACP,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,2BAAA,EACF,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEnB,IAAA,IAAA,CAAK,MAAA,GAAS,OAAO,MAAA,IAAU,OAAA,CAAQ,IAAI,cAAA,IAAkB,OAAA,CAAQ,IAAI,cAAA,IAAkB,EAAA;AAC3F,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,OAAA,CAAQ,IAAI,YAAA,IAAgB,OAAA,CAAQ,IAAI,YAAA,IAAgB,eAAA;AAEnG,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,cAAA,IAAkB,EAAC;AAChD,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,OAAA,IAAW,GAAA;AACnC,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,KAAA,IAAS,EAAE,UAAA,EAAY,CAAA,EAAG,aAAa,GAAA,EAAK;AAAA,EAC1E;AAAA,EAEA,MAAc,cAAA,CAAe,GAAA,EAAa,IAAA,EAAsC;AAC5E,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,OAAO,QAAA,IAAY,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AAC5C,MAAA,IAAI;AACA,QAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,QAAA,MAAM,YAAY,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,SAAS,CAAA;AAErE,QAAA,MAAM,OAAA,GAAkC;AAAA,UACpC,eAAA,EAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,UACtC,GAAG,IAAA,CAAK;AAAA,SACZ;AAEA,QAAA,IAAI,KAAK,OAAA,EAAS;AACd,UAAA,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAAA,QACvC;AAGA,QAAA,IAAI,OAAA,CAAQ,cAAc,CAAA,KAAM,OAAA,EAAS;AACrC,UAAA,OAAO,QAAQ,cAAc,CAAA;AAAA,QACjC,CAAA,MAAA,IAAW,CAAC,OAAA,CAAQ,cAAc,CAAA,EAAG;AACjC,UAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAAA,QAC9B;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,UAC9B,GAAG,IAAA;AAAA,UACH,QAAQ,UAAA,CAAW,MAAA;AAAA,UACnB;AAAA,SACH,CAAA;AAED,QAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,QAAA,IAAI,QAAA,CAAS,IAAI,OAAO,QAAA;AAGxB,QAAA,IAAA,CAAK,QAAA,CAAS,WAAW,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,KAAQ,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AAChG,UAAA,QAAA,EAAA;AACA,UAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,CAAY,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AACrE,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,UAAA;AAAA,QACJ;AAEA,QAAA,MAAM,YAAY,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACtD,QAAA,IAAI,OAAA,GAAU,uDAAA;AACd,QAAA,IAAI,KAAA,GAAQ,CAAC,6DAA6D,CAAA;AAE1E,QAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AACzB,UAAA,OAAA,GAAU,2DAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,sFAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAChC,UAAA,OAAA,GAAU,gDAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,uEAAA;AAAA,YACA,oEAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAChC,UAAA,OAAA,GAAU,sBAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,qCAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ;AAEA,QAAA,MAAM,IAAI,kBAAA;AAAA,UACN,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA;AAAA,UACrC,YAAA;AAAA,UACA,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,MAAM,SAAA,EAAU;AAAA,UAC3C,OAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ,SAAS,GAAA,EAAK;AACV,QAAA,IAAI,GAAA,YAAe,oBAAoB,MAAM,GAAA;AAE7C,QAAA,IAAI,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AACxC,UAAA,QAAA,EAAA;AACA,UAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,CAAY,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AACrE,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,UAAA;AAAA,QACJ;AAEA,QAAA,MAAM,IAAI,kBAAA;AAAA,UACN,2BAA2B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,UAC3E,eAAA;AAAA,UACA,GAAA;AAAA,UACA,4DAAA;AAAA,UACA;AAAA,YACI,iCAAA;AAAA,YACA,yDAAA;AAAA,YACA;AAAA;AACJ,SACJ;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACN,sBAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,mDAAA;AAAA,MACA,CAAC,kEAAkE;AAAA,KACvE;AAAA,EACJ;AAAA,EAEQ,gBAAgB,MAAA,EAA2D;AAC/E,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,CAAA,GAAI,OAAO,WAAA,EAAY;AAC7B,IAAA,IAAI,CAAA,KAAM,YAAA,IAAgB,CAAA,KAAM,WAAA,EAAa,OAAO,WAAA;AACpD,IAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,YAAA,EAAc,OAAO,YAAA;AACjD,IAAA,IAAI,CAAA,KAAM,gBAAA,IAAoB,CAAA,KAAM,OAAA,EAAS,OAAO,OAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEQ,aAAa,OAAA,EAAqC;AACtD,IAAA,MAAM,OAAA,GAAmC;AAAA,MACrC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,MAC7B,UAAU,OAAA,CAAQ;AAAA,KACtB;AACA,IAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,cAAc,OAAA,CAAQ,WAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,aAAA,EAAe,MAAA,EAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,aAAA;AAC1D,IAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,IAAA;AAErC,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,QACpC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACN,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAClB,OACJ,CAAE,CAAA;AAAA,IACN;AAEA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA,EAEA,MAAM,SAAS,OAAA,EAAyD;AACpE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AAEzC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA,MAAM,IAAI,kBAAA,CAAmB,0CAAA,EAA4C,kBAAA,EAAoB,IAAI,CAAA;AAAA,IACrG;AAEA,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,MAAA,SAAA,GAAY,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,MAAa;AAAA,QAC7C,IAAI,EAAA,CAAG,EAAA;AAAA,QACP,IAAA,EAAM,GAAG,QAAA,CAAS,IAAA;AAAA,QAClB,SAAA,EAAW,GAAG,QAAA,CAAS;AAAA,OAC3B,CAAE,CAAA;AAAA,IACN;AAEA,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,QAAQ,OAAA,IAAW,EAAA;AAAA,MAC5B,SAAA;AAAA,MACA,YAAA,EAAc,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAA,MACvD,KAAA,EAAO;AAAA,QACH,YAAA,EAAc,IAAA,CAAK,KAAA,EAAO,aAAA,IAAiB,CAAA;AAAA,QAC3C,gBAAA,EAAkB,IAAA,CAAK,KAAA,EAAO,iBAAA,IAAqB,CAAA;AAAA,QACnD,WAAA,EAAa,IAAA,CAAK,KAAA,EAAO,YAAA,IAAgB;AAAA,OAC7C;AAAA,MACA,WAAA,EAAa;AAAA,KACjB;AAAA,EACJ;AAAA,EAEA,OAAO,OAAO,OAAA,EAA4D;AACtE,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,CAAa,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAA;AAE9D,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAChB,MAAA,MAAM,IAAI,kBAAA,CAAmB,uBAAA,EAAyB,cAAc,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,OAAO,CAAA;AACvC,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,EAAM;AACT,QAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,cAAA,EAAgB;AAC5C,UAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,YAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC/B,YAAA,IAAI,IAAA;AACJ,YAAA,IAAI;AACA,cAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,YAC7B,SAAS,GAAA,EAAK;AACV,cAAA;AAAA,YACJ;AAEA,YAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,YAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAO,OAAA,IAAW,EAAA;AACvC,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,EAAO,UAAA,GAAa,CAAC,CAAA;AAClD,YAAA,IAAI,aAAA;AAEJ,YAAA,IAAI,aAAA,EAAe;AACf,cAAA,aAAA,GAAgB;AAAA,gBACZ,IAAI,aAAA,CAAc,EAAA;AAAA,gBAClB,IAAA,EAAM,cAAc,QAAA,EAAU,IAAA;AAAA,gBAC9B,SAAA,EAAW,cAAc,QAAA,EAAU;AAAA,eACvC;AAAA,YACJ;AAEA,YAAA,MAAM,UAAA,GAAa,MAAA,CAAO,aAAA,KAAkB,IAAA,IAAQ,OAAO,aAAA,KAAkB,KAAA,CAAA;AAE7E,YAAA,MAAM;AAAA,cACF,KAAA;AAAA,cACA,QAAA,EAAU,UAAA;AAAA,cACV,GAAI,aAAA,IAAiB,EAAE,aAAA,EAAc;AAAA,cACrC,GAAI,cAAc,EAAE,YAAA,EAAc,KAAK,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAE,aACjF;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAA,SAAE;AACE,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,eAAe,IAAA,EAAsB;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,EACpC;AAAA,EAEA,YAAA,GAA0B;AACtB,IAAA,OAAO;AAAA,MACH,cAAA,EAAgB,IAAA;AAAA,MAChB,aAAA,EAAe,IAAA;AAAA,MACf,aAAA,EAAe;AAAA,KACnB;AAAA,EACJ;AAAA,EAEA,MAAM,WAAA,GAAgC;AAClC,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,cAAA,CAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,OAAA,CAAA,EAAW,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AAClF,MAAA,OAAO,IAAA,CAAK,EAAA;AAAA,IAChB,CAAA,CAAA,MAAQ;AACJ,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,OAAA,EAA+D;AAC5E,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,YAAA,CAAa,MAAM,CAAA;AAChD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,YAAA,CAAa,UAAA,CAAW,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,KAAK,GAAG,EAAE,IAAA,EAAM,OAAA,CAAQ,QAAA,EAAU,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,YAAY,CAAA;AAC1C,IAAA,QAAA,CAAS,MAAA,CAAO,SAAS,WAAW,CAAA;AACpC,IAAA,IAAI,QAAQ,QAAA,EAAU,QAAA,CAAS,MAAA,CAAO,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAElE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,qBAAA,CAAA,EAAyB;AAAA,MAC/E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACL,cAAA,EAAgB;AAAA;AACpB,KACH,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,YAAY,IAAA,CAAK,IAAA;AAAA,MACjB,UAAA,EAAY,CAAA;AAAA;AAAA,MACZ,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,OAAA,CAAQ,QAAA,IAAY;AAAA,KACnD;AAAA,EACJ;AAAA,EAEA,OAAO,WAAW,OAAA,EAAsD;AACpE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,MACvE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,KAAA,EAAO,OAAA;AAAA,QACP,OAAO,OAAA,CAAQ,IAAA;AAAA,QACf,KAAA,EAAO,QAAQ,OAAA,IAAW,OAAA;AAAA,QAC1B,eAAA,EAAiB,QAAQ,MAAA,IAAU;AAAA,OACtC;AAAA,KACJ,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,QAAY,IAAI,kBAAA,CAAmB,4BAA4B,cAAc,CAAA;AAE3F,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,EAAM;AACT,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AACV,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,MAAM,SAAS,IAAI,WAAA,CAAY,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AACrD,UAAA,MAAM,EAAE,WAAA,EAAa,IAAA,CAAK,MAAM,CAAA,EAAE;AAAA,QACtC;AAAA,MACJ;AAAA,IACJ,CAAA,SAAE;AACE,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,OAAA,EAAiD;AACjE,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,OAAO,IAAA,CAAK,YAAA;AAAA,MACZ,QAAA,EAAU;AAAA,QACN;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACL,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,CAAQ,UAAU,qBAAA,EAAsB;AAAA,YAC9D;AAAA,cACI,IAAA,EAAM,WAAA;AAAA,cACN,SAAA,EAAW;AAAA,gBACP,GAAA,EAAK,CAAA,uBAAA,EAA0B,OAAA,CAAQ,WAAW,CAAA;AAAA;AACtD;AACJ;AACJ;AACJ;AACJ,KACJ;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,WAAA,EAAa,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,CAAQ,OAAA;AAAA,MACrC,SAAS;AAAC;AAAA,KACd;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,OAAA,EAAqD;AACrE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,mBAAA,CAAA,EAAuB;AAAA,MAC7E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,KAAA,EAAO,UAAA;AAAA,QACP,CAAA,EAAG,CAAA;AAAA,QACH,IAAA,EAAM,QAAQ,UAAA,IAAc;AAAA,OAC/B;AAAA,KACJ,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE,GAAA;AAAA,MACvB,aAAA,EAAe,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,CAAE;AAAA,KAChC;AAAA,EACJ;AACJ","file":"index.mjs","sourcesContent":["/**\n * Base class for all custom errors thrown by lemura.\n *\n * @example\n * throw new LemuraError('Something went wrong', 'UNKNOWN_ERROR');\n */\nexport class LemuraError extends Error {\n /**\n * @param message - The error message\n * @param code - The error code for programmatic handling\n * @param problem - A clear description of the problem for the end user\n * @param hints - A list of suggestions to resolve the issue\n */\n constructor(\n message: string,\n public readonly code: string,\n public readonly problem?: string,\n public readonly hints: string[] = []\n ) {\n super(message);\n this.name = 'LemuraError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Error thrown when context exceeds max tokens and cannot be compressed further */\nexport class LemuraContextOverflowError extends LemuraError {\n constructor(message: string) {\n super(message, 'CONTEXT_OVERFLOW');\n this.name = 'LemuraContextOverflowError';\n }\n}\n\n/** Error thrown when a requested tool is not found in the registry */\nexport class LemuraToolNotFoundError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_NOT_FOUND');\n this.name = 'LemuraToolNotFoundError';\n }\n}\n\n/** Error thrown when an adapter encounters an API or formatting issue */\nexport class LemuraAdapterError extends LemuraError {\n constructor(\n message: string,\n code = 'ADAPTER_ERROR',\n public cause?: any,\n problem?: string,\n hints: string[] = []\n ) {\n super(message, code, problem, hints);\n this.name = 'LemuraAdapterError';\n }\n}\n\n/** Error thrown when a skill cannot be parsed or injected */\nexport class LemuraSkillInjectionError extends LemuraError {\n constructor(message: string) {\n super(message, 'SKILL_INJECTION_FAILED');\n this.name = 'LemuraSkillInjectionError';\n }\n}\n\n/** Error thrown when the ReAct loop exceeds the configured max iterations */\nexport class LemuraMaxIterationsError extends LemuraError {\n constructor(message: string) {\n super(message, 'MAX_ITERATIONS_EXCEEDED');\n this.name = 'LemuraMaxIterationsError';\n }\n}\n\n/** Error thrown when tool parameters fail JSON schema validation */\nexport class LemuraToolValidationError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_VALIDATION_FAILED');\n this.name = 'LemuraToolValidationError';\n }\n}\n\n/** Error thrown when a tool execute function exceeds its timeout */\nexport class LemuraToolTimeoutError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_TIMEOUT');\n this.name = 'LemuraToolTimeoutError';\n }\n}\n","import {\n IProviderAdapter,\n CompletionRequest,\n CompletionResponse,\n CompletionChunk,\n TranscriptionRequest,\n TranscriptionResponse,\n SynthesisRequest,\n AudioChunk,\n VisionRequest,\n VisionResponse,\n ImageGenRequest,\n ImageGenResponse,\n ModelInfo,\n LemuraAdapterError,\n} from '../types/index.js';\n\nexport interface RetryConfig {\n maxRetries: number;\n baseDelayMs: number;\n}\n\nexport interface OpenAICompatibleAdapterConfig {\n baseUrl?: string;\n apiKey?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n timeout?: number;\n retry?: RetryConfig;\n}\n\n/**\n * Reference implementation of an OpenAI-compatible provider adapter.\n */\nexport class OpenAICompatibleAdapter implements IProviderAdapter {\n readonly name = 'openai_compatible';\n readonly version = '1.0.0';\n\n private baseUrl: string;\n private apiKey: string;\n private defaultModel: string;\n private defaultHeaders: Record<string, string>;\n private timeoutMs: number;\n private retryConfig: RetryConfig;\n\n constructor(config: OpenAICompatibleAdapterConfig = {}) {\n this.baseUrl = (\n config.baseUrl ??\n process.env.LEMURA_BASE_URL ??\n process.env.OPENAI_BASE_URL ??\n 'https://api.openai.com/v1'\n ).replace(/\\/$/, '');\n\n this.apiKey = config.apiKey ?? process.env.LEMURA_API_KEY ?? process.env.OPENAI_API_KEY ?? '';\n this.defaultModel = config.defaultModel ?? process.env.LEMURA_MODEL ?? process.env.OPENAI_MODEL ?? 'gpt-3.5-turbo';\n\n this.defaultHeaders = config.defaultHeaders || {};\n this.timeoutMs = config.timeout || 30000;\n this.retryConfig = config.retry || { maxRetries: 2, baseDelayMs: 1000 };\n }\n\n private async fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let attempts = 0;\n while (attempts <= this.retryConfig.maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this.apiKey}`,\n ...this.defaultHeaders,\n };\n\n if (init.headers) {\n Object.assign(headers, init.headers);\n }\n\n // Don't set Content-Type if it's 'unset' (for FormData)\n if (headers['Content-Type'] === 'unset') {\n delete headers['Content-Type'];\n } else if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await fetch(url, {\n ...init,\n signal: controller.signal,\n headers,\n });\n\n clearTimeout(timeoutId);\n\n if (response.ok) return response;\n\n // Retry on 429 and 503\n if ((response.status === 429 || response.status === 503) && attempts < this.retryConfig.maxRetries) {\n attempts++;\n const delay = this.retryConfig.baseDelayMs * Math.pow(2, attempts - 1);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n const errorText = await response.text().catch(() => '');\n let problem = 'The server replied with an error during the API call.';\n let hints = ['Check the API documentation for the provider you are using.'];\n\n if (response.status === 401) {\n problem = 'Authentication failed. The API key is invalid or missing.';\n hints = [\n 'Ensure your API key is correctly configured in the adapter or environment variables.',\n 'Check if the API key has expired or been revoked.'\n ];\n } else if (response.status === 404) {\n problem = 'The requested resource or model was not found.';\n hints = [\n 'Verify that the baseUrl is correct (e.g., https://api.openai.com/v1).',\n 'Check if the model name is correct and available for your account.',\n 'Ensure you are not appending extra paths to the baseUrl.'\n ];\n } else if (response.status === 429) {\n problem = 'Rate limit exceeded.';\n hints = [\n 'Wait a few seconds before retrying.',\n 'Check your usage limits and billing status on the provider dashboard.'\n ];\n }\n\n throw new LemuraAdapterError(\n `HTTP ${response.status}: ${errorText}`,\n 'HTTP_ERROR',\n { status: response.status, body: errorText },\n problem,\n hints\n );\n } catch (err) {\n if (err instanceof LemuraAdapterError) throw err;\n\n if (attempts < this.retryConfig.maxRetries) {\n attempts++;\n const delay = this.retryConfig.baseDelayMs * Math.pow(2, attempts - 1);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n throw new LemuraAdapterError(\n `Network request failed: ${err instanceof Error ? err.message : String(err)}`,\n 'NETWORK_ERROR',\n err,\n 'A network error occurred while connecting to the provider.',\n [\n 'Check your internet connection.',\n 'Verify that the baseUrl is reachable from your network.',\n 'Check for proxy or firewall settings that might block the request.'\n ]\n );\n }\n }\n throw new LemuraAdapterError(\n 'Max retries exceeded',\n 'MAX_RETRIES',\n undefined,\n 'The request failed after multiple retry attempts.',\n ['Check if the provider service is down or experiencing high load.']\n );\n }\n\n private mapFinishReason(reason: string | null): CompletionResponse['finishReason'] {\n if (!reason) return 'stop';\n const r = reason.toLowerCase();\n if (r === 'tool_calls' || r === 'tool_call') return 'tool_call';\n if (r === 'length' || r === 'max_tokens') return 'max_tokens';\n if (r === 'content_filter' || r === 'error') return 'error';\n return 'stop';\n }\n\n private buildPayload(request: CompletionRequest): unknown {\n const payload: Record<string, unknown> = {\n model: request.model || this.defaultModel,\n messages: request.messages,\n };\n if (request.maxTokens !== undefined) payload.max_tokens = request.maxTokens;\n if (request.temperature !== undefined) payload.temperature = request.temperature;\n if (request.stopSequences?.length) payload.stop = request.stopSequences;\n if (request.stream) payload.stream = true;\n\n if (request.tools && request.tools.length > 0) {\n payload.tools = request.tools.map(t => ({\n type: 'function',\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }\n }));\n }\n\n return payload;\n }\n\n async complete(request: CompletionRequest): Promise<CompletionResponse> {\n const payload = this.buildPayload(request);\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n const data = await response.json();\n const choice = data.choices?.[0];\n if (!choice) {\n throw new LemuraAdapterError('Invalid response format: missing choices', 'INVALID_RESPONSE', data);\n }\n\n const message = choice.message;\n let toolCalls;\n\n if (message.tool_calls && message.tool_calls.length > 0) {\n toolCalls = message.tool_calls.map((tc: any) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments,\n }));\n }\n\n return {\n content: message.content || '',\n toolCalls,\n finishReason: this.mapFinishReason(choice.finish_reason),\n usage: {\n promptTokens: data.usage?.prompt_tokens || 0,\n completionTokens: data.usage?.completion_tokens || 0,\n totalTokens: data.usage?.total_tokens || 0,\n },\n rawResponse: data\n };\n }\n\n async *stream(request: CompletionRequest): AsyncIterable<CompletionChunk> {\n const payload = this.buildPayload({ ...request, stream: true });\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n if (!response.body) {\n throw new LemuraAdapterError('Response body is null', 'STREAM_ERROR');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n if (trimmed.startsWith('data: ')) {\n const jsonStr = trimmed.slice(6);\n let data;\n try {\n data = JSON.parse(jsonStr);\n } catch (err) {\n continue;\n }\n\n const choice = data.choices?.[0];\n if (!choice) continue;\n\n const delta = choice.delta?.content || '';\n const toolCallBlock = choice.delta?.tool_calls?.[0];\n let toolCallDelta;\n\n if (toolCallBlock) {\n toolCallDelta = {\n id: toolCallBlock.id,\n name: toolCallBlock.function?.name,\n arguments: toolCallBlock.function?.arguments,\n };\n }\n\n const isFinished = choice.finish_reason !== null && choice.finish_reason !== undefined;\n\n yield {\n delta,\n finished: isFinished,\n ...(toolCallDelta && { toolCallDelta }),\n ...(isFinished && { finishReason: this.mapFinishReason(choice.finish_reason) })\n };\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n estimateTokens(text: string): number {\n return Math.ceil(text.length / 4);\n }\n\n getModelInfo(): ModelInfo {\n return {\n supportsVision: true,\n supportsTools: true,\n contextWindow: 128000\n };\n }\n\n async healthCheck(): Promise<boolean> {\n try {\n const resp = await this.fetchWithRetry(`${this.baseUrl}/models`, { method: 'GET' });\n return resp.ok;\n } catch {\n return false;\n }\n }\n\n async transcribe(request: TranscriptionRequest): Promise<TranscriptionResponse> {\n const binaryString = atob(request.audioBase64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n const blob = new Blob([bytes], { type: request.mimeType });\n const formData = new FormData();\n formData.append('file', blob, 'audio.webm');\n formData.append('model', 'whisper-1');\n if (request.language) formData.append('language', request.language);\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/audio/transcriptions`, {\n method: 'POST',\n body: formData,\n headers: {\n 'Content-Type': 'unset'\n }\n });\n\n const data = await response.json();\n return {\n transcript: data.text,\n confidence: 1.0, // OpenAI doesn't return confidence in standard response\n language: data.language || request.language || 'en'\n };\n }\n\n async *synthesize(request: SynthesisRequest): AsyncIterable<AudioChunk> {\n const response = await this.fetchWithRetry(`${this.baseUrl}/audio/speech`, {\n method: 'POST',\n body: JSON.stringify({\n model: 'tts-1',\n input: request.text,\n voice: request.voiceId || 'alloy',\n response_format: request.format || 'mp3'\n })\n });\n\n if (!response.body) throw new LemuraAdapterError('No response body for TTS', 'STREAM_ERROR');\n\n const reader = response.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) {\n const binary = new TextDecoder('latin1').decode(value);\n yield { audioBase64: btoa(binary) };\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async describeImage(request: VisionRequest): Promise<VisionResponse> {\n const payload = {\n model: this.defaultModel,\n messages: [\n {\n role: 'user',\n content: [\n { type: 'text', text: request.prompt || 'Describe this image' },\n {\n type: 'image_url',\n image_url: {\n url: `data:image/jpeg;base64,${request.imageBase64}`\n }\n }\n ]\n }\n ]\n };\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n const data = await response.json();\n return {\n description: data.choices[0].message.content,\n objects: [] // OpenAI doesn't return structured objects in standard vision call\n };\n }\n\n async generateImage(request: ImageGenRequest): Promise<ImageGenResponse> {\n const response = await this.fetchWithRetry(`${this.baseUrl}/images/generations`, {\n method: 'POST',\n body: JSON.stringify({\n prompt: request.prompt,\n model: 'dall-e-3',\n n: 1,\n size: request.dimensions || '1024x1024'\n })\n });\n\n const data = await response.json();\n return {\n imageUrl: data.data[0].url,\n revisedPrompt: data.data[0].revised_prompt\n };\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/types/errors.ts","../../src/adapters/OpenAICompatibleAdapter.ts"],"names":[],"mappings":";AAMO,IAAM,WAAA,GAAN,cAA0B,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOnC,YACI,OAAA,EACgB,IAAA,EACA,OAAA,EACA,KAAA,GAAkB,EAAC,EACrC;AACE,IAAA,KAAA,CAAM,OAAO,CAAA;AAJG,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AACA,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAGhB,IAAA,IAAA,CAAK,IAAA,GAAO,aAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EACpD;AACJ,CAAA;AAmBO,IAAM,kBAAA,GAAN,cAAiC,WAAA,CAAY;AAAA,EAChD,WAAA,CACI,SACA,IAAA,GAAO,eAAA,EACA,OACP,OAAA,EACA,KAAA,GAAkB,EAAC,EACrB;AACE,IAAA,KAAA,CAAM,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,KAAK,CAAA;AAJ5B,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAKP,IAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAAA,EAChB;AACJ,CAAA;;;ACnBO,IAAM,0BAAN,MAA0D;AAAA,EACpD,IAAA,GAAO,mBAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EAEX,OAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EAER,WAAA,CAAY,MAAA,GAAwC,EAAC,EAAG;AACpD,IAAA,IAAA,CAAK,OAAA,GAAA,CACD,MAAA,CAAO,OAAA,IACP,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,OAAA,CAAQ,GAAA,CAAI,eAAA,IACZ,2BAAA,EACF,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AAEnB,IAAA,IAAA,CAAK,MAAA,GAAS,OAAO,MAAA,IAAU,OAAA,CAAQ,IAAI,cAAA,IAAkB,OAAA,CAAQ,IAAI,cAAA,IAAkB,EAAA;AAC3F,IAAA,IAAA,CAAK,YAAA,GAAe,OAAO,YAAA,IAAgB,OAAA,CAAQ,IAAI,YAAA,IAAgB,OAAA,CAAQ,IAAI,YAAA,IAAgB,eAAA;AAEnG,IAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,cAAA,IAAkB,EAAC;AAChD,IAAA,IAAA,CAAK,SAAA,GAAY,OAAO,OAAA,IAAW,GAAA;AACnC,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,KAAA,IAAS,EAAE,UAAA,EAAY,CAAA,EAAG,aAAa,GAAA,EAAK;AAAA,EAC1E;AAAA,EAEA,MAAc,cAAA,CAAe,GAAA,EAAa,IAAA,EAAsC;AAC5E,IAAA,IAAI,QAAA,GAAW,CAAA;AACf,IAAA,OAAO,QAAA,IAAY,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AAC5C,MAAA,IAAI;AACA,QAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,QAAA,MAAM,YAAY,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,SAAS,CAAA;AAErE,QAAA,MAAM,OAAA,GAAkC;AAAA,UACpC,eAAA,EAAiB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,UACtC,GAAG,IAAA,CAAK;AAAA,SACZ;AAEA,QAAA,IAAI,KAAK,OAAA,EAAS;AACd,UAAA,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,IAAA,CAAK,OAAO,CAAA;AAAA,QACvC;AAGA,QAAA,IAAI,OAAA,CAAQ,cAAc,CAAA,KAAM,OAAA,EAAS;AACrC,UAAA,OAAO,QAAQ,cAAc,CAAA;AAAA,QACjC,CAAA,MAAA,IAAW,CAAC,OAAA,CAAQ,cAAc,CAAA,EAAG;AACjC,UAAA,OAAA,CAAQ,cAAc,CAAA,GAAI,kBAAA;AAAA,QAC9B;AAEA,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,UAC9B,GAAG,IAAA;AAAA,UACH,QAAQ,UAAA,CAAW,MAAA;AAAA,UACnB;AAAA,SACH,CAAA;AAED,QAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,QAAA,IAAI,QAAA,CAAS,IAAI,OAAO,QAAA;AAGxB,QAAA,IAAA,CAAK,QAAA,CAAS,WAAW,GAAA,IAAO,QAAA,CAAS,WAAW,GAAA,KAAQ,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AAChG,UAAA,QAAA,EAAA;AACA,UAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,CAAY,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AACrE,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,UAAA;AAAA,QACJ;AAEA,QAAA,MAAM,YAAY,MAAM,QAAA,CAAS,MAAK,CAAE,KAAA,CAAM,MAAM,EAAE,CAAA;AACtD,QAAA,IAAI,OAAA,GAAU,uDAAA;AACd,QAAA,IAAI,KAAA,GAAQ,CAAC,6DAA6D,CAAA;AAE1E,QAAA,IAAI,QAAA,CAAS,WAAW,GAAA,EAAK;AACzB,UAAA,OAAA,GAAU,2DAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,sFAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAChC,UAAA,OAAA,GAAU,gDAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,uEAAA;AAAA,YACA,oEAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ,CAAA,MAAA,IAAW,QAAA,CAAS,MAAA,KAAW,GAAA,EAAK;AAChC,UAAA,OAAA,GAAU,sBAAA;AACV,UAAA,KAAA,GAAQ;AAAA,YACJ,qCAAA;AAAA,YACA;AAAA,WACJ;AAAA,QACJ;AAEA,QAAA,MAAM,IAAI,kBAAA;AAAA,UACN,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,EAAA,EAAK,SAAS,CAAA,CAAA;AAAA,UACrC,YAAA;AAAA,UACA,EAAE,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,MAAM,SAAA,EAAU;AAAA,UAC3C,OAAA;AAAA,UACA;AAAA,SACJ;AAAA,MACJ,SAAS,GAAA,EAAK;AACV,QAAA,IAAI,GAAA,YAAe,oBAAoB,MAAM,GAAA;AAE7C,QAAA,IAAI,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,UAAA,EAAY;AACxC,UAAA,QAAA,EAAA;AACA,UAAA,MAAM,KAAA,GAAQ,KAAK,WAAA,CAAY,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,WAAW,CAAC,CAAA;AACrE,UAAA,MAAM,IAAI,OAAA,CAAQ,CAAA,OAAA,KAAW,UAAA,CAAW,OAAA,EAAS,KAAK,CAAC,CAAA;AACvD,UAAA;AAAA,QACJ;AAEA,QAAA,MAAM,IAAI,kBAAA;AAAA,UACN,2BAA2B,GAAA,YAAe,KAAA,GAAQ,IAAI,OAAA,GAAU,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAAA,UAC3E,eAAA;AAAA,UACA,GAAA;AAAA,UACA,4DAAA;AAAA,UACA;AAAA,YACI,iCAAA;AAAA,YACA,yDAAA;AAAA,YACA;AAAA;AACJ,SACJ;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,MAAM,IAAI,kBAAA;AAAA,MACN,sBAAA;AAAA,MACA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,mDAAA;AAAA,MACA,CAAC,kEAAkE;AAAA,KACvE;AAAA,EACJ;AAAA,EAEQ,gBAAgB,MAAA,EAA2D;AAC/E,IAAA,IAAI,CAAC,QAAQ,OAAO,MAAA;AACpB,IAAA,MAAM,CAAA,GAAI,OAAO,WAAA,EAAY;AAC7B,IAAA,IAAI,CAAA,KAAM,YAAA,IAAgB,CAAA,KAAM,WAAA,EAAa,OAAO,WAAA;AACpD,IAAA,IAAI,CAAA,KAAM,QAAA,IAAY,CAAA,KAAM,YAAA,EAAc,OAAO,YAAA;AACjD,IAAA,IAAI,CAAA,KAAM,gBAAA,IAAoB,CAAA,KAAM,OAAA,EAAS,OAAO,OAAA;AACpD,IAAA,OAAO,MAAA;AAAA,EACX;AAAA,EAEQ,aAAa,OAAA,EAAqC;AACtD,IAAA,MAAM,OAAA,GAAmC;AAAA,MACrC,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,MAC7B,UAAU,OAAA,CAAQ;AAAA,KACtB;AACA,IAAA,IAAI,OAAA,CAAQ,SAAA,KAAc,MAAA,EAAW,OAAA,CAAQ,aAAa,OAAA,CAAQ,SAAA;AAClE,IAAA,IAAI,OAAA,CAAQ,WAAA,KAAgB,MAAA,EAAW,OAAA,CAAQ,cAAc,OAAA,CAAQ,WAAA;AACrE,IAAA,IAAI,OAAA,CAAQ,aAAA,EAAe,MAAA,EAAQ,OAAA,CAAQ,OAAO,OAAA,CAAQ,aAAA;AAC1D,IAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,OAAA,CAAQ,MAAA,GAAS,IAAA;AAErC,IAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA,EAAG;AAC3C,MAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,MAAM;AAAA,QACpC,IAAA,EAAM,UAAA;AAAA,QACN,QAAA,EAAU;AAAA,UACN,MAAM,CAAA,CAAE,IAAA;AAAA,UACR,aAAa,CAAA,CAAE,WAAA;AAAA,UACf,YAAY,CAAA,CAAE;AAAA;AAClB,OACJ,CAAE,CAAA;AAAA,IACN;AAEA,IAAA,OAAO,OAAA;AAAA,EACX;AAAA,EAEA,MAAM,SAAS,OAAA,EAAyD;AACpE,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,YAAA,CAAa,OAAO,CAAA;AAEzC,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACT,MAAA,MAAM,IAAI,kBAAA,CAAmB,0CAAA,EAA4C,kBAAA,EAAoB,IAAI,CAAA;AAAA,IACrG;AAEA,IAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AACvB,IAAA,IAAI,SAAA;AAEJ,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,EAAG;AACrD,MAAA,SAAA,GAAY,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,EAAA,MAAa;AAAA,QAC7C,IAAI,EAAA,CAAG,EAAA;AAAA,QACP,IAAA,EAAM,GAAG,QAAA,CAAS,IAAA;AAAA,QAClB,SAAA,EAAW,GAAG,QAAA,CAAS;AAAA,OAC3B,CAAE,CAAA;AAAA,IACN;AAEA,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,QAAQ,OAAA,IAAW,EAAA;AAAA,MAC5B,SAAA;AAAA,MACA,YAAA,EAAc,IAAA,CAAK,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAA,MACvD,KAAA,EAAO;AAAA,QACH,YAAA,EAAc,IAAA,CAAK,KAAA,EAAO,aAAA,IAAiB,CAAA;AAAA,QAC3C,gBAAA,EAAkB,IAAA,CAAK,KAAA,EAAO,iBAAA,IAAqB,CAAA;AAAA,QACnD,WAAA,EAAa,IAAA,CAAK,KAAA,EAAO,YAAA,IAAgB;AAAA,OAC7C;AAAA,MACA,WAAA,EAAa;AAAA,KACjB;AAAA,EACJ;AAAA,EAEA,OAAO,OAAO,OAAA,EAA4D;AACtE,IAAA,MAAM,OAAA,GAAU,KAAK,YAAA,CAAa,EAAE,GAAG,OAAA,EAAS,MAAA,EAAQ,MAAM,CAAA;AAE9D,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAChB,MAAA,MAAM,IAAI,kBAAA,CAAmB,uBAAA,EAAyB,cAAc,CAAA;AAAA,IACxE;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,CAAY,OAAO,CAAA;AACvC,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,EAAM;AACT,QAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAK,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AAEV,QAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAC/B,QAAA,MAAA,GAAS,KAAA,CAAM,KAAI,IAAK,EAAA;AAExB,QAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,UAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,UAAA,IAAI,CAAC,OAAA,IAAW,OAAA,KAAY,cAAA,EAAgB;AAC5C,UAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC9B,YAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAA;AAC/B,YAAA,IAAI,IAAA;AACJ,YAAA,IAAI;AACA,cAAA,IAAA,GAAO,IAAA,CAAK,MAAM,OAAO,CAAA;AAAA,YAC7B,SAAS,GAAA,EAAK;AACV,cAAA;AAAA,YACJ;AAEA,YAAA,MAAM,MAAA,GAAS,IAAA,CAAK,OAAA,GAAU,CAAC,CAAA;AAC/B,YAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,YAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,EAAO,OAAA,IAAW,EAAA;AACvC,YAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,EAAO,UAAA,GAAa,CAAC,CAAA;AAClD,YAAA,IAAI,aAAA;AAEJ,YAAA,IAAI,aAAA,EAAe;AACf,cAAA,aAAA,GAAgB;AAAA,gBACZ,IAAI,aAAA,CAAc,EAAA;AAAA,gBAClB,IAAA,EAAM,cAAc,QAAA,EAAU,IAAA;AAAA,gBAC9B,SAAA,EAAW,cAAc,QAAA,EAAU;AAAA,eACvC;AAAA,YACJ;AAEA,YAAA,MAAM,UAAA,GAAa,MAAA,CAAO,aAAA,KAAkB,IAAA,IAAQ,OAAO,aAAA,KAAkB,KAAA,CAAA;AAE7E,YAAA,MAAM;AAAA,cACF,KAAA;AAAA,cACA,QAAA,EAAU,UAAA;AAAA,cACV,GAAI,aAAA,IAAiB,EAAE,aAAA,EAAc;AAAA,cACrC,GAAI,cAAc,EAAE,YAAA,EAAc,KAAK,eAAA,CAAgB,MAAA,CAAO,aAAa,CAAA;AAAE,aACjF;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAA,SAAE;AACE,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,eAAe,IAAA,EAAsB;AACjC,IAAA,OAAO,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAC,CAAA;AAAA,EACpC;AAAA,EAEA,YAAA,GAA0B;AACtB,IAAA,OAAO;AAAA,MACH,cAAA,EAAgB,IAAA;AAAA,MAChB,aAAA,EAAe,IAAA;AAAA,MACf,aAAA,EAAe;AAAA,KACnB;AAAA,EACJ;AAAA,EAEA,MAAM,WAAA,GAAgC;AAClC,IAAA,IAAI;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,cAAA,CAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,OAAA,CAAA,EAAW,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AAClF,MAAA,OAAO,IAAA,CAAK,EAAA;AAAA,IAChB,CAAA,CAAA,MAAQ;AACJ,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,OAAA,EAA+D;AAC5E,IAAA,MAAM,YAAA,GAAe,IAAA,CAAK,OAAA,CAAQ,WAAW,CAAA;AAC7C,IAAA,MAAM,KAAA,GAAQ,IAAI,UAAA,CAAW,YAAA,CAAa,MAAM,CAAA;AAChD,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,YAAA,CAAa,QAAQ,CAAA,EAAA,EAAK;AAC1C,MAAA,KAAA,CAAM,CAAC,CAAA,GAAI,YAAA,CAAa,UAAA,CAAW,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,CAAC,KAAK,GAAG,EAAE,IAAA,EAAM,OAAA,CAAQ,QAAA,EAAU,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,IAAI,QAAA,EAAS;AAC9B,IAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,IAAA,EAAM,YAAY,CAAA;AAC1C,IAAA,QAAA,CAAS,MAAA,CAAO,OAAA,EAAS,OAAA,CAAQ,KAAA,IAAS,WAAW,CAAA;AACrD,IAAA,IAAI,QAAQ,QAAA,EAAU,QAAA,CAAS,MAAA,CAAO,UAAA,EAAY,QAAQ,QAAQ,CAAA;AAElE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,qBAAA,CAAA,EAAyB;AAAA,MAC/E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS;AAAA,QACL,cAAA,EAAgB;AAAA;AACpB,KACH,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,YAAY,IAAA,CAAK,IAAA;AAAA,MACjB,UAAA,EAAY,CAAA;AAAA;AAAA,MACZ,QAAA,EAAU,IAAA,CAAK,QAAA,IAAY,OAAA,CAAQ,QAAA,IAAY;AAAA,KACnD;AAAA,EACJ;AAAA,EAEA,OAAO,WAAW,OAAA,EAAsD;AACpE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,aAAA,CAAA,EAAiB;AAAA,MACvE,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,KAAA,EAAO,QAAQ,KAAA,IAAS,OAAA;AAAA,QACxB,OAAO,OAAA,CAAQ,IAAA;AAAA,QACf,KAAA,EAAO,QAAQ,OAAA,IAAW,OAAA;AAAA,QAC1B,eAAA,EAAiB,QAAQ,MAAA,IAAU;AAAA,OACtC;AAAA,KACJ,CAAA;AAED,IAAA,IAAI,CAAC,QAAA,CAAS,IAAA,QAAY,IAAI,kBAAA,CAAmB,4BAA4B,cAAc,CAAA;AAE3F,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,IAAA,IAAI;AACA,MAAA,OAAO,IAAA,EAAM;AACT,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,QAAA,IAAI,IAAA,EAAM;AACV,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,MAAM,SAAS,IAAI,WAAA,CAAY,QAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AACrD,UAAA,MAAM,EAAE,WAAA,EAAa,IAAA,CAAK,MAAM,CAAA,EAAE;AAAA,QACtC;AAAA,MACJ;AAAA,IACJ,CAAA,SAAE;AACE,MAAA,MAAA,CAAO,WAAA,EAAY;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,OAAA,EAAiD;AACjE,IAAA,MAAM,OAAA,GAAU;AAAA,MACZ,KAAA,EAAO,OAAA,CAAQ,KAAA,IAAS,IAAA,CAAK,YAAA;AAAA,MAC7B,QAAA,EAAU;AAAA,QACN;AAAA,UACI,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS;AAAA,YACL,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,OAAA,CAAQ,UAAU,qBAAA,EAAsB;AAAA,YAC9D;AAAA,cACI,IAAA,EAAM,WAAA;AAAA,cACN,SAAA,EAAW;AAAA,gBACP,GAAA,EAAK,CAAA,uBAAA,EAA0B,OAAA,CAAQ,WAAW,CAAA;AAAA;AACtD;AACJ;AACJ;AACJ;AACJ,KACJ;AAEA,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,iBAAA,CAAA,EAAqB;AAAA,MAC3E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,KAC/B,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,OAAO;AAAA,MACH,WAAA,EAAa,IAAA,CAAK,OAAA,CAAQ,CAAC,EAAE,OAAA,CAAQ,OAAA;AAAA,MACrC,SAAS;AAAC;AAAA,KACd;AAAA,EACJ;AAAA,EAEA,MAAM,cAAc,OAAA,EAAqD;AACrE,IAAA,MAAM,WAAW,MAAM,IAAA,CAAK,eAAe,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,mBAAA,CAAA,EAAuB;AAAA,MAC7E,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,QACjB,QAAQ,OAAA,CAAQ,MAAA;AAAA,QAChB,KAAA,EAAO,QAAQ,KAAA,IAAS,UAAA;AAAA,QACxB,CAAA,EAAG,CAAA;AAAA,QACH,IAAA,EAAM,QAAQ,UAAA,IAAc;AAAA,OAC/B;AAAA,KACJ,CAAA;AAED,IAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,IAAA,IAAI,MAAM,KAAA,EAAO;AACb,MAAA,MAAM,IAAI,kBAAA,CAAmB,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,2BAA2B,iBAAiB,CAAA;AAAA,IACnG;AACA,IAAA,MAAM,KAAA,GAAQ,IAAA,EAAM,IAAA,GAAO,CAAC,KAAK,EAAC;AAClC,IAAA,MAAM,QAAA,GACF,KAAA,CAAM,GAAA,KACL,KAAA,CAAM,QAAA,GAAW,CAAA,sBAAA,EAAyB,KAAA,CAAM,QAAQ,CAAA,CAAA,GAAK,IAAA,CAAA,KAC7D,KAAA,CAAM,SAAA,EAAW,GAAA,IAAO,IAAA,CAAA;AAC7B,IAAA,IAAI,CAAC,QAAA,EAAU;AACX,MAAA,MAAM,IAAI,kBAAA,CAAmB,0DAAA,EAA4D,iBAAiB,CAAA;AAAA,IAC9G;AACA,IAAA,OAAO;AAAA,MACH,QAAA;AAAA,MACA,eAAe,KAAA,CAAM;AAAA,KACzB;AAAA,EACJ;AACJ","file":"index.mjs","sourcesContent":["/**\n * Base class for all custom errors thrown by lemura.\n *\n * @example\n * throw new LemuraError('Something went wrong', 'UNKNOWN_ERROR');\n */\nexport class LemuraError extends Error {\n /**\n * @param message - The error message\n * @param code - The error code for programmatic handling\n * @param problem - A clear description of the problem for the end user\n * @param hints - A list of suggestions to resolve the issue\n */\n constructor(\n message: string,\n public readonly code: string,\n public readonly problem?: string,\n public readonly hints: string[] = []\n ) {\n super(message);\n this.name = 'LemuraError';\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** Error thrown when context exceeds max tokens and cannot be compressed further */\nexport class LemuraContextOverflowError extends LemuraError {\n constructor(message: string) {\n super(message, 'CONTEXT_OVERFLOW');\n this.name = 'LemuraContextOverflowError';\n }\n}\n\n/** Error thrown when a requested tool is not found in the registry */\nexport class LemuraToolNotFoundError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_NOT_FOUND');\n this.name = 'LemuraToolNotFoundError';\n }\n}\n\n/** Error thrown when an adapter encounters an API or formatting issue */\nexport class LemuraAdapterError extends LemuraError {\n constructor(\n message: string,\n code = 'ADAPTER_ERROR',\n public cause?: any,\n problem?: string,\n hints: string[] = []\n ) {\n super(message, code, problem, hints);\n this.name = 'LemuraAdapterError';\n }\n}\n\n/** Error thrown when a skill cannot be parsed or injected */\nexport class LemuraSkillInjectionError extends LemuraError {\n constructor(message: string) {\n super(message, 'SKILL_INJECTION_FAILED');\n this.name = 'LemuraSkillInjectionError';\n }\n}\n\n/** Error thrown when the ReAct loop exceeds the configured max iterations */\nexport class LemuraMaxIterationsError extends LemuraError {\n constructor(message: string) {\n super(message, 'MAX_ITERATIONS_EXCEEDED');\n this.name = 'LemuraMaxIterationsError';\n }\n}\n\n/** Error thrown when tool parameters fail JSON schema validation */\nexport class LemuraToolValidationError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_VALIDATION_FAILED');\n this.name = 'LemuraToolValidationError';\n }\n}\n\n/** Error thrown when a tool execute function exceeds its timeout */\nexport class LemuraToolTimeoutError extends LemuraError {\n constructor(message: string) {\n super(message, 'TOOL_TIMEOUT');\n this.name = 'LemuraToolTimeoutError';\n }\n}\n\n/** Base error thrown for any MCP server communication failure */\nexport class LemuraMCPError extends LemuraError {\n constructor(message: string, code = 'MCP_ERROR', problem?: string, hints: string[] = []) {\n super(message, code, problem, hints);\n this.name = 'LemuraMCPError';\n }\n}\n\n/** Error thrown when an MCP server cannot be connected to (spawn failure, network error, init failure) */\nexport class LemuraMCPConnectionError extends LemuraMCPError {\n constructor(message: string, problem?: string, hints: string[] = []) {\n super(message, 'MCP_CONNECTION_FAILED', problem, hints);\n this.name = 'LemuraMCPConnectionError';\n }\n}\n\n/** Error thrown when a call to an MCP server tool exceeds the configured timeout */\nexport class LemuraMCPTimeoutError extends LemuraMCPError {\n constructor(message: string) {\n super(message, 'MCP_TOOL_TIMEOUT');\n this.name = 'LemuraMCPTimeoutError';\n }\n}\n","import {\n IProviderAdapter,\n CompletionRequest,\n CompletionResponse,\n CompletionChunk,\n TranscriptionRequest,\n TranscriptionResponse,\n SynthesisRequest,\n AudioChunk,\n VisionRequest,\n VisionResponse,\n ImageGenRequest,\n ImageGenResponse,\n ModelInfo,\n LemuraAdapterError,\n} from '../types/index.js';\n\nexport interface RetryConfig {\n maxRetries: number;\n baseDelayMs: number;\n}\n\nexport interface OpenAICompatibleAdapterConfig {\n baseUrl?: string;\n apiKey?: string;\n defaultModel?: string;\n defaultHeaders?: Record<string, string>;\n timeout?: number;\n retry?: RetryConfig;\n}\n\n/**\n * Reference implementation of an OpenAI-compatible provider adapter.\n */\nexport class OpenAICompatibleAdapter implements IProviderAdapter {\n readonly name = 'openai_compatible';\n readonly version = '1.2.0';\n\n private baseUrl: string;\n private apiKey: string;\n private defaultModel: string;\n private defaultHeaders: Record<string, string>;\n private timeoutMs: number;\n private retryConfig: RetryConfig;\n\n constructor(config: OpenAICompatibleAdapterConfig = {}) {\n this.baseUrl = (\n config.baseUrl ??\n process.env.LEMURA_BASE_URL ??\n process.env.OPENAI_BASE_URL ??\n 'https://api.openai.com/v1'\n ).replace(/\\/$/, '');\n\n this.apiKey = config.apiKey ?? process.env.LEMURA_API_KEY ?? process.env.OPENAI_API_KEY ?? '';\n this.defaultModel = config.defaultModel ?? process.env.LEMURA_MODEL ?? process.env.OPENAI_MODEL ?? 'gpt-3.5-turbo';\n\n this.defaultHeaders = config.defaultHeaders || {};\n this.timeoutMs = config.timeout || 30000;\n this.retryConfig = config.retry || { maxRetries: 2, baseDelayMs: 1000 };\n }\n\n private async fetchWithRetry(url: string, init: RequestInit): Promise<Response> {\n let attempts = 0;\n while (attempts <= this.retryConfig.maxRetries) {\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.timeoutMs);\n\n const headers: Record<string, string> = {\n 'Authorization': `Bearer ${this.apiKey}`,\n ...this.defaultHeaders,\n };\n\n if (init.headers) {\n Object.assign(headers, init.headers);\n }\n\n // Don't set Content-Type if it's 'unset' (for FormData)\n if (headers['Content-Type'] === 'unset') {\n delete headers['Content-Type'];\n } else if (!headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n\n const response = await fetch(url, {\n ...init,\n signal: controller.signal,\n headers,\n });\n\n clearTimeout(timeoutId);\n\n if (response.ok) return response;\n\n // Retry on 429 and 503\n if ((response.status === 429 || response.status === 503) && attempts < this.retryConfig.maxRetries) {\n attempts++;\n const delay = this.retryConfig.baseDelayMs * Math.pow(2, attempts - 1);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n const errorText = await response.text().catch(() => '');\n let problem = 'The server replied with an error during the API call.';\n let hints = ['Check the API documentation for the provider you are using.'];\n\n if (response.status === 401) {\n problem = 'Authentication failed. The API key is invalid or missing.';\n hints = [\n 'Ensure your API key is correctly configured in the adapter or environment variables.',\n 'Check if the API key has expired or been revoked.'\n ];\n } else if (response.status === 404) {\n problem = 'The requested resource or model was not found.';\n hints = [\n 'Verify that the baseUrl is correct (e.g., https://api.openai.com/v1).',\n 'Check if the model name is correct and available for your account.',\n 'Ensure you are not appending extra paths to the baseUrl.'\n ];\n } else if (response.status === 429) {\n problem = 'Rate limit exceeded.';\n hints = [\n 'Wait a few seconds before retrying.',\n 'Check your usage limits and billing status on the provider dashboard.'\n ];\n }\n\n throw new LemuraAdapterError(\n `HTTP ${response.status}: ${errorText}`,\n 'HTTP_ERROR',\n { status: response.status, body: errorText },\n problem,\n hints\n );\n } catch (err) {\n if (err instanceof LemuraAdapterError) throw err;\n\n if (attempts < this.retryConfig.maxRetries) {\n attempts++;\n const delay = this.retryConfig.baseDelayMs * Math.pow(2, attempts - 1);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n throw new LemuraAdapterError(\n `Network request failed: ${err instanceof Error ? err.message : String(err)}`,\n 'NETWORK_ERROR',\n err,\n 'A network error occurred while connecting to the provider.',\n [\n 'Check your internet connection.',\n 'Verify that the baseUrl is reachable from your network.',\n 'Check for proxy or firewall settings that might block the request.'\n ]\n );\n }\n }\n throw new LemuraAdapterError(\n 'Max retries exceeded',\n 'MAX_RETRIES',\n undefined,\n 'The request failed after multiple retry attempts.',\n ['Check if the provider service is down or experiencing high load.']\n );\n }\n\n private mapFinishReason(reason: string | null): CompletionResponse['finishReason'] {\n if (!reason) return 'stop';\n const r = reason.toLowerCase();\n if (r === 'tool_calls' || r === 'tool_call') return 'tool_call';\n if (r === 'length' || r === 'max_tokens') return 'max_tokens';\n if (r === 'content_filter' || r === 'error') return 'error';\n return 'stop';\n }\n\n private buildPayload(request: CompletionRequest): unknown {\n const payload: Record<string, unknown> = {\n model: request.model || this.defaultModel,\n messages: request.messages,\n };\n if (request.maxTokens !== undefined) payload.max_tokens = request.maxTokens;\n if (request.temperature !== undefined) payload.temperature = request.temperature;\n if (request.stopSequences?.length) payload.stop = request.stopSequences;\n if (request.stream) payload.stream = true;\n\n if (request.tools && request.tools.length > 0) {\n payload.tools = request.tools.map(t => ({\n type: 'function',\n function: {\n name: t.name,\n description: t.description,\n parameters: t.parameters,\n }\n }));\n }\n\n return payload;\n }\n\n async complete(request: CompletionRequest): Promise<CompletionResponse> {\n const payload = this.buildPayload(request);\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n const data = await response.json();\n const choice = data.choices?.[0];\n if (!choice) {\n throw new LemuraAdapterError('Invalid response format: missing choices', 'INVALID_RESPONSE', data);\n }\n\n const message = choice.message;\n let toolCalls;\n\n if (message.tool_calls && message.tool_calls.length > 0) {\n toolCalls = message.tool_calls.map((tc: any) => ({\n id: tc.id,\n name: tc.function.name,\n arguments: tc.function.arguments,\n }));\n }\n\n return {\n content: message.content || '',\n toolCalls,\n finishReason: this.mapFinishReason(choice.finish_reason),\n usage: {\n promptTokens: data.usage?.prompt_tokens || 0,\n completionTokens: data.usage?.completion_tokens || 0,\n totalTokens: data.usage?.total_tokens || 0,\n },\n rawResponse: data\n };\n }\n\n async *stream(request: CompletionRequest): AsyncIterable<CompletionChunk> {\n const payload = this.buildPayload({ ...request, stream: true });\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n if (!response.body) {\n throw new LemuraAdapterError('Response body is null', 'STREAM_ERROR');\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder('utf-8');\n let buffer = '';\n\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() || '';\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (!trimmed || trimmed === 'data: [DONE]') continue;\n if (trimmed.startsWith('data: ')) {\n const jsonStr = trimmed.slice(6);\n let data;\n try {\n data = JSON.parse(jsonStr);\n } catch (err) {\n continue;\n }\n\n const choice = data.choices?.[0];\n if (!choice) continue;\n\n const delta = choice.delta?.content || '';\n const toolCallBlock = choice.delta?.tool_calls?.[0];\n let toolCallDelta;\n\n if (toolCallBlock) {\n toolCallDelta = {\n id: toolCallBlock.id,\n name: toolCallBlock.function?.name,\n arguments: toolCallBlock.function?.arguments,\n };\n }\n\n const isFinished = choice.finish_reason !== null && choice.finish_reason !== undefined;\n\n yield {\n delta,\n finished: isFinished,\n ...(toolCallDelta && { toolCallDelta }),\n ...(isFinished && { finishReason: this.mapFinishReason(choice.finish_reason) })\n };\n }\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n estimateTokens(text: string): number {\n return Math.ceil(text.length / 4);\n }\n\n getModelInfo(): ModelInfo {\n return {\n supportsVision: true,\n supportsTools: true,\n contextWindow: 128000\n };\n }\n\n async healthCheck(): Promise<boolean> {\n try {\n const resp = await this.fetchWithRetry(`${this.baseUrl}/models`, { method: 'GET' });\n return resp.ok;\n } catch {\n return false;\n }\n }\n\n async transcribe(request: TranscriptionRequest): Promise<TranscriptionResponse> {\n const binaryString = atob(request.audioBase64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n const blob = new Blob([bytes], { type: request.mimeType });\n const formData = new FormData();\n formData.append('file', blob, 'audio.webm');\n formData.append('model', request.model || 'whisper-1');\n if (request.language) formData.append('language', request.language);\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/audio/transcriptions`, {\n method: 'POST',\n body: formData,\n headers: {\n 'Content-Type': 'unset'\n }\n });\n\n const data = await response.json();\n return {\n transcript: data.text,\n confidence: 1.0, // OpenAI doesn't return confidence in standard response\n language: data.language || request.language || 'en'\n };\n }\n\n async *synthesize(request: SynthesisRequest): AsyncIterable<AudioChunk> {\n const response = await this.fetchWithRetry(`${this.baseUrl}/audio/speech`, {\n method: 'POST',\n body: JSON.stringify({\n model: request.model || 'tts-1',\n input: request.text,\n voice: request.voiceId || 'alloy',\n response_format: request.format || 'mp3'\n })\n });\n\n if (!response.body) throw new LemuraAdapterError('No response body for TTS', 'STREAM_ERROR');\n\n const reader = response.body.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n if (value) {\n const binary = new TextDecoder('latin1').decode(value);\n yield { audioBase64: btoa(binary) };\n }\n }\n } finally {\n reader.releaseLock();\n }\n }\n\n async describeImage(request: VisionRequest): Promise<VisionResponse> {\n const payload = {\n model: request.model || this.defaultModel,\n messages: [\n {\n role: 'user',\n content: [\n { type: 'text', text: request.prompt || 'Describe this image' },\n {\n type: 'image_url',\n image_url: {\n url: `data:image/jpeg;base64,${request.imageBase64}`\n }\n }\n ]\n }\n ]\n };\n\n const response = await this.fetchWithRetry(`${this.baseUrl}/chat/completions`, {\n method: 'POST',\n body: JSON.stringify(payload)\n });\n\n const data = await response.json();\n return {\n description: data.choices[0].message.content,\n objects: [] // OpenAI doesn't return structured objects in standard vision call\n };\n }\n\n async generateImage(request: ImageGenRequest): Promise<ImageGenResponse> {\n const response = await this.fetchWithRetry(`${this.baseUrl}/images/generations`, {\n method: 'POST',\n body: JSON.stringify({\n prompt: request.prompt,\n model: request.model || 'dall-e-3',\n n: 1,\n size: request.dimensions || '1024x1024'\n })\n });\n\n const data = await response.json();\n if (data?.error) {\n throw new LemuraAdapterError(data.error.message || 'Image generation failed', 'IMAGE_GEN_ERROR');\n }\n const first = data?.data?.[0] || {};\n const imageUrl =\n first.url ||\n (first.b64_json ? `data:image/png;base64,${first.b64_json}` : null) ||\n (first.image_url?.url || null);\n if (!imageUrl) {\n throw new LemuraAdapterError('Image generation returned no image URL or base64 payload', 'IMAGE_GEN_EMPTY');\n }\n return {\n imageUrl,\n revisedPrompt: first.revised_prompt\n };\n }\n}\n"]}
@@ -1,4 +1,156 @@
1
- import { I as IToolDefinition } from './storage-DMcliVVj.mjs';
1
+ import { I as IRAGAdapter } from './rag-La_Bo-J8.mjs';
2
+ import { I as ILogger } from './logger-DxvKliuk.mjs';
3
+
4
+ /**
5
+ * Interface for Short Term Memory storage adapters.
6
+ * Implementations handle the persistence of STM variables.
7
+ */
8
+ interface IStorageAdapter {
9
+ /**
10
+ * Retrieves content by its unique ID.
11
+ *
12
+ * @param id - The unique identifier of the stored content
13
+ * @returns The content or undefined if it does not exist
14
+ */
15
+ get(id: string): Promise<any | undefined>;
16
+ /**
17
+ * Saves content returning a stable ID if none was provided, or using the given ID.
18
+ *
19
+ * @param id - An optional unique identifier. If not provided, one should be generated.
20
+ * @param content - The content to be stored
21
+ * @param metadata - Optional metadata about the content (e.g. type, size)
22
+ * @returns A promise that resolves to the ID under which it was saved
23
+ */
24
+ set(id: string | undefined, content: any, metadata?: Record<string, unknown>): Promise<string>;
25
+ /**
26
+ * Deletes content by its unique ID.
27
+ *
28
+ * @param id - The unique identifier of the content to delete
29
+ * @returns Resolves when deletion is complete
30
+ */
31
+ delete(id: string): Promise<void>;
32
+ /**
33
+ * Optional health check for remote storage adapters.
34
+ *
35
+ * @returns true if storage is accessible, false otherwise
36
+ */
37
+ healthCheck?(): Promise<boolean>;
38
+ }
39
+ /**
40
+ * Interface for Scratchpad storage adapters.
41
+ * Implementations handle persistence of the scratchpad per session.
42
+ */
43
+ interface IScratchpadAdapter {
44
+ /**
45
+ * Reads the scratchpad for a given session.
46
+ *
47
+ * @param sessionId - The session identifier
48
+ * @returns The scratchpad content or undefined if none exists
49
+ */
50
+ read(sessionId: string): Promise<string | undefined>;
51
+ /**
52
+ * Writes the scratchpad for a given session.
53
+ *
54
+ * @param sessionId - The session identifier
55
+ * @param content - The scratchpad content to store
56
+ */
57
+ write(sessionId: string, content: string): Promise<void>;
58
+ /**
59
+ * Clears the scratchpad for a given session.
60
+ *
61
+ * @param sessionId - The session identifier
62
+ */
63
+ clear(sessionId: string): Promise<void>;
64
+ /**
65
+ * Optional health check for remote storage adapters.
66
+ *
67
+ * @returns true if storage is accessible, false otherwise
68
+ */
69
+ healthCheck?(): Promise<boolean>;
70
+ }
71
+ /**
72
+ * Represents an item stored in Short Term Memory.
73
+ */
74
+ interface STMItem {
75
+ id: string;
76
+ content: any;
77
+ type: 'text' | 'blob';
78
+ metadata?: Record<string, unknown>;
79
+ }
80
+
81
+ interface STMRegistryConfig {
82
+ /**
83
+ * The storage backend to use for Short Term Memory items.
84
+ */
85
+ storage: IStorageAdapter;
86
+ /**
87
+ * The maximum number of tokens allowed for a 'text' type STM item.
88
+ * If an item exceeds this, it may be rejected or truncated.
89
+ * Default: 100000
90
+ */
91
+ maxTextTokens?: number;
92
+ }
93
+ /**
94
+ * Registry for Short Term Memory (STM).
95
+ * Manages the storage and retrieval of large context variables like long texts or blobs.
96
+ * Generates '[STM:uuid]' references to be used within the ReAct agent context.
97
+ */
98
+ declare class ShortTermMemoryRegistry {
99
+ private storage;
100
+ private maxTextTokens;
101
+ constructor(config: STMRegistryConfig);
102
+ /**
103
+ * Registers a new memory item and returns its reference string.
104
+ *
105
+ * @param content - The raw content to store
106
+ * @param type - The type of content ('text' or 'blob')
107
+ * @param metadata - Optional metadata (e.g. sandwich layers, original filename)
108
+ * @param estimateTokens - Optional function to estimate token count for 'text' type
109
+ * @returns A reference string formatted as '[STM:uuid]'
110
+ * @throws {Error} if a text item exceeds the maxTextTokens limit
111
+ */
112
+ register(content: any, type: 'text' | 'blob', metadata?: Record<string, unknown>, estimateTokens?: (text: string) => number): Promise<string>;
113
+ /**
114
+ * Updates an existing STM item's content or metadata.
115
+ *
116
+ * @param id - The UUID of the item to update
117
+ * @param updates - Partial updates to apply (content or metadata)
118
+ */
119
+ update(id: string, updates: {
120
+ content?: any;
121
+ metadata?: Record<string, unknown>;
122
+ }): Promise<void>;
123
+ /**
124
+ * Retrieves an STM item by its full reference string (e.g., '[STM:uuid]').
125
+ *
126
+ * @param ref - The full reference string
127
+ * @returns The STMItem or undefined if not found
128
+ */
129
+ getByRef(ref: string): Promise<STMItem | undefined>;
130
+ /**
131
+ * Deletes an STM item by its ID.
132
+ *
133
+ * @param id - The UUID of the item to delete
134
+ */
135
+ delete(id: string): Promise<void>;
136
+ }
137
+
138
+ interface ToolContext {
139
+ sessionId: string;
140
+ turnIndex: number;
141
+ logger: ILogger;
142
+ adapter?: IProviderAdapter;
143
+ ragAdapter?: IRAGAdapter;
144
+ stmRegistry?: ShortTermMemoryRegistry;
145
+ scratchpad?: string;
146
+ scratchpadAdapter?: IScratchpadAdapter;
147
+ }
148
+ interface IToolDefinition {
149
+ name: string;
150
+ description: string;
151
+ parameters: Record<string, unknown>;
152
+ execute(params: unknown, context: ToolContext): Promise<unknown>;
153
+ }
2
154
 
3
155
  interface ContentBlock {
4
156
  type: string;
@@ -104,11 +256,14 @@ interface CompletionChunk {
104
256
  finished: boolean;
105
257
  /** The reason generation stopped, typically present only on the final chunk */
106
258
  finishReason?: CompletionResponse['finishReason'];
259
+ /** Optional token usage stats, typically only present on the final chunk */
260
+ usage?: TokenUsage;
107
261
  }
108
262
  interface TranscriptionRequest {
109
263
  audioBase64: string;
110
264
  mimeType: string;
111
265
  language?: string;
266
+ model?: string;
112
267
  }
113
268
  interface TranscriptionResponse {
114
269
  transcript: string;
@@ -119,6 +274,7 @@ interface SynthesisRequest {
119
274
  text: string;
120
275
  voiceId: string;
121
276
  format: 'mp3' | 'wav' | 'pcm';
277
+ model?: string;
122
278
  }
123
279
  interface AudioChunk {
124
280
  audioBase64: string;
@@ -126,6 +282,7 @@ interface AudioChunk {
126
282
  interface VisionRequest {
127
283
  imageBase64: string;
128
284
  prompt?: string;
285
+ model?: string;
129
286
  }
130
287
  interface VisionResponse {
131
288
  description: string;
@@ -134,6 +291,7 @@ interface VisionResponse {
134
291
  interface ImageGenRequest {
135
292
  prompt: string;
136
293
  dimensions: string;
294
+ model?: string;
137
295
  }
138
296
  interface ImageGenResponse {
139
297
  imageUrl: string;
@@ -205,4 +363,4 @@ interface IProviderAdapter {
205
363
  healthCheck(): Promise<boolean>;
206
364
  }
207
365
 
208
- export type { AudioChunk as A, ContextWindow as C, IContextStrategy as I, ModelInfo as M, NormalizedMessage as N, SynthesisRequest as S, Turn as T, VisionRequest as V, ContentBlock as a, CompletionChunk as b, CompletionRequest as c, CompletionResponse as d, IProviderAdapter as e, ImageGenRequest as f, ImageGenResponse as g, TokenUsage as h, ToolCall as i, ToolResult as j, TranscriptionRequest as k, TranscriptionResponse as l, VisionResponse as m };
366
+ export { type AudioChunk as A, type ContextWindow as C, type IToolDefinition as I, type ModelInfo as M, type NormalizedMessage as N, ShortTermMemoryRegistry as S, type TranscriptionRequest as T, type VisionRequest as V, type IProviderAdapter as a, type IContextStrategy as b, type IScratchpadAdapter as c, type TranscriptionResponse as d, type SynthesisRequest as e, type VisionResponse as f, type ImageGenRequest as g, type ImageGenResponse as h, type Turn as i, type ContentBlock as j, type CompletionChunk as k, type CompletionRequest as l, type CompletionResponse as m, type IStorageAdapter as n, type STMItem as o, type STMRegistryConfig as p, type TokenUsage as q, type ToolCall as r, type ToolContext as s, type ToolResult as t };
@@ -1,4 +1,156 @@
1
- import { I as IToolDefinition } from './storage-BGu4Loao.js';
1
+ import { I as IRAGAdapter } from './rag-La_Bo-J8.js';
2
+ import { I as ILogger } from './logger-DxvKliuk.js';
3
+
4
+ /**
5
+ * Interface for Short Term Memory storage adapters.
6
+ * Implementations handle the persistence of STM variables.
7
+ */
8
+ interface IStorageAdapter {
9
+ /**
10
+ * Retrieves content by its unique ID.
11
+ *
12
+ * @param id - The unique identifier of the stored content
13
+ * @returns The content or undefined if it does not exist
14
+ */
15
+ get(id: string): Promise<any | undefined>;
16
+ /**
17
+ * Saves content returning a stable ID if none was provided, or using the given ID.
18
+ *
19
+ * @param id - An optional unique identifier. If not provided, one should be generated.
20
+ * @param content - The content to be stored
21
+ * @param metadata - Optional metadata about the content (e.g. type, size)
22
+ * @returns A promise that resolves to the ID under which it was saved
23
+ */
24
+ set(id: string | undefined, content: any, metadata?: Record<string, unknown>): Promise<string>;
25
+ /**
26
+ * Deletes content by its unique ID.
27
+ *
28
+ * @param id - The unique identifier of the content to delete
29
+ * @returns Resolves when deletion is complete
30
+ */
31
+ delete(id: string): Promise<void>;
32
+ /**
33
+ * Optional health check for remote storage adapters.
34
+ *
35
+ * @returns true if storage is accessible, false otherwise
36
+ */
37
+ healthCheck?(): Promise<boolean>;
38
+ }
39
+ /**
40
+ * Interface for Scratchpad storage adapters.
41
+ * Implementations handle persistence of the scratchpad per session.
42
+ */
43
+ interface IScratchpadAdapter {
44
+ /**
45
+ * Reads the scratchpad for a given session.
46
+ *
47
+ * @param sessionId - The session identifier
48
+ * @returns The scratchpad content or undefined if none exists
49
+ */
50
+ read(sessionId: string): Promise<string | undefined>;
51
+ /**
52
+ * Writes the scratchpad for a given session.
53
+ *
54
+ * @param sessionId - The session identifier
55
+ * @param content - The scratchpad content to store
56
+ */
57
+ write(sessionId: string, content: string): Promise<void>;
58
+ /**
59
+ * Clears the scratchpad for a given session.
60
+ *
61
+ * @param sessionId - The session identifier
62
+ */
63
+ clear(sessionId: string): Promise<void>;
64
+ /**
65
+ * Optional health check for remote storage adapters.
66
+ *
67
+ * @returns true if storage is accessible, false otherwise
68
+ */
69
+ healthCheck?(): Promise<boolean>;
70
+ }
71
+ /**
72
+ * Represents an item stored in Short Term Memory.
73
+ */
74
+ interface STMItem {
75
+ id: string;
76
+ content: any;
77
+ type: 'text' | 'blob';
78
+ metadata?: Record<string, unknown>;
79
+ }
80
+
81
+ interface STMRegistryConfig {
82
+ /**
83
+ * The storage backend to use for Short Term Memory items.
84
+ */
85
+ storage: IStorageAdapter;
86
+ /**
87
+ * The maximum number of tokens allowed for a 'text' type STM item.
88
+ * If an item exceeds this, it may be rejected or truncated.
89
+ * Default: 100000
90
+ */
91
+ maxTextTokens?: number;
92
+ }
93
+ /**
94
+ * Registry for Short Term Memory (STM).
95
+ * Manages the storage and retrieval of large context variables like long texts or blobs.
96
+ * Generates '[STM:uuid]' references to be used within the ReAct agent context.
97
+ */
98
+ declare class ShortTermMemoryRegistry {
99
+ private storage;
100
+ private maxTextTokens;
101
+ constructor(config: STMRegistryConfig);
102
+ /**
103
+ * Registers a new memory item and returns its reference string.
104
+ *
105
+ * @param content - The raw content to store
106
+ * @param type - The type of content ('text' or 'blob')
107
+ * @param metadata - Optional metadata (e.g. sandwich layers, original filename)
108
+ * @param estimateTokens - Optional function to estimate token count for 'text' type
109
+ * @returns A reference string formatted as '[STM:uuid]'
110
+ * @throws {Error} if a text item exceeds the maxTextTokens limit
111
+ */
112
+ register(content: any, type: 'text' | 'blob', metadata?: Record<string, unknown>, estimateTokens?: (text: string) => number): Promise<string>;
113
+ /**
114
+ * Updates an existing STM item's content or metadata.
115
+ *
116
+ * @param id - The UUID of the item to update
117
+ * @param updates - Partial updates to apply (content or metadata)
118
+ */
119
+ update(id: string, updates: {
120
+ content?: any;
121
+ metadata?: Record<string, unknown>;
122
+ }): Promise<void>;
123
+ /**
124
+ * Retrieves an STM item by its full reference string (e.g., '[STM:uuid]').
125
+ *
126
+ * @param ref - The full reference string
127
+ * @returns The STMItem or undefined if not found
128
+ */
129
+ getByRef(ref: string): Promise<STMItem | undefined>;
130
+ /**
131
+ * Deletes an STM item by its ID.
132
+ *
133
+ * @param id - The UUID of the item to delete
134
+ */
135
+ delete(id: string): Promise<void>;
136
+ }
137
+
138
+ interface ToolContext {
139
+ sessionId: string;
140
+ turnIndex: number;
141
+ logger: ILogger;
142
+ adapter?: IProviderAdapter;
143
+ ragAdapter?: IRAGAdapter;
144
+ stmRegistry?: ShortTermMemoryRegistry;
145
+ scratchpad?: string;
146
+ scratchpadAdapter?: IScratchpadAdapter;
147
+ }
148
+ interface IToolDefinition {
149
+ name: string;
150
+ description: string;
151
+ parameters: Record<string, unknown>;
152
+ execute(params: unknown, context: ToolContext): Promise<unknown>;
153
+ }
2
154
 
3
155
  interface ContentBlock {
4
156
  type: string;
@@ -104,11 +256,14 @@ interface CompletionChunk {
104
256
  finished: boolean;
105
257
  /** The reason generation stopped, typically present only on the final chunk */
106
258
  finishReason?: CompletionResponse['finishReason'];
259
+ /** Optional token usage stats, typically only present on the final chunk */
260
+ usage?: TokenUsage;
107
261
  }
108
262
  interface TranscriptionRequest {
109
263
  audioBase64: string;
110
264
  mimeType: string;
111
265
  language?: string;
266
+ model?: string;
112
267
  }
113
268
  interface TranscriptionResponse {
114
269
  transcript: string;
@@ -119,6 +274,7 @@ interface SynthesisRequest {
119
274
  text: string;
120
275
  voiceId: string;
121
276
  format: 'mp3' | 'wav' | 'pcm';
277
+ model?: string;
122
278
  }
123
279
  interface AudioChunk {
124
280
  audioBase64: string;
@@ -126,6 +282,7 @@ interface AudioChunk {
126
282
  interface VisionRequest {
127
283
  imageBase64: string;
128
284
  prompt?: string;
285
+ model?: string;
129
286
  }
130
287
  interface VisionResponse {
131
288
  description: string;
@@ -134,6 +291,7 @@ interface VisionResponse {
134
291
  interface ImageGenRequest {
135
292
  prompt: string;
136
293
  dimensions: string;
294
+ model?: string;
137
295
  }
138
296
  interface ImageGenResponse {
139
297
  imageUrl: string;
@@ -205,4 +363,4 @@ interface IProviderAdapter {
205
363
  healthCheck(): Promise<boolean>;
206
364
  }
207
365
 
208
- export type { AudioChunk as A, ContextWindow as C, IContextStrategy as I, ModelInfo as M, NormalizedMessage as N, SynthesisRequest as S, Turn as T, VisionRequest as V, ContentBlock as a, CompletionChunk as b, CompletionRequest as c, CompletionResponse as d, IProviderAdapter as e, ImageGenRequest as f, ImageGenResponse as g, TokenUsage as h, ToolCall as i, ToolResult as j, TranscriptionRequest as k, TranscriptionResponse as l, VisionResponse as m };
366
+ export { type AudioChunk as A, type ContextWindow as C, type IToolDefinition as I, type ModelInfo as M, type NormalizedMessage as N, ShortTermMemoryRegistry as S, type TranscriptionRequest as T, type VisionRequest as V, type IProviderAdapter as a, type IContextStrategy as b, type IScratchpadAdapter as c, type TranscriptionResponse as d, type SynthesisRequest as e, type VisionResponse as f, type ImageGenRequest as g, type ImageGenResponse as h, type Turn as i, type ContentBlock as j, type CompletionChunk as k, type CompletionRequest as l, type CompletionResponse as m, type IStorageAdapter as n, type STMItem as o, type STMRegistryConfig as p, type TokenUsage as q, type ToolCall as r, type ToolContext as s, type ToolResult as t };