{"version":3,"sources":["../../src/memory/slidingMemory.ts"],"names":["SlidingMemory","BaseMemory","messages","config","constructor","handlers","removalSelector","aliases","register","add","message","index","size","isOverflow","length","pipe","castArray","filter","isTruthy","forEach","indexOf","MemoryFatalError","context","splice","ensureRange","min","max","delete","removeFromArray","reset","createSnapshot","shallowCopy","loadSnapshot","state","Object","assign"],"mappings":";;;;;;;;;;AAiCO,MAAMA,sBAAsBC,mBAAAA,CAAAA;EAjCnC;;;AAkCkBC,EAAAA,QAAAA,GAA0B,EAAA;AAC1BC,EAAAA,MAAAA;AAEhBC,EAAAA,WAAAA,CAAYD,MAAkC,EAAA;AAC5C,IAAK,KAAA,EAAA;AACL,IAAA,IAAA,CAAKA,MAAS,GAAA;MACZ,GAAGA,MAAAA;MACHE,QAAU,EAAA;AACRC,QAAAA,eAAAA,EACEH,MAAOE,CAAAA,QAAAA,EAAUC,eAAoB,KAAA,CAACJ,QAA4B,KAAA;AAACA,UAAAA,QAAAA,CAAS,CAAA;;AAChF;AACF,KAAA;AACF;EAEA;AACE,IAAA,MAAMK,OAAU,GAAA;AAAC,MAAA;;AACjB,IAAA,IAAA,CAAKC,SAASD,OAAAA,CAAAA;AAChB;EAEA,MAAME,GAAAA,CAAIC,SAAsBC,KAAgB,EAAA;AAC9C,IAAA,MAAM,EAAEC,IAAAA,EAAMP,QAAQ,EAAA,GAAK,IAAKF,CAAAA,MAAAA;AAChC,IAAA,MAAMU,6BAAmB,MAAA,CAAA,MAAA,IAAA,CAAKX,QAASY,CAAAA,MAAAA,GAAS,IAAIF,IAAjC,EAAA,YAAA,CAAA;AAEnB,IAAA,IAAIC,YAAc,EAAA;AAChBE,MACEA,WAAA,CAAA,IAAA,CAAKb,QACLG,EAAAA,QAAAA,CAASC,eACTU,EAAAA,mBAAAA,EACAC,cAAOC,eAAAA,CAAAA,EACPC,cAAQ,CAAA,CAACT,QAAAA,KAAAA;AACP,QAAA,MAAMC,MAAQ,GAAA,IAAA,CAAKT,QAASkB,CAAAA,OAAAA,CAAQV,QAAAA,CAAAA;AACpC,QAAA,IAAIC,WAAU,EAAI,EAAA;AAChB,UAAA,MAAM,IAAIU,yBAAAA,CAAiB,CAAuC,mCAAA,CAAA,EAAA,EAAI,EAAA;YACpEC,OAAS,EAAA;cAAEZ,OAAAA,EAAAA,QAAAA;AAASR,cAAAA,QAAAA,EAAU,IAAKA,CAAAA;AAAS;WAC9C,CAAA;AACF;AACA,QAAKA,IAAAA,CAAAA,QAAAA,CAASqB,MAAOZ,CAAAA,MAAAA,EAAO,CAAA,CAAA;AAC9B,OAAA,CAAA,CAAA;AAGF,MAAA,IAAIE,YAAc,EAAA;AAChB,QAAM,MAAA,IAAIQ,0BACR,CAAyF,uFAAA,CAAA,CAAA;AAE7F;AACF;AAEAV,IAAAA,KAAAA,GAAQa,sBAAYb,CAAAA,KAAAA,IAAS,IAAKT,CAAAA,QAAAA,CAASY,MAAQ,EAAA;MAAEW,GAAK,EAAA,CAAA;AAAGC,MAAAA,GAAAA,EAAK,KAAKxB,QAASY,CAAAA;KAAO,CAAA;AACvF,IAAA,IAAA,CAAKZ,QAASqB,CAAAA,MAAAA,CAAOZ,KAAO,EAAA,CAAA,EAAGD,OAAAA,CAAAA;AACjC;AAEA,EAAA,MAAMiB,OAAOjB,OAAsB,EAAA;AACjC,IAAOkB,OAAAA,yBAAAA,CAAgB,IAAK1B,CAAAA,QAAAA,EAAUQ,OAAAA,CAAAA;AACxC;EAEAmB,KAAQ,GAAA;AACN,IAAA,IAAA,CAAK3B,SAASY,MAAS,GAAA,CAAA;AACzB;EAEAgB,cAAiB,GAAA;AACf,IAAO,OAAA;MAAE3B,MAAQ4B,EAAAA,qBAAAA,CAAY,KAAK5B,MAAM,CAAA;MAAGD,QAAU6B,EAAAA,qBAAAA,CAAY,KAAK7B,QAAQ;AAAE,KAAA;AAClF;AAEA8B,EAAAA,YAAAA,CAAaC,KAA+C,EAAA;AAC1DC,IAAOC,MAAAA,CAAAA,MAAAA,CAAO,MAAMF,KAAAA,CAAAA;AACtB;AACF","file":"slidingMemory.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseMessage } from \"@/llms/primitives/message.js\";\nimport { BaseMemory, MemoryFatalError } from \"@/memory/base.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { filter, forEach, isTruthy, pipe } from \"remeda\";\nimport { castArray, removeFromArray } from \"@/internals/helpers/array.js\";\nimport { RequiredNested } from \"@/internals/types.js\";\nimport { ensureRange } from \"@/internals/helpers/number.js\";\n\nexport interface Handlers {\n  removalSelector: (messages: BaseMessage[]) => BaseMessage | BaseMessage[];\n}\n\nexport interface SlidingWindowMemoryInput {\n  size: number;\n  handlers?: Partial<Handlers>;\n}\n\nexport class SlidingMemory extends BaseMemory {\n  public readonly messages: BaseMessage[] = [];\n  public readonly config: RequiredNested<SlidingWindowMemoryInput>;\n\n  constructor(config: SlidingWindowMemoryInput) {\n    super();\n    this.config = {\n      ...config,\n      handlers: {\n        removalSelector:\n          config.handlers?.removalSelector ?? ((messages: BaseMessage[]) => [messages[0]]),\n      },\n    };\n  }\n\n  static {\n    const aliases = [\"SlidingWindowMemory\"];\n    this.register(aliases);\n  }\n\n  async add(message: BaseMessage, index?: number) {\n    const { size, handlers } = this.config;\n    const isOverflow = () => this.messages.length + 1 > size;\n\n    if (isOverflow()) {\n      pipe(\n        this.messages,\n        handlers.removalSelector,\n        castArray,\n        filter(isTruthy),\n        forEach((message) => {\n          const index = this.messages.indexOf(message);\n          if (index === -1) {\n            throw new MemoryFatalError(`Cannot delete non existing message.`, [], {\n              context: { message, messages: this.messages },\n            });\n          }\n          this.messages.splice(index, 1);\n        }),\n      );\n\n      if (isOverflow()) {\n        throw new MemoryFatalError(\n          `Custom memory removalSelector did not return any message. Memory overflow has occurred.`,\n        );\n      }\n    }\n\n    index = ensureRange(index ?? this.messages.length, { min: 0, max: this.messages.length });\n    this.messages.splice(index, 0, message);\n  }\n\n  async delete(message: BaseMessage) {\n    return removeFromArray(this.messages, message);\n  }\n\n  reset() {\n    this.messages.length = 0;\n  }\n\n  createSnapshot() {\n    return { config: shallowCopy(this.config), messages: shallowCopy(this.messages) };\n  }\n\n  loadSnapshot(state: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, state);\n  }\n}\n"]}