Files
optimclaw/docs/mesh-architecture.svg
T
dingoandClaude Opus 4.6 26b1c5b493 docs: mesh cluster documentation, SVG diagrams, and ironclaw->optimclaw rename
- MESH_CLUSTER.md: full documentation for autonomous AI mesh network
- LAZY_TOOLS.md: lazy tool loading for smaller LLMs
- mesh-architecture.svg: colorful network topology diagram
- task-routing.svg: scoring algorithm visualization
- pq-handshake.svg: ML-KEM-768 key exchange sequence diagram
- HTML docs with dark theme styling
- Renamed ironclaw references to optimclaw in .env.example and README

Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]>
2026-03-29 13:16:20 +07:00

113 lines
6.2 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 900 600" font-family="Inter, system-ui, sans-serif">
<defs>
<linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#1a1a2e"/>
<stop offset="100%" style="stop-color:#16213e"/>
</linearGradient>
<linearGradient id="node-grad" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#0f3460"/>
<stop offset="100%" style="stop-color:#1a1a2e"/>
</linearGradient>
<filter id="glow">
<feGaussianBlur stdDeviation="3" result="blur"/>
<feMerge><feMergeNode in="blur"/><feMergeNode in="SourceGraphic"/></feMerge>
</filter>
<filter id="shadow">
<feDropShadow dx="2" dy="2" stdDeviation="4" flood-color="#000" flood-opacity="0.3"/>
</filter>
</defs>
<!-- Background -->
<rect width="900" height="600" fill="url(#bg)" rx="12"/>
<!-- Title -->
<text x="450" y="45" text-anchor="middle" fill="#e94560" font-size="24" font-weight="700" letter-spacing="1">OptimClaw Mesh Network</text>
<text x="450" y="68" text-anchor="middle" fill="#8899aa" font-size="12">Autonomous Peer-to-Peer AI Agent Cluster with Post-Quantum Encryption</text>
<!-- Connection lines (behind nodes) -->
<g stroke="#e94560" stroke-opacity="0.3" stroke-width="2" stroke-dasharray="6,4">
<!-- A-B --> <line x1="180" y1="200" x2="450" y2="160"/>
<!-- B-C --> <line x1="550" y1="160" x2="720" y2="200"/>
<!-- A-E --> <line x1="180" y1="280" x2="350" y2="380"/>
<!-- B-E --> <line x1="450" y1="240" x2="420" y2="380"/>
<!-- C-E --> <line x1="720" y1="280" x2="500" y2="380"/>
<!-- C-D --> <line x1="790" y1="280" x2="790" y2="380"/>
<!-- B-D --> <line x1="550" y1="240" x2="750" y2="380"/>
</g>
<!-- Encrypted channel indicators -->
<g fill="#00d4aa" font-size="9" font-weight="600">
<text x="310" y="175" text-anchor="middle" transform="rotate(-10,310,175)">ML-KEM-768</text>
<text x="640" y="175" text-anchor="middle" transform="rotate(10,640,175)">AES-256-GCM</text>
<text x="260" y="340" text-anchor="middle" transform="rotate(25,260,340)">PQ Encrypted</text>
<text x="650" y="340" text-anchor="middle" transform="rotate(25,650,340)">PQ Encrypted</text>
</g>
<!-- Node A: Laptop -->
<g filter="url(#shadow)">
<rect x="100" y="170" width="160" height="120" rx="10" fill="url(#node-grad)" stroke="#e94560" stroke-width="2"/>
<circle cx="130" cy="195" r="8" fill="#00d4aa"/>
<text x="145" y="200" fill="#fff" font-size="14" font-weight="600">Node A</text>
<text x="120" y="220" fill="#8899aa" font-size="11">Laptop | 6GB VRAM</text>
<text x="120" y="238" fill="#fab283" font-size="10">RTX 3060 Mobile</text>
<text x="120" y="255" fill="#5c9cf5" font-size="10">qwen2.5-coder:7b</text>
<text x="120" y="275" fill="#7fd88f" font-size="10">Load: 35% | 12 tools</text>
</g>
<!-- Node B: Server -->
<g filter="url(#shadow)">
<rect x="370" y="130" width="160" height="120" rx="10" fill="url(#node-grad)" stroke="#fab283" stroke-width="2"/>
<circle cx="400" cy="155" r="8" fill="#00d4aa"/>
<text x="415" y="160" fill="#fff" font-size="14" font-weight="600">Node B</text>
<text x="390" y="180" fill="#8899aa" font-size="11">Server | 24GB VRAM</text>
<text x="390" y="198" fill="#fab283" font-size="10">RTX 4090</text>
<text x="390" y="215" fill="#5c9cf5" font-size="10">qwen3-coder:30b</text>
<text x="390" y="235" fill="#7fd88f" font-size="10">Load: 10% | 30 tools</text>
</g>
<!-- Node C: Cloud -->
<g filter="url(#shadow)">
<rect x="640" y="170" width="160" height="120" rx="10" fill="url(#node-grad)" stroke="#5c9cf5" stroke-width="2"/>
<circle cx="670" cy="195" r="8" fill="#00d4aa"/>
<text x="685" y="200" fill="#fff" font-size="14" font-weight="600">Node C</text>
<text x="660" y="220" fill="#8899aa" font-size="11">Cloud | 80GB VRAM</text>
<text x="660" y="238" fill="#fab283" font-size="10">A100</text>
<text x="660" y="255" fill="#5c9cf5" font-size="10">llama3.1:70b</text>
<text x="660" y="275" fill="#7fd88f" font-size="10">Load: 5% | 30 tools</text>
</g>
<!-- Node D: Remote -->
<g filter="url(#shadow)">
<rect x="700" y="350" width="160" height="120" rx="10" fill="url(#node-grad)" stroke="#9d7cd8" stroke-width="2"/>
<circle cx="730" cy="375" r="8" fill="#f5a742"/>
<text x="745" y="380" fill="#fff" font-size="14" font-weight="600">Node D</text>
<text x="720" y="400" fill="#8899aa" font-size="11">Remote | 48GB VRAM</text>
<text x="720" y="418" fill="#fab283" font-size="10">2x RTX 3090</text>
<text x="720" y="435" fill="#5c9cf5" font-size="10">deepseek-coder:33b</text>
<text x="720" y="455" fill="#f5a742" font-size="10">Load: 72% | 30 tools</text>
</g>
<!-- Node E: Edge -->
<g filter="url(#shadow)">
<rect x="310" y="350" width="160" height="120" rx="10" fill="url(#node-grad)" stroke="#7fd88f" stroke-width="2"/>
<circle cx="340" cy="375" r="8" fill="#00d4aa"/>
<text x="355" y="380" fill="#fff" font-size="14" font-weight="600">Node E</text>
<text x="330" y="400" fill="#8899aa" font-size="11">Edge | 8GB VRAM</text>
<text x="330" y="418" fill="#fab283" font-size="10">RTX 4060</text>
<text x="330" y="435" fill="#5c9cf5" font-size="10">qwen3:8b</text>
<text x="330" y="455" fill="#7fd88f" font-size="10">Load: 20% | 12 tools</text>
</g>
<!-- Legend -->
<g transform="translate(50,510)">
<rect width="800" height="70" rx="8" fill="#0f3460" fill-opacity="0.5" stroke="#333" stroke-width="1"/>
<text x="20" y="22" fill="#fff" font-size="12" font-weight="600">Protocol Stack</text>
<g transform="translate(20,35)">
<rect width="12" height="12" rx="2" fill="#e94560"/><text x="18" y="11" fill="#ccc" font-size="10">UDP Beacon Discovery (port 9900)</text>
<rect x="200" width="12" height="12" rx="2" fill="#00d4aa"/><text x="218" y="11" fill="#ccc" font-size="10">ML-KEM-768 Key Exchange</text>
<rect x="400" width="12" height="12" rx="2" fill="#fab283"/><text x="418" y="11" fill="#ccc" font-size="10">AES-256-GCM Encrypted WebSocket</text>
<rect x="630" width="12" height="12" rx="2" fill="#5c9cf5"/><text x="648" y="11" fill="#ccc" font-size="10">SWIM Gossip Protocol</text>
</g>
</g>
</svg>