#!/usr/bin/env python3 """ Oracle Initialization Script Initializes the Oracle knowledge management system for a project. Creates directory structure and base files. Usage: python init_oracle.py [--path /path/to/project] Example: python init_oracle.py python init_oracle.py --path ~/my-project """ import os import sys import json import argparse from datetime import datetime from pathlib import Path ORACLE_STRUCTURE = { 'knowledge': { 'patterns.json': [], 'preferences.json': [], 'gotchas.json': [], 'solutions.json': [], 'corrections.json': [] }, 'sessions': {}, 'timeline': { 'project_timeline.md': '# Project Timeline\n\nChronological history of project development.\n\n' }, 'scripts': {}, 'hooks': {} } INDEX_TEMPLATE = { 'created': None, 'last_updated': None, 'total_entries': 0, 'categories': { 'patterns': 0, 'preferences': 0, 'gotchas': 0, 'solutions': 0, 'corrections': 0 }, 'sessions': [], 'version': '1.0' } def create_oracle_structure(base_path): """Create Oracle directory structure.""" oracle_path = Path(base_path) / '.oracle' if oracle_path.exists(): response = input(f"[WARNING] Oracle already exists at {oracle_path}. Reinitialize? [y/N]: ") if response.lower() != 'y': print("[ERROR] Initialization cancelled.") return False print(f" Creating Oracle structure at {oracle_path}") # Create directories and files for dir_name, contents in ORACLE_STRUCTURE.items(): dir_path = oracle_path / dir_name dir_path.mkdir(parents=True, exist_ok=True) print(f" [OK] Created {dir_name}/") # Create files in directory for filename, content in contents.items(): file_path = dir_path / filename if filename.endswith('.json'): with open(file_path, 'w') as f: json.dump(content, f, indent=2) else: with open(file_path, 'w') as f: f.write(content) print(f" Created {filename}") # Create index.json index_data = INDEX_TEMPLATE.copy() index_data['created'] = datetime.now().isoformat() index_data['last_updated'] = datetime.now().isoformat() with open(oracle_path / 'index.json', 'w') as f: json.dump(index_data, f, indent=2) print(f" [OK] Created index.json") # Create README readme_content = """# Oracle Knowledge Base This directory contains the Oracle knowledge management system for this project. ## Structure - `knowledge/`: Categorized knowledge entries - `patterns.json`: Code patterns and conventions - `preferences.json`: User/team preferences - `gotchas.json`: Known issues and pitfalls - `solutions.json`: Proven solutions - `corrections.json`: Historical corrections - `sessions/`: Session logs by date - `timeline/`: Chronological project history - `scripts/`: Auto-generated automation scripts - `hooks/`: Integration hooks - `index.json`: Fast lookup index ## Usage See `.claude/skills/oracle/README.md` for complete documentation. ## Quick Commands ```bash # Query knowledge python .claude/skills/oracle/scripts/query_knowledge.py "search term" # Record session python .claude/skills/oracle/scripts/record_session.py # Generate context python .claude/skills/oracle/scripts/generate_context.py # Analyze patterns python .claude/skills/oracle/scripts/analyze_patterns.py ``` --- *Initialized: {}* """.format(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) with open(oracle_path / 'README.md', 'w') as f: f.write(readme_content) print(f" [OK] Created README.md") # Create .gitignore gitignore_content = """# Session logs may contain sensitive information sessions/*.md # Keep the structure !sessions/.gitkeep # Generated scripts scripts/* !scripts/.gitkeep !scripts/README.md """ with open(oracle_path / '.gitignore', 'w') as f: f.write(gitignore_content) # Create .gitkeep files (oracle_path / 'sessions' / '.gitkeep').touch() (oracle_path / 'scripts' / '.gitkeep').touch() (oracle_path / 'hooks' / '.gitkeep').touch() print(f" [OK] Created .gitignore") return oracle_path def create_integration_hints(oracle_path, project_path): """Create hints for integrating Oracle.""" print("\n" + "="*70) print(" Oracle Initialized Successfully!") print("="*70) print(f"\n Location: {oracle_path}") print("\n Next Steps:\n") print("1. **Add to claude.md** (if you have one):") print(" Add this section to your project's claude.md:") print(""" ## Project Knowledge (Oracle) Run: python .claude/skills/oracle/scripts/generate_context.py --session-start """) print("\n2. **Create Session Start Hook** (optional):") print(f" Create: {project_path}/.claude/hooks/session-start.sh") print(""" #!/bin/bash python .claude/skills/oracle/scripts/load_context.py """) print("\n3. **Start Recording Knowledge:**") print(" After sessions, run:") print(" python .claude/skills/oracle/scripts/record_session.py") print("\n4. **Query Knowledge:**") print(" python .claude/skills/oracle/scripts/query_knowledge.py \"search term\"") print("\n" + "="*70) print("Oracle is ready to learn and remember! ") print("="*70 + "\n") def main(): parser = argparse.ArgumentParser( description='Initialize Oracle knowledge management system', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=""" Examples: python init_oracle.py python init_oracle.py --path ~/my-project """ ) parser.add_argument( '--path', type=str, default='.', help='Path to project root (default: current directory)' ) args = parser.parse_args() project_path = Path(args.path).resolve() if not project_path.exists(): print(f"[ERROR] Error: Path does not exist: {project_path}") sys.exit(1) print(f"> Initializing Oracle for project at: {project_path}\n") oracle_path = create_oracle_structure(project_path) if oracle_path: create_integration_hints(oracle_path, project_path) sys.exit(0) else: sys.exit(1) if __name__ == '__main__': main()