Class: ToolLoopDetector
Defined in: .source/wunderland/src/security/ToolLoopDetector.ts:109
Detects and prevents tool call loops with exponential backoff.
Example
const detector = new ToolLoopDetector({ maxRepeatedCalls: 3 });
// First call: allowed
detector.check('web_search', { query: 'hello' });
// → { allowed: true, consecutiveCount: 1, loopDetected: false }
// Second identical call: allowed
detector.check('web_search', { query: 'hello' });
// → { allowed: true, consecutiveCount: 2, loopDetected: false }
// Third identical call: loop detected, backoff suggested
detector.check('web_search', { query: 'hello' });
// → { allowed: false, loopDetected: true, suggestedDelayMs: 2000 }
Constructors
Constructor
new ToolLoopDetector(
config?):ToolLoopDetector
Defined in: .source/wunderland/src/security/ToolLoopDetector.ts:114
Parameters
config?
Returns
ToolLoopDetector
Methods
check()
check(
toolId,args):LoopDetectionResult
Defined in: .source/wunderland/src/security/ToolLoopDetector.ts:132
Checks if a tool call should be allowed or if a loop is detected.
Parameters
toolId
string
The tool being called
args
Record<string, unknown>
The tool arguments
Returns
Detection result with backoff suggestion
getStats()
getStats():
object
Defined in: .source/wunderland/src/security/ToolLoopDetector.ts:225
Gets statistics about the current session.
Returns
object
historySize
historySize:
number
totalCalls
totalCalls:
number
uniqueTools
uniqueTools:
number
windowMs
windowMs:
number
record()
record(
toolId,args):void
Defined in: .source/wunderland/src/security/ToolLoopDetector.ts:205
Records a tool call without checking for loops. Used for tool calls that bypass loop detection (e.g., HITL responses).
Parameters
toolId
string
args
Record<string, unknown>
Returns
void
reset()
reset():
void
Defined in: .source/wunderland/src/security/ToolLoopDetector.ts:217
Resets the detector state. Call this at session boundaries.
Returns
void