Docs added to show how a new provider is added

Docs added to show how a new tool is created
All tools should add numbers to code for models to be able to reference if needed
Enabled line numbering for code for all tools to use
Additional tests to validate line numbering is not added to git diffs
This commit is contained in:
Fahad
2025-06-15 07:02:27 +04:00
parent b5004b91fc
commit 99fab3e83d
27 changed files with 2511 additions and 143 deletions

View File

@@ -399,20 +399,22 @@ class BaseTool(ABC):
"""
Return whether this tool wants line numbers added to code files by default.
Tools that benefit from precise line references (refactor, codereview, debug)
should return True. Tools that prioritize token efficiency or don't need
precise references can return False.
By default, ALL tools get line numbers for precise code references.
Line numbers are essential for accurate communication about code locations.
Line numbers add ~8-10% token overhead but provide precise targeting for:
- Code review feedback ("SQL injection on line 45")
- Debug error locations ("Memory leak in loop at lines 123-156")
- Test generation targets ("Generate tests for method at lines 78-95")
- Refactoring guidance ("Extract method from lines 67-89")
- General code discussions ("Where is X defined?" -> "Line 42")
The only exception is when reading diffs, which have their own line markers.
Returns:
bool: True if line numbers should be added by default for this tool
"""
return False # Conservative default - tools opt-in as needed
return True # All tools get line numbers by default for consistency
def get_default_thinking_mode(self) -> str:
"""

View File

@@ -148,9 +148,7 @@ class CodeReviewTool(BaseTool):
def get_default_temperature(self) -> float:
return TEMPERATURE_ANALYTICAL
def wants_line_numbers_by_default(self) -> bool:
"""Code review tool needs line numbers for precise feedback"""
return True
# Line numbers are enabled by default from base class for precise feedback
def get_request_model(self):
return CodeReviewRequest

View File

@@ -111,9 +111,7 @@ class DebugIssueTool(BaseTool):
def get_default_temperature(self) -> float:
return TEMPERATURE_ANALYTICAL
def wants_line_numbers_by_default(self) -> bool:
"""Debug tool needs line numbers for precise error location"""
return True
# Line numbers are enabled by default from base class for precise error location
def get_model_category(self) -> "ToolModelCategory":
"""Debug requires deep analysis and reasoning"""

View File

@@ -143,9 +143,7 @@ class RefactorTool(BaseTool):
def get_default_temperature(self) -> float:
return TEMPERATURE_ANALYTICAL
def wants_line_numbers_by_default(self) -> bool:
"""Refactor tool needs line numbers for precise targeting"""
return True
# Line numbers are enabled by default from base class for precise targeting
def get_model_category(self):
"""Refactor tool requires extended reasoning for comprehensive analysis"""
@@ -159,7 +157,7 @@ class RefactorTool(BaseTool):
async def execute(self, arguments: dict[str, Any]) -> list[TextContent]:
"""Override execute to check prompt size before processing"""
logger.info(f"[REFACTOR] execute called with arguments: {list(arguments.keys())}")
# First validate request
request_model = self.get_request_model()
request = request_model(**arguments)
@@ -168,10 +166,10 @@ class RefactorTool(BaseTool):
if request.prompt:
size_check = self.check_prompt_size(request.prompt)
if size_check:
logger.info(f"[REFACTOR] Prompt size check triggered, returning early")
logger.info("[REFACTOR] Prompt size check triggered, returning early")
return [TextContent(type="text", text=ToolOutput(**size_check).model_dump_json())]
logger.info(f"[REFACTOR] Prompt size OK, calling super().execute()")
logger.info("[REFACTOR] Prompt size OK, calling super().execute()")
# Continue with normal execution
return await super().execute(arguments)

View File

@@ -134,9 +134,7 @@ class TestGenTool(BaseTool):
def get_default_temperature(self) -> float:
return TEMPERATURE_ANALYTICAL
def wants_line_numbers_by_default(self) -> bool:
"""Test generation tool needs line numbers for precise targeting"""
return True
# Line numbers are enabled by default from base class for precise targeting
def get_model_category(self):
"""TestGen requires extended reasoning for comprehensive test analysis"""