fix(toolintent): exempt list_dir from reference-exists + rejection-loop breaker
Greenfield discovery/analyst stages thrashed on plane-2 REFERENCE_EXISTS rejections: the model listed a not-yet-created dir (e.g. frontend/), got hard-BLOCKED every round, and burned MAX_TOOL_ROUNDS without progress. - New ToolCapability.DIRECTORY_LIST; ListDirTool declares it alongside FILE_READ. ReferenceExistsRule now exempts directory enumeration (a listing of an absent dir truthfully reports empty; only hallucinated file *reads* still fail loud). Dispatch stays on capability, not name. - Stage-agnostic rejection-loop breaker in the tool loop: after 3 rounds where every tool call is rejected (BLOCKED/ERROR) with no success, force the model to produce its output. Covers JSON-emitting stages the read-loop breaker (file_written-only) never protected.
This commit is contained in:
+2
-1
@@ -66,7 +66,8 @@ class ListDirTool(
|
||||
put("required", buildJsonArray {})
|
||||
}
|
||||
override val tier: Tier = Tier.T1
|
||||
override val requiredCapabilities: Set<ToolCapability> = setOf(ToolCapability.FILE_READ)
|
||||
override val requiredCapabilities: Set<ToolCapability> =
|
||||
setOf(ToolCapability.FILE_READ, ToolCapability.DIRECTORY_LIST)
|
||||
override val paramRoles: Map<String, ParamRole> = mapOf("path" to ParamRole.PATH)
|
||||
|
||||
override fun validateRequest(request: ToolRequest): ValidationResult {
|
||||
|
||||
Reference in New Issue
Block a user