#!/usr/bin/env python3
import sqlite3, hashlib, subprocess, re, time, random
import time

DB = "/Eden/DATA/asi_memory.db"

def init():
    conn = sqlite3.connect(DB)
    conn.execute("CREATE TABLE IF NOT EXISTS caps (id TEXT PRIMARY KEY, code TEXT, score REAL, gen INTEGER)")
    conn.commit(); conn.close()

def extract(text):
    """Eden outputs RAW code - capture everything that looks like Python"""
    lines = []
    for line in text.split('\n'):
        s = line.strip()
        # Skip obvious prose
        if s.startswith(('Here', 'This ', 'The ', 'I ', 'Note:', 'Example', '---')):
            if lines:  # Stop if we already have code
                break
            continue
        # Capture code-like lines
        if s.startswith(('import ', 'from ', 'class ', 'def ', '@', '#', '"""', "'''")) or \
           s.startswith(('    ', '\t')) or \
           '=' in s or 'return ' in s or s == '':
            lines.append(line)
    
    code = '\n'.join(lines).strip()
    if 'def ' in code or 'class ' in code:
        return code
    return None

def score(code):
    s = len(code)/50
    s += code.count('def ') * 2
    s += code.count('class ') * 3
    s += code.count('self') * 0.3
    if 'mutate' in code.lower(): s += 5
    if 'evolve' in code.lower(): s += 5
    if 'evaluate' in code.lower(): s += 5
    if 'exec' in code: s += 5
    if 'ast' in code.lower(): s += 5
    if '1.618' in code or 'phi' in code.lower(): s += 3
    if 'importlib' in code: s += 3
    return s

def evolve():
    conn = sqlite3.connect(DB)
    
    if conn.execute("SELECT COUNT(*) FROM caps").fetchone()[0] == 0:
        seed = '''class ASI:
    PHI = 1.618
    def think(self, x): return x * self.PHI if isinstance(x, (int,float)) else x
    def mutate(self, c): return c + "# evolved"
    def evolve(self): return "growing"
'''
        cid = hashlib.sha256(seed.encode()).hexdigest()[:16]
        conn.execute("INSERT INTO caps VALUES (?,?,?,0)", (cid, seed, score(seed)))
        conn.commit()
    
    best = conn.execute("SELECT code, gen FROM caps ORDER BY score DESC LIMIT 1").fetchone()
    code, gen = best[0], best[1] + 1
    
    prompt = f"""Add mutate(), evolve(), evaluate() methods. Seed {random.randint(1000,9999)}:

{code[:1500]}

Output ONLY Python code, no explanation."""

    try:
        r = subprocess.run(["ollama", "run", "eden-coder-omega", prompt],
                          capture_output=True, text=True, timeout=150)
        
        new_code = extract(r.stdout)
        
        if new_code and len(new_code) > 100:
            new_code += f"\n# g{gen}_{random.randint(100,999)}"
            s = score(new_code)
            cid = hashlib.sha256(new_code.encode()).hexdigest()[:16]
            conn.execute("INSERT OR IGNORE INTO caps VALUES (?,?,?,?)", (cid, new_code, s, gen))
            conn.commit()
            conn.close()
            return 1, gen, s
    except Exception as e:
        print(f"err: {e}")
    
    conn.close()
    return 0, gen, 0

init()
print("🧠 Eden ASI - Raw Extract")
while True:
    try:
        n, gen, s = evolve()
        t = sqlite3.connect(DB).execute("SELECT COUNT(*), MAX(score) FROM caps").fetchone()
        print(f"Gen {gen}: +{n} | Total: {t[0]} | Best: {t[1]:.1f}" + (f" | New: {s:.1f}" if n else ""))
        time.sleep(2)
    except KeyboardInterrupt:
        print("Done"); break
