import asyncio
import json
import sys
from mcp.client.sse import sse_client
from mcp.client.session import ClientSession

if hasattr(sys.stdout, "reconfigure"):
    sys.stdout.reconfigure(encoding="utf-8", errors="replace")

async def main():
    async with sse_client('http://127.0.0.1:8765/sse') as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            res = await session.call_tool('mem0_get_all', {'user_id': 'developer'})
            data = json.loads(res.content[0].text)
            mems = data.get('memories', {}).get('results', [])
            dscons = [m for m in mems if (m.get('metadata') or {}).get('project') == 'DSCons']
            
            output_data = {
                "total_memories": len(mems),
                "dscons_memories_count": len(dscons),
                "areas": {}
            }
            
            by_area = {}
            for m in dscons:
                meta = m.get('metadata') or {}
                area = meta.get('area', 'Unknown')
                by_area.setdefault(area, []).append(m)
                
            for area in sorted(by_area.keys()):
                output_data["areas"][area] = []
                for item in by_area[area]:
                    meta = item.get('metadata') or {}
                    output_data["areas"][area].append({
                        "id": item.get("id"),
                        "code": meta.get("code"),
                        "category": meta.get("category"),
                        "memory": item.get("memory")
                    })
                    
            with open(r"c:\Projects\DSCons\.agents\teamwork\teamwork_preview_reviewer_m3_2\facts_dump.json", "w", encoding="utf-8") as f:
                json.dump(output_data, f, indent=2, ensure_ascii=False)
            print(f"Dumped {len(dscons)} DSCons facts across {len(by_area)} areas successfully.")

if __name__ == "__main__":
    asyncio.run(main())
