#!/usr/bin/env python3
"""
PROPER session compaction - deletes actual transcript files, not just metadata.
"""

import json
import os
import glob
from datetime import datetime

def true_compact_sessions():
    """Actually delete transcript files and reset sessions over 40k tokens"""
    
    agents = ['main', 'anton', 'ogilvy', 'tatiana', 'gerri', 'julia', 'jessica', 'thibault']
    compacted = []
    total_freed = 0
    files_deleted = 0
    
    for agent in agents:
        sessions_path = f'/root/.openclaw/agents/{agent}/sessions/sessions.json'
        if not os.path.exists(sessions_path):
            continue
            
        try:
            with open(sessions_path) as f:
                data = json.load(f)
            
            changed = False
            for k, v in data.items():
                tokens = v.get('totalTokens', 0) or 0
                
                # Compact sessions over 180k tokens
                if tokens > 180000:
                    old_tokens = tokens
                    
                    # Delete actual transcript file
                    transcript_path = v.get('transcriptPath', '')
                    session_id = v.get('sessionId', '')
                    
                    deleted_file = None
                    
                    # Try to delete transcript file by path
                    if transcript_path and os.path.exists(transcript_path):
                        os.remove(transcript_path)
                        deleted_file = transcript_path
                        files_deleted += 1
                    # Try to find transcript file by session ID
                    elif session_id:
                        session_dir = f'/root/.openclaw/agents/{agent}/sessions'
                        pattern = f'{session_dir}/*{session_id}*.jsonl'
                        matching_files = glob.glob(pattern)
                        for file_path in matching_files:
                            os.remove(file_path)
                            deleted_file = file_path
                            files_deleted += 1
                            break
                    
                    # Reset session metadata completely
                    v['totalTokens'] = 0
                    v['inputTokens'] = 0
                    v['outputTokens'] = 0
                    v['systemSent'] = False
                    v['transcriptPath'] = ''  # Clear transcript path
                    
                    compacted.append({
                        'agent': agent,
                        'session': k[-30:],
                        'old_tokens': old_tokens,
                        'deleted_file': deleted_file or 'No file found'
                    })
                    total_freed += old_tokens
                    changed = True
            
            if changed:
                # Write back the reset sessions
                with open(sessions_path, 'w') as f:
                    json.dump(data, f, indent=2)
                    
        except Exception as e:
            print(f"Error processing {agent}: {e}")
            continue
    
    # Report results
    if compacted:
        print(f"💥 TRUE COMPACTION: {len(compacted)} sessions, {files_deleted} files deleted")
        for item in compacted:
            print(f"  {item['agent']:12s} {item['session']:30s} {item['old_tokens']:>6,} tokens")
            if 'No file found' not in item['deleted_file']:
                print(f"    🗑️  Deleted: {item['deleted_file']}")
        print(f"📊 Total freed: {total_freed:,} tokens (${total_freed * 0.000003:.2f})")
        
        return len(compacted)
    else:
        print("✅ No sessions over 40k tokens")
        return 0

if __name__ == '__main__':
    true_compact_sessions()