Migration from Docker to Standalone Python Server (#73)

* Migration from docker to standalone server
Migration handling
Fixed tests
Use simpler in-memory storage
Support for concurrent logging to disk
Simplified direct connections to localhost

* Migration from docker / redis to standalone script
Updated tests
Updated run script
Fixed requirements
Use dotenv
Ask if user would like to install MCP in Claude Desktop once
Updated docs

* More cleanup and references to docker removed

* Cleanup

* Comments

* Fixed tests

* Fix GitHub Actions workflow for standalone Python architecture

- Install requirements-dev.txt for pytest and testing dependencies
- Remove Docker setup from simulation tests (now standalone)
- Simplify linting job to use requirements-dev.txt
- Update simulation tests to run directly without Docker

Fixes unit test failures in CI due to missing pytest dependency.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove simulation tests from GitHub Actions

- Removed simulation-tests job that makes real API calls
- Keep only unit tests (mocked, no API costs) and linting
- Simulation tests should be run manually with real API keys
- Reduces CI costs and complexity

GitHub Actions now only runs:
- Unit tests (569 tests, all mocked)
- Code quality checks (ruff, black)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fixed tests

* Fixed tests

---------

Co-authored-by: Claude <noreply@anthropic.com>
This commit is contained in:
Beehive Innovations
2025-06-18 23:41:22 +04:00
committed by GitHub
parent 9d72545ecd
commit 4151c3c3a5
121 changed files with 2842 additions and 3168 deletions

View File

@@ -37,7 +37,7 @@ from utils.conversation_memory import (
get_conversation_file_list,
get_thread,
)
from utils.file_utils import read_file_content, read_files, translate_path_for_environment
from utils.file_utils import read_file_content, read_files
from .models import SPECIAL_STATUS_MODELS, ContinuationOffer, ToolOutput
@@ -1229,15 +1229,13 @@ When recommending searches, be specific about what information you need and why
updated_files = []
for file_path in files:
# Translate path for current environment (Docker/direct)
translated_path = translate_path_for_environment(file_path)
# Check if the filename is exactly "prompt.txt"
# This ensures we don't match files like "myprompt.txt" or "prompt.txt.bak"
if os.path.basename(translated_path) == "prompt.txt":
if os.path.basename(file_path) == "prompt.txt":
try:
# Read prompt.txt content and extract just the text
content, _ = read_file_content(translated_path)
content, _ = read_file_content(file_path)
# Extract the content between the file markers
if "--- BEGIN FILE:" in content and "--- END FILE:" in content:
lines = content.split("\n")
@@ -1568,6 +1566,17 @@ When recommending searches, be specific about what information you need and why
parsed_status = status_model.model_validate(potential_json)
logger.debug(f"{self.name} tool detected special status: {status_key}")
# Enhance mandatory_instructions for files_required_to_continue
if status_key == "files_required_to_continue" and hasattr(
parsed_status, "mandatory_instructions"
):
original_instructions = parsed_status.mandatory_instructions
enhanced_instructions = self._enhance_mandatory_instructions(original_instructions)
# Create a new model instance with enhanced instructions
enhanced_data = parsed_status.model_dump()
enhanced_data["mandatory_instructions"] = enhanced_instructions
parsed_status = status_model.model_validate(enhanced_data)
# Extract model information for metadata
metadata = {
"original_request": (
@@ -1936,7 +1945,7 @@ When recommending searches, be specific about what information you need and why
elif "gpt" in model_name.lower() or "o3" in model_name.lower():
# Register OpenAI provider if not already registered
from providers.base import ProviderType
from providers.openai import OpenAIModelProvider
from providers.openai_provider import OpenAIModelProvider
ModelProviderRegistry.register_provider(ProviderType.OPENAI, OpenAIModelProvider)
provider = ModelProviderRegistry.get_provider(ProviderType.OPENAI)
@@ -1948,3 +1957,28 @@ When recommending searches, be specific about what information you need and why
)
return provider
def _enhance_mandatory_instructions(self, original_instructions: str) -> str:
"""
Enhance mandatory instructions for files_required_to_continue responses.
This adds generic guidance to help Claude understand the importance
of providing the requested files and context.
Args:
original_instructions: The original instructions from the model
Returns:
str: Enhanced instructions with additional guidance
"""
generic_guidance = (
"\n\nIMPORTANT GUIDANCE:\n"
"• The requested files are CRITICAL for providing accurate analysis\n"
"• Please include ALL files mentioned in the files_needed list\n"
"• Use FULL absolute paths to real files/folders - DO NOT SHORTEN paths - and confirm that these exist\n"
"• If you cannot locate specific files or the files are extremely large, think hard, study the code and provide similar/related files that might contain the needed information\n"
"• After providing the files, use the same tool again with the continuation_id to continue the analysis\n"
"• The tool cannot proceed to perform its function accurately without this additional context"
)
return f"{original_instructions}{generic_guidance}"

View File

@@ -17,8 +17,8 @@ from .base import BaseTool, ToolRequest
# Field descriptions to avoid duplication between Pydantic and JSON schema
CHAT_FIELD_DESCRIPTIONS = {
"prompt": (
"Your thorough, expressive question with as much context as possible. Remember: you're talking to "
"another Claude assistant who has deep expertise and can provide nuanced insights. Include your "
"You MUST provide a thorough, expressive question or share an idea with as much context as possible. "
"Remember: you're talking to an assistant who has deep expertise and can provide nuanced insights. Include your "
"current thinking, specific challenges, background context, what you've already tried, and what "
"kind of response would be most helpful. The more context and detail you provide, the more "
"valuable and targeted the response will be."
@@ -26,7 +26,7 @@ CHAT_FIELD_DESCRIPTIONS = {
"files": "Optional files for context (must be FULL absolute paths to real files / folders - DO NOT SHORTEN)",
"images": (
"Optional images for visual context. Useful for UI discussions, diagrams, visual problems, "
"error screens, or architectural mockups."
"error screens, or architectural mockups. (must be FULL absolute paths to real files / folders - DO NOT SHORTEN - OR these can be bas64 data)"
),
}

View File

@@ -25,14 +25,16 @@ from .base import BaseTool, ToolRequest
# Field descriptions to avoid duplication between Pydantic and JSON schema
CODEREVIEW_FIELD_DESCRIPTIONS = {
"files": "Code files or directories to review (must be FULL absolute paths to real files / folders - DO NOT SHORTEN)",
"files": "Code files or directories to review that are relevant to the code that needs review or are closely "
"related to the code or component that needs to be reviewed (must be FULL absolute paths to real files / folders - DO NOT SHORTEN)."
"Validate that these files exist on disk before sharing and only share code that is relevant.",
"prompt": (
"User's summary of what the code does, expected behavior, constraints, and review objectives. "
"IMPORTANT: Before using this tool, Claude should first perform its own preliminary review - "
"IMPORTANT: Before using this tool, you should first perform its own preliminary review - "
"examining the code structure, identifying potential issues, understanding the business logic, "
"and noting areas of concern. Include Claude's initial observations about code quality, potential "
"and noting areas of concern. Include your initial observations about code quality, potential "
"bugs, architectural patterns, and specific areas that need deeper scrutiny. This dual-perspective "
"approach (Claude's analysis + external model's review) provides more comprehensive feedback and "
"approach (your analysis + external model's review) provides more comprehensive feedback and "
"catches issues that either reviewer might miss alone."
),
"images": (
@@ -299,7 +301,7 @@ Please provide a code review aligned with the user's context and expectations, f
---
**Claude's Next Steps:**
**Your Next Steps:**
1. **Understand the Context**: First examine the specific functions, files, and code sections mentioned in """
"""the review to understand each issue thoroughly.

View File

@@ -17,34 +17,37 @@ from .base import BaseTool, ToolRequest
# Field descriptions to avoid duplication between Pydantic and JSON schema
DEBUG_FIELD_DESCRIPTIONS = {
"prompt": (
"Claud - you MUST first think deep. Issue description. Include what you can provide: "
"MANDATORY: You MUST first think deep about the issue, what it is, why it might be happening, what code might be involved, "
"is it an error stemming out of the code directly or is it a side-effect of some part of the existing code. If it's an error "
"message, could it be coming from an external resource and NOT directly from the project? What part of the code seems most likely"
"the culprit. MUST try and ZERO IN on the issue and surrounding code. Include all the details into the prompt that you can provide: "
"error messages, symptoms, when it occurs, steps to reproduce, environment details, "
"recent changes, and any other relevant information. Mention any previous attempts at fixing this issue, "
"including any past fix that was in place but has now regressed. "
"The more context available, the better the analysis. "
"SYSTEMATIC INVESTIGATION: Claude MUST begin by thinking hard and performing a thorough investigation using a systematic approach. "
"PERFORM SYSTEMATIC INVESTIGATION: You MUST begin by thinking hard and performing a thorough investigation using a systematic approach. "
"First understand the issue, find the code that may be causing it or code that is breaking, as well as any related code that could have caused this as a side effect. "
"Claude MUST maintain detailed investigation notes in a DEBUGGING_{issue_description}.md file within the project folder, "
"You MUST maintain detailed investigation notes in a DEBUGGING_{issue_description}.md file within the project folder, "
"updating it as it performs step-by-step analysis of the code, trying to determine the actual root cause and understanding how a minimal, appropriate fix can be found. "
"This file MUST contain functions, methods, files visited OR determined to be part of the problem. Claude MUST update this and remove any references that it finds to be irrelevant during its investigation. "
"CRITICAL: If after thorough investigation Claude has very high confidence that NO BUG EXISTS that correlates to the reported symptoms, "
"Claude should consider the possibility that the reported issue may not actually be present, may be a misunderstanding, or may be conflated with something else entirely. "
"In such cases, Claude should gather more information from the user through targeted questioning rather than continue hunting for non-existent bugs. "
"Once complete, Claude MUST provide Zen's debug tool with this file passed into the files parameter. "
"It is ESSENTIAL that this detailed work is performed by Claude before sharing all the relevant details with its development assistant. This will greatly help in zeroing in on the root cause."
"This file MUST contain functions, methods, files visited OR determined to be part of the problem. You MUST update this and remove any references that it finds to be irrelevant during its investigation. "
"CRITICAL: If after thorough investigation You has very high confidence that NO BUG EXISTS that correlates to the reported symptoms, "
"You should consider the possibility that the reported issue may not actually be present, may be a misunderstanding, or may be conflated with something else entirely. "
"In such cases, you should gather more information from the user through targeted questioning rather than continue hunting for non-existent bugs. "
"Once complete, you MUST provide also pass in this file into the files parameter of this tool. "
"It is ESSENTIAL that this detailed work is performed by you before sharing all the relevant details with its development assistant. This will greatly help in zeroing in on the root cause."
),
"findings": (
"Claude MUST first perform its own investigation, gather its findings and analysis. Include: steps taken to analyze the issue, "
"You MUST first perform its own investigation, gather its findings and analysis. Include: steps taken to analyze the issue, "
"code patterns discovered, initial hypotheses formed, any relevant classes/functions/methods examined, "
"and any preliminary conclusions. If investigation yields no concrete evidence of a bug correlating to the reported symptoms, "
"Claude should clearly state this finding and consider that the issue may not exist as described. "
"You should clearly state this finding and consider that the issue may not exist as described. "
"This provides context for the assistant model's analysis."
),
"files": (
"Essential files for debugging - ONLY include files that are directly related to the issue, "
"contain the problematic code, or are necessary for understanding the root cause. "
"This can include any relevant log files, error description documents, investigation documents, "
"claude's own findings as a document, related code that may help with analysis."
"Your own findings as a document, related code that may help with analysis."
"DO NOT include every file scanned during investigation (must be FULL absolute paths - DO NOT SHORTEN)."
),
"error_context": "Stack trace, snippet from logs, or additional error context. For very large text you MUST instead"
@@ -77,13 +80,13 @@ class DebugIssueTool(BaseTool):
"trace errors, or diagnose issues. "
"MANDATORY: Claud you MUST first think deep and follow these instructions when using this tool"
"SYSTEMATIC INVESTIGATION WORKFLOW: "
"Claude MUST begin by thinking hard and performing a thorough investigation using a systematic approach. "
"You MUST begin by thinking hard and performing a thorough investigation using a systematic approach. "
"First understand the issue, find the code that may be causing it or code that is breaking, as well as any related code that could have caused this as a side effect. "
"Claude MUST maintain detailed investigation notes while it performs its analysis, "
"You MUST maintain detailed investigation notes while it performs its analysis, "
"updating it as it performs step-by-step analysis of the code, trying to determine the actual root cause and understanding how a minimal, appropriate fix can be found. "
"This file MUST contain functions, methods, files visited OR determined to be part of the problem. Claude MUST update this and remove any references that it finds to be irrelevant during its investigation. "
"Once complete, Claude MUST provide Zen's debug tool with this file passed into the files parameter. "
"1. INVESTIGATE SYSTEMATICALLY: Claude MUST think and use a methodical approach to trace through error reports, "
"This file MUST contain functions, methods, files visited OR determined to be part of the problem. You MUST update this and remove any references that it finds to be irrelevant during its investigation. "
"Once complete, You MUST provide Zen's debug tool with this file passed into the files parameter. "
"1. INVESTIGATE SYSTEMATICALLY: You MUST think and use a methodical approach to trace through error reports, "
"examine code, and gather evidence step by step "
"2. DOCUMENT FINDINGS: Maintain detailed investigation notes to "
"keep the user informed during its initial investigation. This investigation MUST be shared with this tool for the assistant "
@@ -299,7 +302,7 @@ with comprehensive findings for expert analysis."""
def format_response(self, response: str, request: DebugIssueRequest, model_info: Optional[dict] = None) -> str:
"""Format the debugging response for Claude to present to user"""
# The base class automatically handles structured responses like 'clarification_required'
# The base class automatically handles structured responses like 'files_required_to_continue'
# and 'analysis_complete' via SPECIAL_STATUS_MODELS, so we only handle normal text responses here
model_name = self._get_model_name(model_info)

View File

@@ -35,7 +35,7 @@ class ToolOutput(BaseModel):
status: Literal[
"success",
"error",
"clarification_required",
"files_required_to_continue",
"full_codereview_required",
"focused_review_required",
"test_sample_needed",
@@ -55,11 +55,11 @@ class ToolOutput(BaseModel):
)
class ClarificationRequest(BaseModel):
"""Request for additional context or clarification"""
class FilesNeededRequest(BaseModel):
"""Request for missing files / code to continue"""
status: Literal["clarification_required"] = "clarification_required"
question: str = Field(..., description="Question to ask Claude for more context")
status: Literal["files_required_to_continue"] = "files_required_to_continue"
mandatory_instructions: str = Field(..., description="Critical instructions for Claude regarding required context")
files_needed: Optional[list[str]] = Field(
default_factory=list, description="Specific files that are needed for analysis"
)
@@ -362,7 +362,7 @@ class NoBugFound(BaseModel):
# Registry mapping status strings to their corresponding Pydantic models
SPECIAL_STATUS_MODELS = {
"clarification_required": ClarificationRequest,
"files_required_to_continue": FilesNeededRequest,
"full_codereview_required": FullCodereviewRequired,
"focused_review_required": FocusedReviewRequired,
"test_sample_needed": TestSampleNeeded,

View File

@@ -76,7 +76,8 @@ logger = logging.getLogger(__name__)
PLANNER_FIELD_DESCRIPTIONS = {
# Interactive planning fields for step-by-step planning
"step": (
"Your current planning step. For the first step, describe the task/problem to plan. "
"Your current planning step. For the first step, describe the task/problem to plan and be extremely expressive "
"so that subsequent steps can break this down into simpler steps. "
"For subsequent steps, provide the actual planning step content. Can include: regular planning steps, "
"revisions of previous steps, questions about previous decisions, realizations about needing more analysis, "
"changes in approach, etc."

View File

@@ -17,7 +17,6 @@ if TYPE_CHECKING:
from tools.models import ToolModelCategory
from systemprompts import PRECOMMIT_PROMPT
from utils.file_utils import translate_file_paths, translate_path_for_environment
from utils.git_utils import find_git_repositories, get_git_status, run_git_command
from utils.token_utils import estimate_tokens
@@ -28,10 +27,10 @@ DEFAULT_CONTEXT_WINDOW = 200_000
# Field descriptions to avoid duplication between Pydantic and JSON schema
PRECOMMIT_FIELD_DESCRIPTIONS = {
"path": "Starting directory to search for git repositories (must be FULL absolute paths - DO NOT SHORTEN).",
"path": "Starting absolute path to the directory to search for git repositories (must be FULL absolute paths - DO NOT SHORTEN).",
"prompt": (
"The original user request description for the changes. Provides critical context for the review. "
"If original request is limited or not available, you MUST study the changes carefully, think deeply "
"MANDATORY: if original request is limited or not available, you MUST study the changes carefully, think deeply "
"about the implementation intent, analyze patterns across all modifications, infer the logic and "
"requirements from the code changes and provide a thorough starting point."
),
@@ -49,11 +48,11 @@ PRECOMMIT_FIELD_DESCRIPTIONS = {
"thinking_mode": "Thinking depth mode for the assistant.",
"files": (
"Optional files or directories to provide as context (must be FULL absolute paths - DO NOT SHORTEN). "
"These files are not part of the changes but provide helpful context like configs, docs, or related code."
"These additional files are not part of the changes but provide helpful context like configs, docs, or related code."
),
"images": (
"Optional images showing expected UI changes, design requirements, or visual references for the changes "
"being validated"
"being validated (must be FULL absolute paths - DO NOT SHORTEN). "
),
}
@@ -235,22 +234,10 @@ class Precommit(BaseTool):
raise ValueError(f"MCP_SIZE_CHECK:{ToolOutput(**size_check).model_dump_json()}")
# Translate the path and files if running in Docker
translated_path = translate_path_for_environment(request.path)
translated_files = translate_file_paths(request.files)
# File size validation happens at MCP boundary in server.py
# Check if the path translation resulted in an error path
if translated_path.startswith("/inaccessible/"):
raise ValueError(
f"The path '{request.path}' is not accessible from within the Docker container. "
f"The Docker container can only access files within the mounted workspace. "
f"Please ensure the path is within the mounted directory or adjust your Docker volume mounts."
)
# Find all git repositories
repositories = find_git_repositories(translated_path, request.max_depth)
repositories = find_git_repositories(request.path, request.max_depth)
if not repositories:
return "No git repositories found in the specified path."
@@ -421,12 +408,12 @@ class Precommit(BaseTool):
context_files_summary = []
context_tokens = 0
if translated_files:
if request.files:
remaining_tokens = max_tokens - total_tokens
# Use centralized file handling with filtering for duplicate prevention
file_content, processed_files = self._prepare_file_content_for_prompt(
translated_files,
request.files,
request.continuation_id,
"Context files",
max_tokens=remaining_tokens + 1000, # Add back the reserve that was calculated
@@ -437,7 +424,7 @@ class Precommit(BaseTool):
if file_content:
context_tokens = estimate_tokens(file_content)
context_files_content = [file_content]
context_files_summary.append(f"✅ Included: {len(translated_files)} context files")
context_files_summary.append(f"✅ Included: {len(request.files)} context files")
else:
context_files_summary.append("WARNING: No context files could be read or files too large")
@@ -540,7 +527,7 @@ class Precommit(BaseTool):
)
# Add instruction for requesting files if needed
if not translated_files:
if not request.files:
prompt_parts.append(
"\nIf you need additional context files to properly review these changes "
"(such as configuration files, documentation, or related code), "

View File

@@ -23,7 +23,6 @@ from pydantic import Field
from config import TEMPERATURE_ANALYTICAL
from systemprompts import REFACTOR_PROMPT
from utils.file_utils import translate_file_paths
from .base import BaseTool, ToolRequest
@@ -32,8 +31,10 @@ logger = logging.getLogger(__name__)
# Field descriptions to avoid duplication between Pydantic and JSON schema
REFACTOR_FIELD_DESCRIPTIONS = {
"files": "Code files or directories to analyze for refactoring opportunities (must be FULL absolute paths to real files / folders - DO NOT SHORTEN)",
"prompt": "Description of refactoring goals, context, and specific areas of focus",
"files": "Code files or directories to analyze for refactoring opportunities. MUST be FULL absolute paths to real files / folders - DO NOT SHORTEN."
"The files also MUST directly involve the classes, functions etc that need to be refactored. Closely related or dependent files"
"will also help.",
"prompt": "Description of refactoring goals, context, and specific areas of focus.",
"refactor_type": "Type of refactoring analysis to perform",
"focus_areas": "Specific areas to focus on (e.g., 'performance', 'readability', 'maintainability', 'security')",
"style_guide_examples": (
@@ -285,9 +286,7 @@ class RefactorTool(BaseTool):
logger.info(f"[REFACTOR] All {len(style_examples)} style examples already in conversation history")
return "", ""
# Translate file paths for Docker environment before accessing files
translated_examples = translate_file_paths(examples_to_process)
logger.debug(f"[REFACTOR] Translated {len(examples_to_process)} file paths for container access")
logger.debug(f"[REFACTOR] Processing {len(examples_to_process)} file paths")
# Calculate token budget for style examples (20% of available tokens, or fallback)
if available_tokens:
@@ -306,10 +305,9 @@ class RefactorTool(BaseTool):
# Sort by file size (smallest first) for pattern-focused selection
file_sizes = []
for i, file_path in enumerate(examples_to_process):
translated_path = translated_examples[i]
for file_path in examples_to_process:
try:
size = os.path.getsize(translated_path)
size = os.path.getsize(file_path)
file_sizes.append((file_path, size))
logger.debug(f"[REFACTOR] Style example {os.path.basename(file_path)}: {size:,} bytes")
except (OSError, FileNotFoundError) as e:

View File

@@ -21,7 +21,6 @@ from pydantic import Field
from config import TEMPERATURE_ANALYTICAL
from systemprompts import TESTGEN_PROMPT
from utils.file_utils import translate_file_paths
from .base import BaseTool, ToolRequest
@@ -30,7 +29,8 @@ logger = logging.getLogger(__name__)
# Field descriptions to avoid duplication between Pydantic and JSON schema
TESTGEN_FIELD_DESCRIPTIONS = {
"files": "Code files or directories to generate tests for (must be FULL absolute paths to real files / folders - DO NOT SHORTEN)",
"prompt": "Description of what to test, testing objectives, and specific scope/focus areas",
"prompt": "Description of what to test, testing objectives, and specific scope/focus areas. Be specific about any "
"particular component, module, class of function you would like to generate tests for.",
"test_examples": (
"Optional existing test files or directories to use as style/pattern reference (must be FULL absolute paths to real files / folders - DO NOT SHORTEN). "
"If not provided, the tool will determine the best testing approach based on the code structure. "
@@ -164,9 +164,7 @@ class TestGenerationTool(BaseTool):
logger.info(f"[TESTGEN] All {len(test_examples)} test examples already in conversation history")
return "", ""
# Translate file paths for Docker environment before accessing files
translated_examples = translate_file_paths(examples_to_process)
logger.debug(f"[TESTGEN] Translated {len(examples_to_process)} file paths for container access")
logger.debug(f"[TESTGEN] Processing {len(examples_to_process)} file paths")
# Calculate token budget for test examples (25% of available tokens, or fallback)
if available_tokens:
@@ -184,13 +182,11 @@ class TestGenerationTool(BaseTool):
)
# Sort by file size (smallest first) for pattern-focused selection
# Use translated paths for file system operations, but keep original paths for processing
file_sizes = []
for i, file_path in enumerate(examples_to_process):
translated_path = translated_examples[i]
for file_path in examples_to_process:
try:
size = os.path.getsize(translated_path)
file_sizes.append((file_path, size)) # Keep original path for consistency
size = os.path.getsize(file_path)
file_sizes.append((file_path, size))
logger.debug(f"[TESTGEN] Test example {os.path.basename(file_path)}: {size:,} bytes")
except (OSError, FileNotFoundError) as e:
# If we can't get size, put it at the end

View File

@@ -17,15 +17,17 @@ from .base import BaseTool, ToolRequest
# Field descriptions to avoid duplication between Pydantic and JSON schema
THINKDEEP_FIELD_DESCRIPTIONS = {
"prompt": (
"Your current thinking/analysis to extend and validate. IMPORTANT: Before using this tool, Claude MUST "
"first think hard and establish a deep understanding of the topic and question by thinking through all "
"relevant details, context, constraints, and implications. Share these extended thoughts and ideas in "
"the prompt so the model has comprehensive information to work with for the best analysis."
"MANDATORY: you MUST first think hard and establish a deep understanding of the topic and question by thinking through all "
"relevant details, context, constraints, and implications. Provide your thought-partner all of your current thinking/analysis "
"to extend and validate. Share these extended thoughts and ideas in "
"the prompt so your assistant has comprehensive information to work with for the best analysis."
),
"problem_context": "Additional context about the problem or goal. Be as expressive as possible.",
"problem_context": "Provate additional context about the problem or goal. Be as expressive as possible. More information will "
"be very helpful to your thought-partner.",
"focus_areas": "Specific aspects to focus on (architecture, performance, security, etc.)",
"files": "Optional file paths or directories for additional context (must be FULL absolute paths to real files / folders - DO NOT SHORTEN)",
"images": "Optional images for visual analysis - diagrams, charts, system architectures, or any visual information to analyze",
"files": "Optional absolute file paths or directories for additional context (must be FULL absolute paths to real files / folders - DO NOT SHORTEN)",
"images": "Optional images for visual analysis - diagrams, charts, system architectures, or any visual information to analyze. "
"(must be FULL absolute paths to real files / folders - DO NOT SHORTEN)",
}

View File

@@ -15,8 +15,8 @@ from .base import BaseTool, ToolRequest
# Field descriptions to avoid duplication between Pydantic and JSON schema
TRACER_FIELD_DESCRIPTIONS = {
"prompt": (
"Detailed description of what to trace and WHY you need this analysis. Include context about what "
"you're trying to understand, debug, or analyze. For precision mode: describe the specific "
"Detailed description of what to trace and WHY you need this analysis. MUST include context about what "
"you're trying to understand, debug, analyze or find. For precision mode: describe the specific "
"method/function and what aspect of its execution flow you need to understand. For dependencies "
"mode: describe the class/module and what relationships you need to map. Example: 'I need to "
"understand how BookingManager.finalizeInvoice method is called throughout the system and what "