diff --git a/caveman-compress/scripts/__init__.py b/caveman-compress/scripts/__init__.py index e69de29..16b8c53 100644 --- a/caveman-compress/scripts/__init__.py +++ b/caveman-compress/scripts/__init__.py @@ -0,0 +1,9 @@ +"""Caveman compress scripts. + +This package provides tools to compress natural language markdown files +into caveman format to save input tokens. +""" + +__all__ = ["cli", "compress", "detect", "validate"] + +__version__ = "1.0.0" diff --git a/caveman-compress/scripts/compress.py b/caveman-compress/scripts/compress.py index 2a19760..977a4ea 100644 --- a/caveman-compress/scripts/compress.py +++ b/caveman-compress/scripts/compress.py @@ -94,6 +94,13 @@ def compress_file(filepath: Path) -> bool: original_text = filepath.read_text(errors="ignore") backup_path = filepath.with_name(filepath.stem + ".original.md") + # Check if backup already exists to prevent accidental overwriting + if backup_path.exists(): + print(f"⚠️ Backup file already exists: {backup_path}") + print("The original backup may contain important content.") + print("Aborting to prevent data loss. Please remove or rename the backup file if you want to proceed.") + return False + # Step 1: Compress print("🧠 Compressing with Claude...") compressed = call_claude(build_compress_prompt(original_text)) diff --git a/caveman-compress/scripts/validate.py b/caveman-compress/scripts/validate.py index 361156b..e9fff3f 100644 --- a/caveman-compress/scripts/validate.py +++ b/caveman-compress/scripts/validate.py @@ -8,7 +8,8 @@ HEADING_REGEX = re.compile(r"^(#{1,6})\s+(.*)", re.MULTILINE) BULLET_REGEX = re.compile(r"^\s*[-*+]\s+", re.MULTILINE) # crude but effective path detection -PATH_REGEX = re.compile(r"(\./|\../|/|[A-Za-z]:\\)[\w\-/\\\.]+") +# Requires either a path prefix (./ ../ / or drive letter) or a slash/backslash within the match +PATH_REGEX = re.compile(r"(?:\./|\.\./|/|[A-Za-z]:\\)[\w\-/\\\.]+|[\w\-\.]+[/\\][\w\-/\\\.]+") class ValidationResult: