{"version":3,"sources":["../../../../src/agents/requirement/utils/toolCallChecker.ts"],"names":["ToolCallChecker","config","strikeHistory","occurrencesHistory","cycleFound","enabled","maxStrikeLength","maxTotalOccurrences","windowSize","register","value","lastCall","at","isSameToolCall","push","length","shift","occurrences","filter","call","reset","current","a","b","toolName","JSON","stringify","input"],"mappings":";;;;AAgBO,MAAMA,eAAAA,CAAAA;EAhBb;;;AAiBYC,EAAAA,MAAAA;AACAC,EAAAA,aAAAA,GAAgC,EAAA;AAChCC,EAAAA,kBAAAA,GAAqC,EAAA;EACxCC,UAAAA,GAAa,KAAA;EACbC,OAAAA,GAAU,IAAA;EAEjB,WAAA,CAAYJ,MAAAA,GAAgC,EAAC,EAAG;AAC9C,IAAA,IAAA,CAAKA,MAAAA,GAAS;AACZK,MAAAA,eAAAA,EAAiBL,OAAOK,eAAAA,IAAmB,CAAA;AAC3CC,MAAAA,mBAAAA,EAAqBN,OAAOM,mBAAAA,IAAuB,CAAA;AACnDC,MAAAA,UAAAA,EAAYP,OAAOO,UAAAA,IAAc;AACnC,KAAA;AACF,EAAA;AAEAC,EAAAA,QAAAA,CAASC,KAAAA,EAA2B;AAClC,IAAA,IAAI,CAAC,KAAKL,OAAAA,EAAS;AACjB,MAAA;AACF,IAAA;AAGA,IAAA,MAAMM,QAAAA,GAAW,IAAA,CAAKT,aAAAA,CAAcU,EAAAA,CAAG,EAAC,CAAA;AACxC,IAAA,IAAID,QAAAA,IAAY,IAAA,CAAKE,cAAAA,CAAeF,QAAAA,EAAUD,KAAAA,CAAAA,EAAQ;AACpD,MAAA,IAAA,CAAKR,aAAAA,CAAcY,KAAKJ,KAAAA,CAAAA;AACxB,MAAA,IAAI,IAAA,CAAKR,aAAAA,CAAca,MAAAA,GAAS,IAAA,CAAKd,OAAOK,eAAAA,EAAiB;AAC3D,QAAA,IAAA,CAAKF,UAAAA,GAAa,IAAA;AACpB,MAAA;IACF,CAAA,MAAO;AACL,MAAA,IAAA,CAAKF,aAAAA,GAAgB;AAACQ,QAAAA;;AACxB,IAAA;AAGA,IAAA,IAAA,CAAKP,kBAAAA,CAAmBW,KAAKJ,KAAAA,CAAAA;AAC7B,IAAA,IAAI,IAAA,CAAKP,kBAAAA,CAAmBY,MAAAA,GAAS,IAAA,CAAKd,OAAOO,UAAAA,EAAY;AAC3D,MAAA,IAAA,CAAKL,mBAAmBa,KAAAA,EAAK;AAC/B,IAAA;AAEA,IAAA,MAAMC,WAAAA,GAAc,IAAA,CAAKd,kBAAAA,CAAmBe,MAAAA,CAAO,CAACC,IAAAA,KAClD,IAAA,CAAKN,cAAAA,CAAeM,IAAAA,EAAMT,KAAAA,CAAAA,CAAAA,CAC1BK,MAAAA;AACF,IAAA,IAAIE,WAAAA,GAAc,IAAA,CAAKhB,MAAAA,CAAOM,mBAAAA,EAAqB;AACjD,MAAA,IAAA,CAAKH,UAAAA,GAAa,IAAA;AACpB,IAAA;AACF,EAAA;AAEAgB,EAAAA,KAAAA,CAAMC,OAAAA,EAA8B;AAClC,IAAA,IAAA,CAAKnB,gBAAgBmB,OAAAA,GAAU;AAACA,MAAAA;QAAW,EAAA;AAC3C,IAAA,IAAA,CAAKlB,qBAAqBkB,OAAAA,GAAU;AAACA,MAAAA;QAAW,EAAA;AAChD,IAAA,IAAA,CAAKjB,UAAAA,GAAa,KAAA;AACpB,EAAA;AAEUS,EAAAA,cAAAA,CAAeS,GAAiBC,CAAAA,EAA0B;AAClE,IAAA,OAAOD,CAAAA,CAAEE,QAAAA,KAAaD,CAAAA,CAAEC,QAAAA,IAAYC,IAAAA,CAAKC,SAAAA,CAAUJ,CAAAA,CAAEK,KAAK,CAAA,KAAMF,IAAAA,CAAKC,SAAAA,CAAUH,CAAAA,CAAEI,KAAK,CAAA;AACxF,EAAA;AACF","file":"toolCallChecker.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ToolCallPart } from \"ai\";\n\nexport interface ToolCallCheckerConfig {\n  maxStrikeLength?: number;\n  maxTotalOccurrences?: number;\n  windowSize?: number;\n}\n\n/**\n * Detects cycles in tool calls\n */\nexport class ToolCallChecker {\n  protected config: Required<ToolCallCheckerConfig>;\n  protected strikeHistory: ToolCallPart[] = [];\n  protected occurrencesHistory: ToolCallPart[] = [];\n  public cycleFound = false;\n  public enabled = true;\n\n  constructor(config: ToolCallCheckerConfig = {}) {\n    this.config = {\n      maxStrikeLength: config.maxStrikeLength ?? 1,\n      maxTotalOccurrences: config.maxTotalOccurrences ?? 5,\n      windowSize: config.windowSize ?? 10,\n    };\n  }\n\n  register(value: ToolCallPart): void {\n    if (!this.enabled) {\n      return;\n    }\n\n    // Check for consecutive strikes\n    const lastCall = this.strikeHistory.at(-1);\n    if (lastCall && this.isSameToolCall(lastCall, value)) {\n      this.strikeHistory.push(value);\n      if (this.strikeHistory.length > this.config.maxStrikeLength) {\n        this.cycleFound = true;\n      }\n    } else {\n      this.strikeHistory = [value];\n    }\n\n    // Check for total occurrences in window\n    this.occurrencesHistory.push(value);\n    if (this.occurrencesHistory.length > this.config.windowSize) {\n      this.occurrencesHistory.shift();\n    }\n\n    const occurrences = this.occurrencesHistory.filter((call) =>\n      this.isSameToolCall(call, value),\n    ).length;\n    if (occurrences > this.config.maxTotalOccurrences) {\n      this.cycleFound = true;\n    }\n  }\n\n  reset(current?: ToolCallPart): void {\n    this.strikeHistory = current ? [current] : [];\n    this.occurrencesHistory = current ? [current] : [];\n    this.cycleFound = false;\n  }\n\n  protected isSameToolCall(a: ToolCallPart, b: ToolCallPart): boolean {\n    return a.toolName === b.toolName && JSON.stringify(a.input) === JSON.stringify(b.input);\n  }\n}\n"]}