2026-01-21 18:06:34 +08:00

6.2 KiB

File Reference Skill - Examples

Example 1: Simple Data Processing

Process a CSV file using the skill's data processor:

from skillkit import SkillManager
from skillkit.core.path_resolver import FilePathResolver
from pathlib import Path

# Initialize skill manager
manager = SkillManager("./examples/skills")
manager.discover()

# Invoke skill
result = manager.invoke_skill(
    "file-reference-skill",
    "data/input.csv data/output.csv"
)

print(result)

Example 2: Accessing Supporting Scripts

Read and execute supporting scripts:

from pathlib import Path
from skillkit.core.path_resolver import FilePathResolver

# Get skill's base directory
skill = manager.get_skill("file-reference-skill")
base_dir = skill.base_directory

# Resolve script path securely
processor_path = FilePathResolver.resolve_path(
    base_dir,
    "scripts/data_processor.py"
)

# Read script content
with open(processor_path) as f:
    script_code = f.read()

print(f"Script location: {processor_path}")
print(f"Script length: {len(script_code)} bytes")

Example 3: Loading Configuration Template

Load and parse configuration template:

import yaml
from skillkit.core.path_resolver import FilePathResolver

# Resolve config template path
config_path = FilePathResolver.resolve_path(
    base_dir,
    "templates/config.yaml"
)

# Load configuration
with open(config_path) as f:
    config = yaml.safe_load(f)

print("Configuration:", config)

Example 4: Handling Security Violations

Demonstrate path traversal prevention:

from skillkit.core.path_resolver import FilePathResolver
from skillkit.core.exceptions import PathSecurityError

try:
    # Attempt path traversal (will be blocked)
    malicious_path = FilePathResolver.resolve_path(
        base_dir,
        "../../../etc/passwd"
    )
except PathSecurityError as e:
    print(f"Security violation blocked: {e}")
    # Expected output:
    # Security violation blocked: Path traversal attempt detected:
    # '../../../etc/passwd' resolves outside skill directory

Example 5: Validating Input Files

Use validator script to check input files:

import subprocess
from skillkit.core.path_resolver import FilePathResolver

# Resolve validator script
validator_path = FilePathResolver.resolve_path(
    base_dir,
    "scripts/validator.py"
)

# Import and use validator
import sys
sys.path.insert(0, str(validator_path.parent))
from validator import validate_csv_format

# Validate input file
is_valid = validate_csv_format("data/input.csv")
print(f"File is valid: {is_valid}")

Example 6: Generating Reports

Generate report using template:

from string import Template
from datetime import datetime
from skillkit.core.path_resolver import FilePathResolver

# Resolve report template
template_path = FilePathResolver.resolve_path(
    base_dir,
    "templates/report.md"
)

# Load template
with open(template_path) as f:
    template_content = f.read()

# Fill template with data
template = Template(template_content)
report = template.safe_substitute({
    'timestamp': datetime.now().isoformat(),
    'input_file': 'data/input.csv',
    'input_size': '1234',
    'format': 'CSV',
    'encoding': 'UTF-8',
    'start_time': '10:00:00',
    'end_time': '10:00:05',
    'duration': '5',
    'status': 'SUCCESS',
    'output_file': 'data/output.csv',
    'output_size': '1234',
    'record_count': '100',
    'error_count': '0',
    'validation_results': 'All checks passed',
    'processing_log': 'Processing completed successfully'
})

print(report)

Example 7: Shell Script Integration

Execute shell helper script:

import subprocess
from skillkit.core.path_resolver import FilePathResolver

# Resolve shell script
helper_path = FilePathResolver.resolve_path(
    base_dir,
    "scripts/helper.sh"
)

# Execute script
result = subprocess.run(
    ['bash', str(helper_path), 'check'],
    capture_output=True,
    text=True
)

print(result.stdout)

Example 8: Multiple File Access

Access multiple supporting files in one operation:

from skillkit.core.path_resolver import FilePathResolver

# List of files to access
file_paths = [
    "scripts/data_processor.py",
    "scripts/validator.py",
    "templates/config.yaml",
    "docs/usage.md"
]

# Resolve all paths securely
resolved_paths = {}
for rel_path in file_paths:
    try:
        abs_path = FilePathResolver.resolve_path(base_dir, rel_path)
        resolved_paths[rel_path] = abs_path
        print(f"✓ {rel_path} -> {abs_path}")
    except PathSecurityError as e:
        print(f"✗ {rel_path} -> BLOCKED ({e})")

print(f"\nSuccessfully resolved {len(resolved_paths)} paths")

Example 9: Error Handling Best Practices

Robust error handling when accessing supporting files:

from pathlib import Path
from skillkit.core.path_resolver import FilePathResolver
from skillkit.core.exceptions import PathSecurityError

def safe_load_supporting_file(base_dir: Path, rel_path: str) -> str:
    """Safely load supporting file with comprehensive error handling."""
    try:
        # Resolve path securely
        abs_path = FilePathResolver.resolve_path(base_dir, rel_path)

        # Read file content
        with open(abs_path, 'r', encoding='utf-8') as f:
            return f.read()

    except PathSecurityError as e:
        print(f"Security violation: {e}")
        raise
    except FileNotFoundError:
        print(f"File not found: {rel_path}")
        raise
    except PermissionError:
        print(f"Permission denied: {rel_path}")
        raise
    except UnicodeDecodeError:
        print(f"Invalid UTF-8 encoding: {rel_path}")
        raise
    except Exception as e:
        print(f"Unexpected error loading {rel_path}: {e}")
        raise

# Usage
try:
    content = safe_load_supporting_file(base_dir, "scripts/helper.py")
    print(f"Loaded {len(content)} bytes")
except Exception as e:
    print(f"Failed to load file: {e}")

Summary

These examples demonstrate:

  • Secure file path resolution using FilePathResolver
  • Accessing scripts, templates, and documentation
  • Handling security violations gracefully
  • Integration with Python and shell scripts
  • Best practices for error handling
  • Template-based report generation