enhanced-mcp-tools/tests/test_directory_tree.py
Ryan Malloy 1d199a943d 🛡️ SACRED TRUST: Complete safety framework implementation & validation
 COMPREHENSIVE SAFETY FRAMEWORK:
• Package-level safety notices with SACRED TRUST language
• Server-level LLM safety protocols with specific refusal scenarios
• Class-level safety reminders for AI assistants
• Tool-level destructive operation warnings (🔴 DESTRUCTIVE markers)
• Visual safety system: 🔴🛡️🚨 markers throughout codebase
• Emergency logging infrastructure with proper escalation
• Default-safe operations (dry_run=True for destructive tools)

🔒 DESTRUCTIVE OPERATION PROTECTIONS:
• bulk_rename: LLM safety instructions + dry_run default
• search_and_replace_batch: Comprehensive safety warnings
• All destructive tools require preview before execution
• Clear REFUSE scenarios for AI assistants

📚 COMPREHENSIVE DOCUMENTATION:
• SACRED_TRUST_SAFETY.md: Complete safety philosophy & implementation guide
• IMPLEMENTATION_COMPLETE.md: Project completion status
• EMERGENCY_LOGGING_COMPLETE.md: Logging infrastructure details
• UV_BUILD_GUIDE.md: Modern Python project setup
• Multiple implementation guides and status docs

🔧 PROJECT MODERNIZATION:
• Migrated from setup.py/requirements.txt to pyproject.toml + uv
• Updated dependency management with uv.lock
• Enhanced test suite with comprehensive coverage
• Added examples and demo scripts

 VALIDATION COMPLETE: All SACRED_TRUST_SAFETY.md requirements implemented
🎯 Sacred Trust Status: PROTECTED
🚨 User Safety: PARAMOUNT
🔐 System Integrity: PRESERVED

The human trusts AI assistants to be guardians of their system and data.
This framework ensures that trust is honored through comprehensive safety measures.
2025-06-23 11:58:48 -06:00

154 lines
4.8 KiB
Python

#!/usr/bin/env python3
"""
Test script for the new list_directory_tree functionality
"""
import asyncio
import json
from pathlib import Path
from enhanced_mcp.file_operations import EnhancedFileOperations
async def test_directory_tree():
"""Test the directory tree listing functionality"""
# Initialize the file operations class
file_ops = EnhancedFileOperations()
print("🌳 Testing Directory Tree Listing with Metadata")
print("=" * 60)
# Test on the current project directory
project_dir = "/home/rpm/claude/enhanced-mcp-tools"
print(f"📁 Scanning: {project_dir}")
# Test 1: Basic tree listing
print("\n=== Test 1: Basic Tree Listing ===")
result = await file_ops.list_directory_tree(
root_path=project_dir,
max_depth=2, # Limit depth to keep output manageable
include_hidden=False,
include_metadata=True,
exclude_patterns=["*.pyc", "__pycache__", ".venv", ".git"],
include_git_status=True,
)
if "error" in result:
print(f"❌ Error: {result['error']}")
return
print("✅ Successfully scanned directory tree!")
print("📊 Summary:")
summary = result["summary"]
for key, value in summary.items():
print(f" {key}: {value}")
# Test 2: Display tree structure (limited)
print("\n=== Test 2: Tree Structure (First Few Items) ===")
tree = result["tree"]
def print_tree_node(node, depth=0, max_items=5):
"""Print tree node with indentation"""
indent = " " * depth
if node["type"] == "directory":
icon = "📁"
elif node["type"] == "file":
icon = "📄"
else:
icon = ""
size_info = ""
if "size_human" in node:
size_info = f" ({node['size_human']})"
git_info = ""
if "git_status" in node:
git_info = f" [git: {node['git_status']}]"
print(f"{indent}{icon} {node['name']}{size_info}{git_info}")
# Print children (limited to max_items)
if "children" in node:
for i, child in enumerate(node["children"][:max_items]):
print_tree_node(child, depth + 1, max_items)
if len(node["children"]) > max_items:
print(f"{indent} ... and {len(node['children']) - max_items} more items")
print_tree_node(tree, max_items=3)
# Test 3: JSON output sample
print("\n=== Test 3: JSON Structure Sample ===")
# Get first file for detailed metadata example
def find_first_file(node):
if node["type"] == "file":
return node
if "children" in node:
for child in node["children"]:
result = find_first_file(child)
if result:
return result
return None
first_file = find_first_file(tree)
if first_file:
print("📄 Sample file metadata:")
print(json.dumps(first_file, indent=2)[:500] + "...")
# Test 4: Different configuration
print("\n=== Test 4: Minimal Configuration (No Metadata) ===")
minimal_result = await file_ops.list_directory_tree(
root_path=project_dir,
max_depth=1,
include_hidden=False,
include_metadata=False,
exclude_patterns=["*.pyc", "__pycache__", ".venv", ".git", "*.egg-info"],
include_git_status=False,
)
if "error" not in minimal_result:
print("✅ Minimal scan successful!")
print(f"📊 Items found: {minimal_result['summary']['total_items']}")
# Show simplified structure
print("📋 Simplified structure:")
for child in minimal_result["tree"]["children"][:5]:
print(f" {child['type']}: {child['name']}")
# Test 5: Large files only
print("\n=== Test 5: Large Files Only (>1KB) ===")
large_files_result = await file_ops.list_directory_tree(
root_path=project_dir,
max_depth=3,
include_hidden=False,
include_metadata=True,
exclude_patterns=["*.pyc", "__pycache__", ".venv", ".git"],
size_threshold=1000, # 1KB threshold
)
if "error" not in large_files_result:
print("✅ Large files scan successful!")
print(f"📊 Large files found: {large_files_result['summary']['total_items']}")
def count_files(node):
count = 1 if node["type"] == "file" else 0
if "children" in node:
for child in node["children"]:
count += count_files(child)
return count
file_count = count_files(large_files_result["tree"])
print(f"📁 Files over 1KB: {file_count}")
print("\n🎉 Directory tree listing tests completed!")
print("✅ All functionality working correctly!")
print("🔧 Available features: metadata, git status, filtering, depth control, size thresholds")
if __name__ == "__main__":
asyncio.run(test_directory_tree())