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]>
This commit is contained in:
dingo
2026-03-29 13:16:20 +07:00
co-authored by Claude Opus 4.6
parent 93c27fa053
commit 26b1c5b493
9 changed files with 1978 additions and 15 deletions
+56
View File
@@ -0,0 +1,56 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" font-family="Inter, system-ui, sans-serif">
<defs>
<linearGradient id="bg2" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" style="stop-color:#1a1a2e"/>
<stop offset="100%" style="stop-color:#16213e"/>
</linearGradient>
</defs>
<rect width="800" height="500" fill="url(#bg2)" rx="12"/>
<text x="400" y="40" text-anchor="middle" fill="#e94560" font-size="22" font-weight="700">Task Routing Algorithm</text>
<text x="400" y="60" text-anchor="middle" fill="#8899aa" font-size="11">Intelligent capability-based task placement across the mesh</text>
<!-- Flow diagram -->
<!-- Step 1: Task arrives -->
<rect x="300" y="80" width="200" height="45" rx="8" fill="#0f3460" stroke="#fab283" stroke-width="2"/>
<text x="400" y="107" text-anchor="middle" fill="#fab283" font-size="13" font-weight="600">Task Arrives</text>
<line x1="400" y1="125" x2="400" y2="150" stroke="#555" stroke-width="2" marker-end="url(#arrow)"/>
<!-- Step 2: Hard filters -->
<rect x="250" y="150" width="300" height="60" rx="8" fill="#0f3460" stroke="#e94560" stroke-width="2"/>
<text x="400" y="172" text-anchor="middle" fill="#e94560" font-size="12" font-weight="600">Hard Filters (Pass/Fail)</text>
<text x="400" y="190" text-anchor="middle" fill="#8899aa" font-size="10">Required model? Required tools? Min VRAM?</text>
<text x="400" y="203" text-anchor="middle" fill="#e06c75" font-size="10">Nodes failing any filter are excluded</text>
<line x1="400" y1="210" x2="400" y2="235" stroke="#555" stroke-width="2"/>
<!-- Step 3: Scoring -->
<rect x="200" y="235" width="400" height="110" rx="8" fill="#0f3460" stroke="#00d4aa" stroke-width="2"/>
<text x="400" y="258" text-anchor="middle" fill="#00d4aa" font-size="13" font-weight="600">Soft Scoring (0.0 - 1.0)</text>
<g fill="#ccc" font-size="11" font-family="monospace">
<text x="230" y="280" fill="#fab283">35%</text><text x="270" y="280">(1.0 - load)</text><text x="440" y="280" fill="#7fd88f">prefer idle nodes</text>
<text x="230" y="298" fill="#fab283">25%</text><text x="270" y="298">(vram_free / vram_total)</text><text x="440" y="298" fill="#7fd88f">prefer GPU headroom</text>
<text x="230" y="316" fill="#fab283">15%</text><text x="270" y="316">(mem_free / mem_total)</text><text x="440" y="316" fill="#7fd88f">prefer RAM headroom</text>
<text x="230" y="334" fill="#fab283">15%</text><text x="270" y="334">(1.0 / hop_count)</text><text x="440" y="334" fill="#7fd88f">prefer closer nodes</text>
<text x="230" y="334" fill="#fab283">10%</text><text x="270" y="334">(model_match)</text><text x="440" y="334" fill="#7fd88f">prefer exact match</text>
</g>
<line x1="400" y1="345" x2="400" y2="370" stroke="#555" stroke-width="2"/>
<!-- Step 4: Selection -->
<rect x="275" y="370" width="250" height="45" rx="8" fill="#0f3460" stroke="#5c9cf5" stroke-width="2"/>
<text x="400" y="397" text-anchor="middle" fill="#5c9cf5" font-size="13" font-weight="600">Select Highest Score</text>
<!-- Fork: local vs remote -->
<line x1="340" y1="415" x2="250" y2="450" stroke="#7fd88f" stroke-width="2"/>
<line x1="460" y1="415" x2="550" y2="450" stroke="#fab283" stroke-width="2"/>
<rect x="150" y="445" width="160" height="35" rx="6" fill="#303A30" stroke="#7fd88f" stroke-width="1.5"/>
<text x="230" y="467" text-anchor="middle" fill="#7fd88f" font-size="12" font-weight="600">Execute Locally</text>
<rect x="470" y="445" width="200" height="35" rx="6" fill="#3A3030" stroke="#fab283" stroke-width="1.5"/>
<text x="570" y="467" text-anchor="middle" fill="#fab283" font-size="12" font-weight="600">Route to Remote Peer</text>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB