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

FACTS_CATALOG = [
    # Area 1: Root Standards (5 facts)
    {
        "code": "RULE-ROOT-01",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Root Standards & 7 Core Laws] DSCons ERP tuân thủ tuyệt đối Bảy Điều luật cốt lõi bất biến: (1) Nghiêm cấm 100% dữ liệu ảo/mock synthetic data; (2) Hàng rào kiểm thử hồi quy pytest 100% Passed; (3) Kiểm thử giao diện trên trình duyệt thực tế browser testing; (4) Vòng đời máy chủ Uvicorn luôn chạy --reload; (5) Chống hội chứng Bus Factor bằng tài liệu hóa giải thích rõ ràng; (6) Tuân thủ kiến trúc lục giác Hexagonal Architecture và DDD; (7) Bắt buộc khai thác tối đa hệ sinh thái MCP Server.""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-01", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-02",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Zero Synthetic Data & Source of Truth] Trong DSCons ERP, nghiêm cấm tuyệt đối mọi hành vi tạo dữ liệu giả, mock script hoặc seed ảo (Zero-tolerance synthetic data). Mọi hóa đơn, dự toán, nhà cung cấp, vật tư phải được trích xuất 100% từ nguồn sự thật thực tế: Cổng Thuế điện tử Tổng cục Thuế (GDT), Odoo database dump, và hồ sơ hợp đồng HĐ-2026 của Công ty TNHH Xây Dựng Định Sơn (MST: 0202111150).""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-02", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-03",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Hexagonal Architecture & Boundary Enforcement] Hệ thống DSCons ERP áp dụng kiến trúc lục giác DDD (Ports and Adapters). CẤM TUYỆT ĐỐI viết raw SQL, câu lệnh DDL hoặc mở DB connection trực tiếp trong Routers/Presentation layer. CẤM TUYỆT ĐỐI import các HTTP client (httpx, requests) hoặc gọi API LLM ngoài trực tiếp trong Application và Domain layer. Mọi kết nối mạng phải qua Outbound Infrastructure Adapters hoặc EnterpriseAiGateway.""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-03", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-04",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Mandatory MCP Tools Protocol] Agent làm việc tại DSCons ERP bắt buộc ưu tiên sử dụng MCP tools thay thế script tạm: lsp-mcp (lsp_definition, lsp_references, lsp_diagnostics) cho duyệt code và refactor symbol; chrome-devtools-mcp cho nghiệm thu trình duyệt thực tế và bắt lỗi console/network; markitdown cho đọc bóc tách tài liệu dự toán PDF/Excel; memory cho Knowledge Graph kiến trúc; StitchMCP cho thiết kế UI; gemini-api-docs cho tra cứu SDK.""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-04", "area": "Area 1"}
    },
    {
        "code": "RULE-ROOT-05",
        "area": "Area 1",
        "category": "Root Standards",
        "text": r"""[DSCons Rule: Sub-Agent Coordination & Definition of Done] Giám đốc Kỹ thuật điều phối các Sub-Agents chuyên trách: Architect-DB, Dev-Backend, Dev-Frontend, Domain-AEC-Auditor, QA-SecOps. Mọi tác vụ nghiệm thu (Definition of Done - DoD) bắt buộc phải có đầy đủ: Bối cảnh, Ràng buộc kỹ thuật, Input/Output Schema rõ ràng, không vi phạm ranh giới kiến trúc, đạt 100% pytest passed và dọn dẹp sạch sẽ dữ liệu kiểm thử test teardown.""",
        "metadata": {"project": "DSCons", "category": "Root Standards", "code": "RULE-ROOT-05", "area": "Area 1"}
    },

    # Area 2: Backend & DB (5 facts)
    {
        "code": "RULE-BACKEND-01",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: 4-Layer Clean Architecture & DDD] Backend DSCons cấu trúc 4 tầng nghiêm ngặt: (1) Presentation (FastAPI Routers chỉ validate Pydantic schema và ủy quyền); (2) Application (Use Cases, Command/Query Handlers giao tiếp qua Domain Ports); (3) Domain Core (Entities, Value Objects, Protocols hoàn toàn độc lập 0% phụ thuộc framework/DB); (4) Infrastructure (Repositories, Adapters đóng gói SQL và external HTTP clients). Code phải vượt qua pytest test_architecture_boundary_enforcement.py.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-01", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-02",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: Database Precision & Double-Entry Ledger] Trong CSDL PostgreSQL và mã nguồn Python của DSCons ERP, TUYỆT ĐỐI CẤM sử dụng kiểu FLOAT hoặc DOUBLE cho tiền tệ VNĐ và khối lượng bóc tách BoQ. Bắt buộc sử dụng kiểu NUMERIC(18, 4) hoặc BIGINT trong PostgreSQL và kiểu Decimal trong Python. Mọi biến động tài chính, hạn mức ngân sách và kho vật tư áp dụng cơ chế Sổ kép (Double-entry ledger) bất biến kèm khóa Optimistic/Pessimistic Locking.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-02", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-03",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: FastAPI Server Lifecycle & Hot-Reload] Máy chủ backend Uvicorn của DSCons ERP luôn được vận hành với cờ --reload (python -m uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload). Trước khi nghiệm thu bất kỳ API endpoint hoặc module mới nào, Agent bắt buộc phải xác nhận tiến trình máy chủ đang chạy đã nạp nóng (hot-reloaded) mã nguồn mới nhất, tránh tình trạng kiểm thử trên phiên bản code cũ.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-03", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-04",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: Strict Automated Test Teardown] Toàn bộ các kiểm thử tự động trong pytest tests/ khi chèn dữ liệu vào CSDL PostgreSQL (users, dự án, takeoffs, chat messages, quy tắc) bắt buộc phải có cơ chế dọn dẹp sạch sẽ 100% (Teardown via pytest fixture yield hoặc khối finally). Tuyệt đối không để sót các bản ghi rác mang tiền tố TEST-%, API_CAD%, SAMPLE_CAD% trong database sau khi test hoàn thành.""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-04", "area": "Area 2"}
    },
    {
        "code": "RULE-BACKEND-05",
        "area": "Area 2",
        "category": "Backend & DB",
        "text": r"""[DSCons Backend Architecture: API Gateway Routing Prefix /v1/erp] Mọi API Endpoints và UI Dashboards mới trong hệ thống DSCons ERP bắt buộc phải tuân thủ tiền tố định tuyến /v1/erp (Ví dụ: @router.get("/v1/erp/dashboard/..."), /v1/erp/takeoff/...). Tuyệt đối không mount routes ở root level (/) vì API Gateway (Nginx/Cloudflare Tunnel) sẽ chặn và trả về lỗi 404 (Lỗi quên V1 vào endpoint).""",
        "metadata": {"project": "DSCons", "category": "Backend & DB", "code": "RULE-BACKEND-05", "area": "Area 2"}
    },

    # Area 3: Frontend (5 facts)
    {
        "code": "RULE-FRONTEND-01",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Dark Slate Design System & Palette] Giao diện DSCons ERP áp dụng chuẩn thiết kế Enterprise Dark Slate Theme: Màu nền chính #0b0f19 / #080d1a, thẻ/panel #111827, đường viền #1e293b. Mọi màn hình bắt buộc import stylesheet dùng chung /static/css/erp_enterprise.css và thanh điều hướng thống nhất <header class="erp-navbar"> với logo DSCons, menu phân hệ và trạng thái tài khoản.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-01", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-02",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Typography Standards & Font Hierarchy] Giao diện DSCons chuẩn hóa kiểu chữ: Google Fonts Inter hỗ trợ đầy đủ tiếng Việt cho toàn bộ tiêu đề và nội dung; Font JetBrains Mono cho toàn bộ số liệu tài chính VNĐ, đơn giá ca máy, mã thiết bị, và tọa độ CAD. Phân cấp cỡ chữ chặt chẽ: Tiêu đề trang 15px-17px (bold), Thẻ 13px-14px, Nội dung 12px-13px, Nhãn phụ Meta 10.5px-11.5px uppercase tracking.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-02", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-03",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: High-Density Bloomberg Layout & Zero Sidebar Occlusion] Frontend DSCons tối ưu mật độ thông tin cao (Bloomberg/Palantir density): Paddings/gaps gọn gàng 8px-14px cho cards và 6px-10px cho hàng dữ liệu, chia cột Multi-Column Split-View. Chống đè menu (Zero Occlusion): Toàn bộ bố cục chính .erp-main-layout bao bọc nội dung với margin-left: var(--sidebar-width) (260px desktop, 72px collapsed), cấm để sidebar cố định che khuất nội dung.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-03", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-04",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Unidirectional Data Flow & Idempotent Locks] Giao diện DSCons tuân thủ luồng dữ liệu đơn chiều: Các hàm chuyển tab switchTab hoặc switchBoqViewMode là Pure State Renderers, tuyệt đối không gọi ngược lại Action Creators gây đệ quy vô tận. Mọi thao tác submit biểu mẫu và gọi API phải có cờ khóa chống trùng bất đồng bộ (Idempotent locks: if (isSubmitting) return; hoặc debounce) để ngăn chặn gửi nhiều request trùng lặp.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-04", "area": "Area 3"}
    },
    {
        "code": "RULE-FRONTEND-05",
        "area": "Area 3",
        "category": "Frontend UI",
        "text": r"""[DSCons Frontend Theme: Toast Anti-Flood & Static Asset Cache Buster] Hệ thống thông báo DSCons có hàng rào Toast Anti-Flood tự động chặn các thông báo trùng lặp đang hiển thị và giới hạn tối đa 3 Toast cùng lúc trên màn hình. Mọi lệnh gán img.src hình ảnh bản vẽ CAD phải gắn ?v=${Date.now()}. Khi cập nhật file JS/CSS cốt lõi, bắt buộc tăng phiên bản Cache Buster (?v=x.x.x) trên toàn bộ các file .html để trình duyệt người dùng hiển thị đúng UI mới.""",
        "metadata": {"project": "DSCons", "category": "Frontend UI", "code": "RULE-FRONTEND-05", "area": "Area 3"}
    },

    # Area 4: AEC Business (7 facts)
    {
        "code": "RULE-AEC-01",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: 4 Business Pillars of Dinh Son MST 0202111150] Công ty TNHH Xây Dựng Định Sơn (MST: 0202111150) có 4 Trụ cột kinh doanh độc lập: (1) Thi công Xây lắp & Thủy lợi (Đa Độ, Cống Bến Kem, Kiến Minh...); (2) Dịch vụ Vận tải Xe Ben & Logistics Cơ Giới (Thoát Nước Hải Phòng 0200149705 vận chuyển bùn đất); (3) Cho thuê Máy móc Ca máy (Loan Khải 0201889988); (4) Mua bán Vật tư & San lấp (Trung Kiên 0201805660). Tuyệt đối KHÔNG gộp các trụ cột 2, 3, 4 thành Dự án Thi công Xây dựng.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-01", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-02",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: Circular 38 Larsen Pile Norms & Material Cost VL=0] Căn cứ Luật Xây dựng 2025/2026 và Thông tư 38: Công tác Thuê, Ép, Nhổ cừ thép Larsen IV hoặc thuê tôn chống lầy cấu thành 100% từ Chi phí Nhân công (NC) và Chi phí Ca máy (M). Tuyệt đối KHÔNG sinh ra chi phí mua vật liệu thô mới (Bắt buộc VL = 0 VNĐ) trong Bảng Tổng Hợp Nhu Cầu Vật Tư (MR). Nghiêm cấm gán nhầm đơn giá mua cừ mới làm sai lệch dự toán thi công.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-02", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-03",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: Material Budget Ratio Sanity Gate MR/T] Hệ thống kiểm toán dự toán DSCons áp dụng Hàng rào kiểm soát tỷ trọng vật tư (Sanity Check Gate): Tổng chi phí vật tư (MR) bắt buộc nằm trong khoảng 40% - 65% của Chi phí trực tiếp (T = VL + NC + M). Nếu tỷ lệ MR / T vượt quá 75%, hệ thống phải tự động kích hoạt Cảnh báo Bất thường (Anomaly Alert) nhằm chặn đứng lỗi nhân đôi khối lượng hoặc áp nhầm giá mua mới cho thiết bị thuê.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-03", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-04",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: 4-Tier Budgeting & THKP Markup Matrix] Dự toán DSCons phân cấp 4 tầng chi phí: Cấp 1 Chi phí trực tiếp (T = VL + NC + M); Cấp 2 Dự toán XD sau thuế (G_XD = (T + GT + TL) * 1.08 VAT, dùng chào thầu BoQ); Cấp 3 Dự toán Gói thầu (G_GTXD = G_XD + Dự phòng); Cấp 4 Tổng mức đầu tư (G_TMĐT). Hệ số tổng hợp kinh phí (G_XD / T) phải tra cứu đúng loại công trình: Dân dụng ~1.2636; Nông nghiệp Thủy lợi cống đê ~1.2419-1.2543; Giao thông đường cầu ~1.2505; tuyệt đối không áp dụng đồng nhất một công thức.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-04", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-05",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: Anti-Inflation Steel Pricing & Strict Unit Guard] Đơn giá thép mua mới (16.15 - 16.45 tr/tấn) CHỈ ĐƯỢC PHÉP áp dụng cho cốt thép chịu lực kết cấu bê tông theo đúng ĐVT (tấn, 100kg, kg). CẤM TUYỆT ĐỐI áp giá thép tấn cho ĐVT m, m2, tấm, ca, chuyến. Tự động loại trừ 100% khi khớp giá thép với các từ khóa: cừ thép, thuê cừ, cừ larsen, thuê ván thép, ván khuôn thép, khung xương thép, bốc xếp vận chuyển thép, dây chống sét D10, dàn giáo.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-05", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-06",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: Direct-to-Site Accounting & BoQ-Driven Allocation] DSCons tuyệt đối không dùng TK 152 tạo Kho Ảo cho vật tư thi công. Vật tư (thép, xi măng, cát, đá, cọc) giao thẳng về chân công trình được hạch toán trực tiếp: Nợ TK 621_Chi_tiết_Dự_án (hoặc TK 154) / Nợ TK 1331 / Có TK 331. Hệ thống tự động đọc định mức dự toán BoQ của các dự án đang thi công và hạn mức vật tư còn lại (Remaining Quota) để tự động phân rã chi phí và gán đúng mã dự án matched_project_id.""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-06", "area": "Area 4"}
    },
    {
        "code": "RULE-AEC-07",
        "area": "Area 4",
        "category": "AEC Business",
        "text": r"""[DSCons AEC Business: CAD Takeoff Engine TCVN3 Decoding & Bounding Box] Engine bóc tách CAD DSCons giải mã chính xác byte font TCVN3/.VnTime/VNI, cố định stroke-width: 1px non-scaling-stroke trên vector graphics. Tự động quét Model Space thực tế để cắt Bounding Box sạch (Zero-Void), loại bỏ khoảng trống rác >100m. Phân định chặt chẽ Xây mới (NEW_BUILD_ENGINE) vs Cải tạo (RENOVATION_ENGINE áp dụng định mức Chương SA/AA, vật liệu VL = 0 VNĐ, cấm tự sinh khối lượng đúc mới kết cấu hiện trạng).""",
        "metadata": {"project": "DSCons", "category": "AEC Business", "code": "RULE-AEC-07", "area": "Area 4"}
    },

    # Area 5: Testing & Workflow (5 facts)
    {
        "code": "RULE-WORKFLOW-01",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Deep Matrix Workflow D1-D6 on task.md] Mọi đợt tái cấu trúc lớn (Mass Refactoring) hoặc tính năng trên 10 files tại DSCons bắt buộc áp dụng quy trình Deep Matrix Workflow trên task.md từ D1 đến D6: [D1] Module/Epic, [D2] Business Flow, [D3] Domain Logic, [D4] State & Transitions, [D5] Event Bus Dependencies, [D6] File-level Execution. Thực thi từng phần từ D6 ngược lên; nghiêm cấm tạo scaffolding rỗng hoặc TODO giả; cập nhật timestamp và checkbox sau mỗi khối logic.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-01", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-02",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Autonomous Closed-Loop TDD & Regression Gate] Mọi phát triển phần mềm DSCons tuân thủ Test-Driven Development (TDD): Viết test trước khi sửa mã nguồn; xác nhận test FAIL (negative baseline); triển khai mã tối thiểu; tự hành sửa lỗi qua traceback tối đa 5 vòng lặp (zero human hand-holding) cho đến khi 100% test PASS; độ bao phủ coverage >= 80% (unit + integration + E2E). Hàng rào pytest tests -v đạt 100% Passed là điều kiện bắt buộc trước khi commit.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-02", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-03",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: 6-Phase Verification Quality Gate] Trước khi tạo Pull Request hoặc bàn giao tính năng, Agent bắt buộc vượt qua chu trình kiểm chứng 6 pha Verification Loop: Pha 1 Build Verification (npm run build / uvicorn reload); Pha 2 Type Check (pyright / tsc); Pha 3 Lint Check (ruff / eslint); Pha 4 Test Suite (pytest --cov >= 80%); Pha 5 Security Scan (quét secret/SQLi); Pha 6 Diff Review (đối soát git diff không dư thừa).""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-03", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-04",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Eval-Driven Development EDD & Grader Harness] DSCons ERP áp dụng triết lý Eval-Driven Development (EDD) xem evals là unit tests của AI development: Thiết lập tiêu chí thành công trước khi triển khai; theo dõi hồi quy (Regression Evals) với độ tin cậy pass@k; sử dụng Code-Based Grader mang tính tất định (deterministic checks) kiểm tra file patterns, test pass, build success thay vì chấm điểm cảm tính.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-04", "area": "Area 5"}
    },
    {
        "code": "RULE-WORKFLOW-05",
        "area": "Area 5",
        "category": "Testing & Workflow",
        "text": r"""[DSCons Testing & Quality: Real Browser Automation Gate & AST Boundary] Toàn bộ tính năng UI/UX và mô hình bản vẽ/BIM bắt buộc kiểm thử trực tiếp trên trình duyệt thực tế (Real Browser Gate qua Chrome DevTools MCP hoặc Playwright), xác nhận 0 lỗi console JavaScript, FPS > 30 và chụp ảnh nghiệm thu. Đồng thời mọi thay đổi backend bắt buộc vượt qua bộ kiểm tra ranh giới AST tự động: pytest tests/test_architecture_boundary_enforcement.py đạt 100% Passed.""",
        "metadata": {"project": "DSCons", "category": "Testing & Workflow", "code": "RULE-WORKFLOW-05", "area": "Area 5"}
    }
]

