import os
from ....config.fs_policy import SEARCH_TRAVERSAL_PRUNE_DIRS
# Directory listing limit
MAX_DIR_ITEMS = 250
# glob result limit
MAX_GLOB_MATCHES = 250
# glob max traversal depth
MAX_GLOB_DEPTH = 25
# grep result limit
MAX_GREP_MATCHES = 50
# grep timeout (seconds)
GREP_TIMEOUT_SECONDS = 30
# Python fallback grep max depth
MAX_GREP_DEPTH = 10
# Context truncation: max chars per tool result (by tool type)
MAX_TOOL_RESULT_CHARS = 50000 # default limit for truncate_for_context
MAX_VIEW_FILE_CHARS = 20000
MAX_GREP_SEARCH_CHARS = 12000
MAX_BASH_CHARS = 15000
MAX_VIEW_DIRECTORY_CHARS = 8000
MAX_GLOB_CHARS = 8000
# Common directories pruned during traversal for performance.
COMMON_IGNORED_DIRS = SEARCH_TRAVERSAL_PRUNE_DIRS
# === Bash Tool ===
# NOTE: Unix-only (requires bash shell, not available on Windows)
BASH_TIMEOUT_SECONDS = 30
BASH_MAX_OUTPUT_CHARS = 50000
# === LSP Tool ===
# Maximum number of results returned from LSP queries (definition/references)
MAX_LSP_RESULTS = 50
def _parse_positive_float_env(name: str, default: float) -> float:
"""Parse positive float from env var."""
raw = os.getenv(name, "").strip()
if not raw:
return default
try:
value = float(raw)
except ValueError:
return default
# Use `not (value > 0)` to correctly reject NaN (comparisons with NaN always return False)
if not (value > 0):
return default
return value
# Hard upper bound for LSP startup/shutdown/requests (seconds).
# Use SEARCH_LSP_TIMEOUT_SECONDS to override.
LSP_TIMEOUT_SECONDS = _parse_positive_float_env("SEARCH_LSP_TIMEOUT_SECONDS", 15.0)