102 lines
2.9 KiB
Python
Executable File
102 lines
2.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
"""
|
|
Universal runner for NotebookLM skill scripts
|
|
Ensures all scripts run with the correct virtual environment
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
from pathlib import Path
|
|
|
|
|
|
def get_venv_python():
|
|
"""Get the virtual environment Python executable"""
|
|
skill_dir = Path(__file__).parent.parent
|
|
venv_dir = skill_dir / ".venv"
|
|
|
|
if os.name == 'nt': # Windows
|
|
venv_python = venv_dir / "Scripts" / "python.exe"
|
|
else: # Unix/Linux/Mac
|
|
venv_python = venv_dir / "bin" / "python"
|
|
|
|
return venv_python
|
|
|
|
|
|
def ensure_venv():
|
|
"""Ensure virtual environment exists"""
|
|
skill_dir = Path(__file__).parent.parent
|
|
venv_dir = skill_dir / ".venv"
|
|
setup_script = skill_dir / "scripts" / "setup_environment.py"
|
|
|
|
# Check if venv exists
|
|
if not venv_dir.exists():
|
|
print("🔧 First-time setup: Creating virtual environment...")
|
|
print(" This may take a minute...")
|
|
|
|
# Run setup with system Python
|
|
result = subprocess.run([sys.executable, str(setup_script)])
|
|
if result.returncode != 0:
|
|
print("❌ Failed to set up environment")
|
|
sys.exit(1)
|
|
|
|
print("✅ Environment ready!")
|
|
|
|
return get_venv_python()
|
|
|
|
|
|
def main():
|
|
"""Main runner"""
|
|
if len(sys.argv) < 2:
|
|
print("Usage: python run.py <script_name> [args...]")
|
|
print("\nAvailable scripts:")
|
|
print(" ask_question.py - Query NotebookLM")
|
|
print(" notebook_manager.py - Manage notebook library")
|
|
print(" session_manager.py - Manage sessions")
|
|
print(" auth_manager.py - Handle authentication")
|
|
print(" cleanup_manager.py - Clean up skill data")
|
|
sys.exit(1)
|
|
|
|
script_name = sys.argv[1]
|
|
script_args = sys.argv[2:]
|
|
|
|
# Handle both "scripts/script.py" and "script.py" formats
|
|
if script_name.startswith('scripts/'):
|
|
# Remove the scripts/ prefix if provided
|
|
script_name = script_name[8:] # len('scripts/') = 8
|
|
|
|
# Ensure .py extension
|
|
if not script_name.endswith('.py'):
|
|
script_name += '.py'
|
|
|
|
# Get script path
|
|
skill_dir = Path(__file__).parent.parent
|
|
script_path = skill_dir / "scripts" / script_name
|
|
|
|
if not script_path.exists():
|
|
print(f"❌ Script not found: {script_name}")
|
|
print(f" Working directory: {Path.cwd()}")
|
|
print(f" Skill directory: {skill_dir}")
|
|
print(f" Looked for: {script_path}")
|
|
sys.exit(1)
|
|
|
|
# Ensure venv exists and get Python executable
|
|
venv_python = ensure_venv()
|
|
|
|
# Build command
|
|
cmd = [str(venv_python), str(script_path)] + script_args
|
|
|
|
# Run the script
|
|
try:
|
|
result = subprocess.run(cmd)
|
|
sys.exit(result.returncode)
|
|
except KeyboardInterrupt:
|
|
print("\n⚠️ Interrupted by user")
|
|
sys.exit(130)
|
|
except Exception as e:
|
|
print(f"❌ Error: {e}")
|
|
sys.exit(1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main() |