async def main():
    print(f"Starting ingestion of {len(FACTS_CATALOG)} structured facts into Mem0...")
    async with sse_client("http://127.0.0.1:8765/sse") as (read, write):
        async with ClientSession(read, write) as session:
            await session.initialize()
            
            init_status = await session.call_tool("mem0_status", {})
            print("Initial status:", init_status.content[0].text)
            
            added_count = 0
            for idx, fact in enumerate(FACTS_CATALOG, 1):
                args = {
                    "text": fact["text"],
                    "user_id": "developer",
                    "metadata": fact["metadata"]
                }
                res = await session.call_tool("mem0_add", args)
                res_data = json.loads(res.content[0].text)
                status = res_data.get("status")
                if status == "success":
                    added_count += 1
                    print(f"[{idx}/27] Added {fact['code']} ({fact['area']}): SUCCESS")
                elif status == "exists":
                    print(f"[{idx}/27] Verified {fact['code']} ({fact['area']}): ALREADY EXISTS")
                else:
                    print(f"[{idx}/27] Result for {fact['code']}: {res.content[0].text}")
                
                # Small delay to ensure clean asynchronous indexing in Embedded Qdrant
                await asyncio.sleep(0.18)
            
            final_status = await session.call_tool("mem0_status", {})
            print("Final status:", final_status.content[0].text)

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