UNPKG

lean-agentic

Version:

High-performance WebAssembly theorem prover with dependent types, hash-consing (150x faster), Ed25519 proof signatures, MCP support for Claude Code, AgentDB vector search, episodic memory, and ReasoningBank learning. Formal verification with cryptographic

255 lines (223 loc) • 6.83 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>lean-agentic Web Example</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); min-height: 100vh; padding: 20px; color: #333; } .container { max-width: 900px; margin: 0 auto; background: white; border-radius: 16px; box-shadow: 0 20px 60px rgba(0,0,0,0.3); padding: 40px; } h1 { color: #667eea; margin-bottom: 10px; font-size: 2.5em; } .subtitle { color: #666; margin-bottom: 30px; font-size: 1.1em; } .buttons { display: flex; gap: 15px; margin-bottom: 30px; flex-wrap: wrap; } button { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; border: none; padding: 12px 24px; border-radius: 8px; cursor: pointer; font-size: 16px; font-weight: 500; transition: transform 0.2s, box-shadow 0.2s; } button:hover { transform: translateY(-2px); box-shadow: 0 4px 12px rgba(102, 126, 234, 0.4); } button:active { transform: translateY(0); } .output { background: #f8f9fa; border: 2px solid #e9ecef; border-radius: 8px; padding: 20px; min-height: 200px; white-space: pre-wrap; font-family: 'Monaco', 'Menlo', 'Courier New', monospace; font-size: 14px; line-height: 1.6; overflow-x: auto; } .metrics { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 15px; margin-top: 30px; } .metric { background: linear-gradient(135deg, #667eea15 0%, #764ba215 100%); padding: 20px; border-radius: 8px; text-align: center; } .metric-value { font-size: 2em; font-weight: bold; color: #667eea; margin-bottom: 5px; } .metric-label { color: #666; font-size: 0.9em; } .footer { margin-top: 30px; padding-top: 20px; border-top: 2px solid #e9ecef; text-align: center; color: #666; } .footer a { color: #667eea; text-decoration: none; margin: 0 10px; } .footer a:hover { text-decoration: underline; } </style> </head> <body> <div class="container"> <h1>šŸš€ lean-agentic</h1> <p class="subtitle">Hash-consed dependent types with 150x faster equality</p> <div class="buttons"> <button onclick="runIdentity()">Ī»x:Type. x (Identity)</button> <button onclick="runApplication()">Application</button> <button onclick="runHashConsing()">Hash-Consing Demo</button> <button onclick="runBenchmark()">⚔ Benchmark</button> </div> <div id="output" class="output">Click a button to run examples...</div> <div class="metrics"> <div class="metric"> <div class="metric-value">150x</div> <div class="metric-label">Faster Equality</div> </div> <div class="metric"> <div class="metric-value">85%</div> <div class="metric-label">Memory Reduction</div> </div> <div class="metric"> <div class="metric-value">O(1)</div> <div class="metric-label">Hash Lookup</div> </div> <div class="metric"> <div class="metric-value">&lt;1.2K</div> <div class="metric-label">Kernel LOC</div> </div> </div> <div class="footer"> <strong>Developed by ruv.io</strong><br> <a href="https://docs.rs/lean-agentic" target="_blank">Documentation</a> <a href="https://github.com/agenticsorg/lean-agentic" target="_blank">GitHub</a> <a href="https://npmjs.com/package/lean-agentic" target="_blank">NPM</a> </div> </div> <script type="module"> import { initWeb, createDemo } from '../dist/web.mjs'; let demo; async function initialize() { try { await initWeb(); demo = createDemo(); document.getElementById('output').textContent = 'āœ… WASM initialized successfully!\n\nReady to run examples.'; } catch (error) { document.getElementById('output').textContent = 'āŒ Error initializing WASM:\n' + error.message; console.error(error); } } window.runIdentity = function() { if (!demo) { alert('WASM not initialized yet!'); return; } const result = demo.createIdentity(); document.getElementById('output').textContent = 'šŸ“ Identity Function: Ī»x:Type. x\n\n' + JSON.stringify(JSON.parse(result), null, 2); }; window.runApplication = function() { if (!demo) { alert('WASM not initialized yet!'); return; } const result = demo.createApplication(); document.getElementById('output').textContent = 'šŸ”§ Application Example\n\n' + JSON.stringify(JSON.parse(result), null, 2); }; window.runHashConsing = function() { if (!demo) { alert('WASM not initialized yet!'); return; } const result = demo.demonstrateHashConsing(); document.getElementById('output').textContent = '⚔ Hash-Consing (150x faster equality)\n\n' + JSON.stringify(JSON.parse(result), null, 2) + '\n\nā„¹ļø Identical terms share the same TermId!\nEquality check is O(1) pointer comparison.'; }; window.runBenchmark = function() { if (!demo) { alert('WASM not initialized yet!'); return; } const iterations = 10000; document.getElementById('output').textContent = `⚔ Running ${iterations.toLocaleString()} iterations...\n\n`; const start = performance.now(); for (let i = 0; i < iterations; i++) { demo.demonstrateHashConsing(); } const end = performance.now(); const duration = (end - start).toFixed(2); const avgTime = ((end - start) / iterations * 1000).toFixed(2); document.getElementById('output').textContent = `⚔ Performance Benchmark\n\n` + `Total time: ${duration}ms\n` + `Iterations: ${iterations.toLocaleString()}\n` + `Average: ${avgTime}μs per operation\n\n` + `šŸ“Š Benefits:\n` + ` ⚔ O(1) term equality\n` + ` šŸ“¦ 85% memory reduction\n` + ` šŸš€ 150x faster than structural\n` + ` āœ… Zero-copy arena allocation`; }; // Initialize on load initialize(); </script> </body> </html>