@@ -21,10 +21,15 @@ export interface OnIdle {
2121 protectedTools : string [ ]
2222}
2323
24+ export interface PruneToolNudge {
25+ enabled : boolean
26+ frequency : number
27+ }
28+
2429export interface PruneTool {
2530 enabled : boolean
2631 protectedTools : string [ ]
27- nudgeFrequency : number
32+ nudge : PruneToolNudge
2833}
2934
3035export interface PluginConfig {
@@ -68,7 +73,9 @@ export const VALID_CONFIG_KEYS = new Set([
6873 'strategies.pruneTool' ,
6974 'strategies.pruneTool.enabled' ,
7075 'strategies.pruneTool.protectedTools' ,
71- 'strategies.pruneTool.nudgeFrequency' ,
76+ 'strategies.pruneTool.nudge' ,
77+ 'strategies.pruneTool.nudge.enabled' ,
78+ 'strategies.pruneTool.nudge.frequency' ,
7279] )
7380
7481// Extract all key paths from a config object for validation
@@ -160,8 +167,13 @@ function validateConfigTypes(config: Record<string, any>): ValidationError[] {
160167 if ( strategies . pruneTool . protectedTools !== undefined && ! Array . isArray ( strategies . pruneTool . protectedTools ) ) {
161168 errors . push ( { key : 'strategies.pruneTool.protectedTools' , expected : 'string[]' , actual : typeof strategies . pruneTool . protectedTools } )
162169 }
163- if ( strategies . pruneTool . nudgeFrequency !== undefined && typeof strategies . pruneTool . nudgeFrequency !== 'number' ) {
164- errors . push ( { key : 'strategies.pruneTool.nudgeFrequency' , expected : 'number' , actual : typeof strategies . pruneTool . nudgeFrequency } )
170+ if ( strategies . pruneTool . nudge ) {
171+ if ( strategies . pruneTool . nudge . enabled !== undefined && typeof strategies . pruneTool . nudge . enabled !== 'boolean' ) {
172+ errors . push ( { key : 'strategies.pruneTool.nudge.enabled' , expected : 'boolean' , actual : typeof strategies . pruneTool . nudge . enabled } )
173+ }
174+ if ( strategies . pruneTool . nudge . frequency !== undefined && typeof strategies . pruneTool . nudge . frequency !== 'number' ) {
175+ errors . push ( { key : 'strategies.pruneTool.nudge.frequency' , expected : 'number' , actual : typeof strategies . pruneTool . nudge . frequency } )
176+ }
165177 }
166178 }
167179 }
@@ -237,7 +249,10 @@ const defaultConfig: PluginConfig = {
237249 pruneTool : {
238250 enabled : false ,
239251 protectedTools : [ ...DEFAULT_PROTECTED_TOOLS ] ,
240- nudgeFrequency : 10
252+ nudge : {
253+ enabled : true ,
254+ frequency : 10
255+ }
241256 }
242257 }
243258}
@@ -328,8 +343,11 @@ function createDefaultConfig(): void {
328343 "enabled": false,
329344 // Additional tools to protect from pruning
330345 "protectedTools": [],
331- // How often to nudge the AI to prune (every N tool results, 0 = disabled)
332- "nudgeFrequency": 10
346+ // Nudge the LLM to use the prune tool (every <frequency> tool results)
347+ "nudge": {
348+ "enabled": true,
349+ "frequency": 10
350+ }
333351 }
334352 }
335353}
@@ -401,7 +419,10 @@ function mergeStrategies(
401419 ...( override . pruneTool ?. protectedTools ?? [ ] )
402420 ] )
403421 ] ,
404- nudgeFrequency : override . pruneTool ?. nudgeFrequency ?? base . pruneTool . nudgeFrequency
422+ nudge : {
423+ enabled : override . pruneTool ?. nudge ?. enabled ?? base . pruneTool . nudge . enabled ,
424+ frequency : override . pruneTool ?. nudge ?. frequency ?? base . pruneTool . nudge . frequency
425+ }
405426 }
406427 }
407428}
@@ -421,7 +442,8 @@ function deepCloneConfig(config: PluginConfig): PluginConfig {
421442 } ,
422443 pruneTool : {
423444 ...config . strategies . pruneTool ,
424- protectedTools : [ ...config . strategies . pruneTool . protectedTools ]
445+ protectedTools : [ ...config . strategies . pruneTool . protectedTools ] ,
446+ nudge : { ...config . strategies . pruneTool . nudge }
425447 }
426448 }
427449 }
0 commit comments