diff options
Diffstat (limited to '.bkp-fix-20261023_143429/help.html')
| -rw-r--r-- | .bkp-fix-20261023_143429/help.html | 2147 |
1 files changed, 2147 insertions, 0 deletions
diff --git a/.bkp-fix-20261023_143429/help.html b/.bkp-fix-20261023_143429/help.html new file mode 100644 index 0000000..0d70e08 --- /dev/null +++ b/.bkp-fix-20261023_143429/help.html @@ -0,0 +1,2147 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="UTF-8"> +<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> +<meta name="theme-color" content="#0a0a14"> +<title>WebX11 — Help</title> +<script>!function(){var v=localStorage.getItem('webx11_cache_ver');if(!v)return;var m=v.match(/v([\d.]+)/);if(!m)return;var ver='v'+m[1];document.title='WebX11 '+ver+' \u2014 Help';var els=document.querySelectorAll('.badge-v');for(var i=0;i<els.length;i++)els[i].textContent=ver;var qr=document.querySelector('.quick-ref-title');if(qr)qr.textContent='WebX11 '+ver;var ov=document.querySelector('#overview p');if(ov)ov.textContent=ov.textContent.replace(/v[\d.]+/,ver)}()</script> +<style> +/* ── Reset & Base ── */ +*,*::before,*::after{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent} +:root{ + --bg:#0a0a14; + --bg2:#141428; + --bg3:#1c1c36; + --bg4:#24244a; + --text:#e8e8ff; + --text2:#b0b0cc; + --accent:#818cf8; + --accent2:#a78bfa; + --green:#34d399; + --cyan:#22d3ee; + --amber:#fbbf24; + --rose:#fb7185; + --pink:#e879f9; + --border:#3a3a5a; + --radius:12px; + --font-mono:'JetBrains Mono','Fira Code','Cascadia Code','Courier New',monospace; + --font-sans:-apple-system,BlinkMacSystemFont,'Segoe UI','Inter','SF Pro',Roboto,sans-serif +} +html{scroll-behavior:smooth} +body{background:var(--bg);color:var(--text);font-family:var(--font-sans);line-height:1.8;font-size:17px;-webkit-font-smoothing:antialiased} +@media(max-width:600px){body{font-size:15px}} + +/* ── Header ── */ +header{ + position:sticky;top:0;z-index:100; + background:rgba(10,10,20,.85);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px); + border-bottom:1px solid var(--border);padding:0 +} +header::after{ + content:'';position:absolute;bottom:-1px;left:10%;right:10%;height:1px; + background:linear-gradient(90deg,transparent,var(--accent),transparent);opacity:.5 +} +.header-inner{max-width:960px;margin:0 auto;padding:20px 24px 16px;display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px} +.header-left{display:flex;align-items:center;gap:14px} +.header-logo{width:36px;height:36px;border-radius:8px;background:linear-gradient(135deg,var(--accent),var(--pink));display:flex;align-items:center;justify-content:center;font-size:18px;color:#fff;flex-shrink:0} +h1{font-size:1.35em;font-weight:700;letter-spacing:-.02em;color:#fff} +h1 span{color:var(--accent2)} +.header-meta{display:flex;align-items:center;gap:10px;font-size:.8em;color:var(--text2)} +.badge{ + display:inline-block;padding:3px 10px;border-radius:20px;font-size:.7em;font-weight:600; + letter-spacing:.03em;text-transform:uppercase +} +.badge-v{background:rgba(124,92,252,.2);color:var(--accent2);border:1px solid rgba(124,92,252,.3)} +.badge-new{background:rgba(52,211,153,.15);color:var(--green);border:1px solid rgba(52,211,153,.25)} + +/* ── Nav ── */ +nav{ + position:sticky;top:74px;z-index:99; + background:rgba(10,10,20,.7);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px); + border-bottom:1px solid var(--border);padding:0;overflow-x:auto;scrollbar-width:none;-ms-overflow-style:none +} +nav::-webkit-scrollbar{display:none} +.nav-inner{max-width:960px;margin:0 auto;padding:8px 24px;display:flex;gap:4px;flex-wrap:nowrap} +.nav-link{ + flex-shrink:0;color:var(--text2);text-decoration:none;padding:6px 14px;border-radius:8px; + font-size:.78em;font-weight:500;transition:all .15s;white-space:nowrap +} +.nav-link:hover{color:#fff;background:rgba(124,92,252,.12)} + +/* ── Main ── */ +main{max-width:960px;margin:0 auto;padding:32px 24px 80px} + +/* ── Search ── */ +.search-box{ + display:flex;gap:8px;margin-bottom:40px; + background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius); + padding:4px;transition:border-color .2s +} +.search-box:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(124,92,252,.15)} +.search-box input{ + flex:1;background:transparent;border:none;color:var(--text);font-family:var(--font-mono); + font-size:.9em;outline:none;padding:10px 14px +} +.search-box input::placeholder{color:var(--text2);opacity:.6} +.search-box button{ + background:var(--accent);color:#fff;border:none;padding:8px 20px;border-radius:8px; + font-size:.8em;font-weight:600;cursor:pointer;transition:opacity .15s;font-family:inherit +} +.search-box button:hover{opacity:.85} +.search-result-msg{color:var(--amber);font-size:.85em;margin-top:8px;display:none} + +/* ── Sections ── */ +section{margin-bottom:56px;scroll-margin-top:130px} +h2{ + font-size:1.35em;font-weight:700;color:#fff;margin-bottom:20px;letter-spacing:-.01em; + display:flex;align-items:center;gap:10px +} +h2::after{content:'';flex:1;height:1px;background:linear-gradient(90deg,var(--border),transparent)} +h3{ + font-size:1.05em;font-weight:600;color:var(--text);margin:28px 0 12px; + display:flex;align-items:center;gap:8px +} +h4{font-size:.92em;font-weight:600;color:var(--accent2);margin:20px 0 8px} +p{margin-bottom:14px;color:var(--text);line-height:1.8} +ul,ol{margin-bottom:14px;padding-left:22px;color:var(--text)} +li{margin-bottom:6px} +a{color:var(--accent2);text-decoration:none;transition:color .15s} +a:hover{color:#fff} + +/* ── Tables ── */ +.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;margin:16px 0;border-radius:var(--radius);border:1px solid var(--border)} +table{width:100%;border-collapse:collapse;font-size:.88em} +th,td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--border)} +th{background:var(--bg3);color:var(--accent2);font-weight:600;font-size:.82em;text-transform:uppercase;letter-spacing:.04em} +tr:last-child td{border-bottom:none} +tr:hover td{background:rgba(124,92,252,.04)} +code{ + font-family:var(--font-mono);font-size:.88em;padding:2px 7px;border-radius:5px; + background:rgba(124,92,252,.12);color:var(--accent2);border:1px solid rgba(124,92,252,.15) +} +pre code{background:transparent;border:none;padding:0;color:var(--text);font-size:.88em} + +/* ── Pre / Code Blocks ── */ +pre{ + background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius); + padding:16px 20px;overflow-x:auto;margin:16px 0;font-family:var(--font-mono);font-size:.85em;line-height:1.6 +} +pre .cmt{color:var(--text2);opacity:.6} /* comment style */ + +/* ── Callouts ── */ +.callout{ + padding:16px 20px;border-radius:var(--radius);margin:16px 0; + border-left:3px solid;position:relative +} +.callout::before{content:'';position:absolute;inset:0;border-radius:var(--radius);opacity:.06;pointer-events:none} +.callout-success{border-color:var(--green)}.callout-success::before{background:var(--green)} +.callout-info{border-color:var(--cyan)}.callout-info::before{background:var(--cyan)} +.callout-warning{border-color:var(--amber)}.callout-warning::before{background:var(--amber)} +.callout-error{border-color:var(--rose)}.callout-error::before{background:var(--rose)} +.callout-ollama{border-color:var(--pink)}.callout-ollama::before{background:var(--pink)} +.callout-title{font-weight:700;margin-bottom:6px;display:block;font-size:.92em} + +/* ── Feature Grid ── */ +.feature-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;margin:16px 0} +.feature-card{ + background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius); + padding:16px;transition:border-color .2s,transform .15s +} +.feature-card:hover{border-color:rgba(124,92,252,.4);transform:translateY(-1px)} +.feature-card h4{margin:0 0 6px;font-size:.88em} +.feature-card p{font-size:.82em;color:var(--text2);margin:0;line-height:1.5} + +/* ── Quick Ref ── */ +.quick-ref{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:24px;margin:16px 0} +.quick-ref-title{color:var(--accent2);font-weight:700;text-align:center;margin-bottom:16px;font-size:.95em;letter-spacing:.02em;text-transform:uppercase} +.quick-ref-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px} +.quick-ref-item{background:var(--bg3);padding:10px 12px;border-radius:8px;border:1px solid var(--border)} +.quick-ref-item .cmd{color:var(--accent2);font-family:var(--font-mono);font-weight:600;font-size:.85em;display:block} +.quick-ref-item .desc{color:var(--text2);font-size:.78em;margin-top:3px} + +/* ── Version Items ── */ +.version-item{background:var(--bg2);border:1px solid var(--border);border-radius:var(--radius);padding:20px;margin:12px 0;transition:border-color .2s} +.version-item:hover{border-color:rgba(124,92,252,.3)} +.version-item .v-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;flex-wrap:wrap;gap:6px} +.version-item .v-num{color:var(--accent2);font-weight:700;font-size:.95em} +.version-item .v-date{color:var(--text2);font-size:.82em} +.version-item ul{margin:0;padding-left:18px} +.version-item li{margin-bottom:4px;font-size:.88em;color:var(--text)} + +/* ── Footer ── */ +footer{ + text-align:center;padding:32px 24px;border-top:1px solid var(--border); + color:var(--text2);font-size:.82em +} +footer .links{display:flex;justify-content:center;gap:20px;margin-bottom:14px;flex-wrap:wrap} +footer .links a{color:var(--text);font-weight:500} +footer .links a:hover{color:var(--accent2)} +footer .tagline{color:var(--accent2);margin-top:10px;font-weight:500} + +/* ── Back to Top ── */ +.back-top{ + position:fixed;bottom:24px;right:24px; + background:var(--bg3);border:1px solid var(--border);color:var(--text2); + width:40px;height:40px;border-radius:10px;display:flex;align-items:center;justify-content:center; + font-size:18px;cursor:pointer;opacity:0;pointer-events:none;transition:all .2s;z-index:50; + backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);text-decoration:none +} +.back-top.visible{opacity:1;pointer-events:auto} +.back-top:hover{background:var(--accent);color:#fff;border-color:var(--accent);transform:translateY(-2px)} + +/* ── Responsive ── */ +@media(max-width:600px){ + .header-inner{padding:16px 16px 12px} + .header-meta{display:none} + .nav-inner{padding:6px 12px;gap:2px} + .nav-link{padding:5px 10px;font-size:.74em} + main{padding:20px 16px 60px} + h2{font-size:1.15em} + .feature-grid{grid-template-columns:1fr} + .quick-ref-grid{grid-template-columns:1fr 1fr} + pre{font-size:.8em;padding:12px 14px} + th,td{padding:8px 10px;font-size:.82em} +} +@media(max-width:400px){ + .quick-ref-grid{grid-template-columns:1fr} + .badge-new{display:none} +} + +/* ── Doc Tabs ── */ +.doc-tabs{display:flex;gap:0;margin-bottom:32px;border-bottom:1px solid var(--border);flex-wrap:wrap} +.doc-tabs input{display:none} +.doc-tabs label{ + flex-shrink:0;padding:12px 20px;cursor:pointer;font-size:.82em;font-weight:600; + color:var(--text2);border-bottom:2px solid transparent;transition:all .15s; + font-family:var(--font-sans);user-select:none;-webkit-user-select:none +} +.doc-tabs label:hover{color:var(--text)} +.doc-tabs input:checked+label{color:var(--accent2);border-color:var(--accent2)} +.doc-tab{display:none} +.doc-tab.active{display:block} + +</style> +</head> +<body> + +<header> + <div class="header-inner"> + <div class="header-left"> + <div class="header-logo">⚡</div> + <h1>WebX11 <span>Docs</span></h1> + </div> + <div class="header-meta"> + <span class="badge badge-v">v4.5.22</span> + <span class="badge badge-new">38 core · ext</span> + <span style="color:var(--text2)">160+ commands</span> + </div> + </div> +</header> + +<nav> + <div class="nav-inner"> + <a href="#overview" class="nav-link">Overview</a> + <a href="#start" class="nav-link">Quick Start</a> + <a href="#commands" class="nav-link">Commands</a> + <a href="#filesystem" class="nav-link">Filesystem</a> + <a href="#ai" class="nav-link">AI Agent</a> + <a href="skills.html" class="nav-link">Skills → dynamic</a> + <a href="#ollama" class="nav-link">Ollama</a> + <a href="#web" class="nav-link">Search & Web</a> + <a href="#agents" class="nav-link">Agents</a> + <a href="#a2a-contracts" class="nav-link">A2A</a> + <a href="#neural-vfs" class="nav-link">Neural VFS</a> + <a href="#server-monitor" class="nav-link">Monitor</a> + <a href="#debug-panel" class="nav-link">Debug</a> + <a href="#sandbox" class="nav-link">Sandbox</a> + <a href="#memory-graph" class="nav-link">Memory</a> + <a href="#world-model" class="nav-link">World Model</a> + <a href="#security" class="nav-link">Security</a> + <a href="#trouble" class="nav-link">Troubleshoot</a> + <a href="#ref" class="nav-link">Quick Ref</a> + <a href="#history" class="nav-link">Changelog</a> + </div> +</nav> + +<main> +<div class="doc-tabs"> + <input type="radio" name="doc-layer" id="tab-basics" checked> + <label for="tab-basics">🌱 Start in 5 Min</label> + <input type="radio" name="doc-layer" id="tab-guide"> + <label for="tab-guide">📘 User Guide</label> + <input type="radio" name="doc-layer" id="tab-dev"> + <label for="tab-dev">🔧 Dev Reference</label> +</div> +<div class="doc-tab active" id="content-basics"> + <section id="basics-overview"> + <h2>🚀 Welcome to newOS4</h2> + <div class="callout callout-success"> + <span class="callout-title">🎮 New here?</span> + Type <code>tutorial</code> in the terminal to start a 2-minute interactive tour! + </div> + <div class="feature-grid"> + <div class="feature-card"><h4>🖥️ Terminal OS</h4><p>Full virtual filesystem with ls, cd, cat, touch, edit, find, grep and 50+ Unix-like commands.</p></div> + <div class="feature-card"><h4>🤖 AI Assistant</h4><p>Built-in AI agent with tool calling, skills, memory, and 28 tools. Just type <code>ai "your question"</code>.</p></div> + <div class="feature-card"><h4>🧩 Module System</h4><p>50 modules across 3 layers — <a href="modules.html">Browse on Modules page →</a> (dynamic, searchable, live status)</p></div> + <div class="feature-card"><h4>📚 Skills</h4><p>Browse live on the <a href="skills.html">Skills page →</a> (searchable, filterable, no hardcoded lists).</p></div> + </div> + </section> + + <section id="basics-first"> + <h3>🔤 First 6 Commands</h3> + <div class="quick-ref"> + <div class="quick-ref-grid"> + <div class="quick-ref-item"><span class="cmd">help</span><span class="desc">Show all commands</span></div> + <div class="quick-ref-item"><span class="cmd">ls</span><span class="desc">List files</span></div> + <div class="quick-ref-item"><span class="cmd">cat</span><span class="desc">View file content</span></div> + <div class="quick-ref-item"><span class="cmd">clear</span><span class="desc">Clear terminal</span></div> + <div class="quick-ref-item"><span class="cmd">touch</span><span class="desc">Create a file</span></div> + <div class="quick-ref-item"><span class="cmd">ai</span><span class="desc">Ask the AI assistant</span></div> + </div> + </div> + <h3>📋 Workflow</h3> + <ol style="margin-bottom:14px;padding-left:22px;color:var(--text)"> + <li>Type <code>help</code> — see every available command</li> + <li>Type <code>ls</code> — browse files in your virtual drive</li> + <li>Type <code>touch hello.txt</code> — create a file</li> + <li>Type <code>edit hello.txt</code> — write something and save</li> + <li>Type <code>ai "summarize this"</code> — let AI analyze your files</li> + <li>Type <code>status</code> — check system health</li> + </ol> + </section> + + <section> + <h3>🔧 Quick Start</h3> + <p>Type <code>help</code> to see all 130+ commands grouped by category. Use <code>help <command></code> for details on a specific one.</p> + <p>The <strong>📋 Quick Commands</strong> panel (Ctrl+K) has clickable cards for common tasks.</p> + <p>For the full reference, switch to the <strong>📘 User Guide</strong> tab — it covers every module, filesystem, AI, skills, configuration, and all extended modules in detail.</p> + </section> +</div> + <div class="search-box"> + <input type="text" id="search-input" placeholder="Search docs…" spellcheck="false"> + <button onclick="searchDocs()">Search</button> + </div> + <div class="search-result-msg" id="search-result-msg"></div> + + <div class="doc-tab" id="content-dev"> + <section id="dev-api"> + <h2>🔧 Module Development API</h2> + <h3>Ext Module Structure</h3> + <p>Modules are ES6 classes with 3 required and 1 optional method:</p> + <pre><code>class MyModule { + constructor() { this.commands = {}; this.terminal = null; } + requirements() { return { met: true, missing: [] }; } + getHelpInfo() { return { 'mycmd': 'mycmd — What it does' }; } + registerCommands() { this.commands['mycmd'] = (args) => { /* ... */ }; } +} +// Auto-register: +if (typeof window.webx11 !== 'undefined' && window.webx11) { + webx11.moduleManager.registerModule(new MyModule(), 'url'); +}</code></pre> + + <h3>VFS (Virtual FileSystem) API</h3> + <p>Access via <code>this.terminal.fs</code>:</p> + <div class="table-wrap"><table> + <tr><th>Method</th><th>Returns</th><th>Description</th></tr> + <tr><td><code>readFile(path)</code></td><td>string or null</td><td>Read file content</td></tr> + <tr><td><code>writeFile(path, content)</code></td><td>boolean</td><td>Write string to file</td></tr> + <tr><td><code>ls(path)</code></td><td>array</td><td>List directory entries</td></tr> + <tr><td><code>mkdir(path)</code></td><td>boolean</td><td>Create directory</td></tr> + <tr><td><code>rm(path)</code></td><td>boolean</td><td>Remove file</td></tr> + <tr><td><code>rmdir(path)</code></td><td>boolean</td><td>Remove empty directory</td></tr> + <tr><td><code>touch(path)</code></td><td>boolean</td><td>Create empty file</td></tr> + <tr><td><code>cd(path)</code></td><td>boolean</td><td>Change current directory</td></tr> + <tr><td><code>pwd()</code></td><td>string</td><td>Current directory path</td></tr> + <tr><td><code>mv(old, new)</code></td><td>boolean</td><td>Move/rename file</td></tr> + <tr><td><code>cp(src, dst)</code></td><td>boolean</td><td>Copy file</td></tr> + </table></div> + + <h3>AI Tool Definition Format</h3> + <p>Add tools to <code>module-aiassist.js</code> in <code>getToolDefinitions()</code> (around line 300):</p> + <pre><code>{ + type: 'function', + function: { + name: 'my_tool', + description: 'What it does — AI reads this to decide when to call it.', + parameters: { type: 'object', properties: { + paramName: { type: 'string', description: 'What this param does' } + }, required: ['paramName'] } + } +}</code></pre> + <p>Then add a <code>case 'my_tool':</code> handler in <code>runTool()</code> (around line 1000). Return <code>JSON.stringify(...)</code>.</p> + </section> + + <section id="dev-skills"> + <h3>Skill Format</h3> + <p>Skills are markdown files with YAML frontmatter, stored in <code>/skills/</code> in VFS:</p> + <pre><code>--- +name: my-skill +description: Brief description +tags: [tag1, tag2] +--- +# Skill Body + +Instructions, examples, and workflows here.</code></pre> + </section> + + <section id="dev-ollama"> + <h3>OllamaManager API</h3> + <div class="table-wrap"><table> + <tr><th>Property/Method</th><th>Description</th></tr> + <tr><td><code>.endpoint</code></td><td>Current Ollama API URL</td></tr> + <tr><td><code>.currentModel</code></td><td>Active model name</td></tr> + <tr><td><code>.models</code></td><td>Array of available models</td></tr> + <tr><td><code>.connected</code></td><td>Boolean connection state</td></tr> + <tr><td><code>.connect()</code></td><td>Connect to Ollama, load models</td></tr> + <tr><td><code>.chatWithTools()</code></td><td>AI chat with tool calling support</td></tr> + </table></div> + </section> + + <section id="dev-global"> + <h3>window.webx11 Global</h3> + <p>The terminal instance is exposed globally as <code>window.webx11</code> (aliased as <code>webx11</code>). This gives access to everything:</p> + <pre><code>webx11.fs // VFS instance +webx11.moduleManager // Module registry +webx11.ollamaManager // Ollama connection +webx11.security // Security manager +webx11.executeCommand(cmd) // Run a terminal command programmatically +webx11.print(text, type) // Print to terminal output +webx11.tutorialModule // Tutorial progress (if active) +webx11.inputField // DOM input element</code></pre> + </section> +</div> +<div class="doc-tab" id="content-guide"> + <!-- ── Overview ── --> + <section id="overview"> + <h2>⛅ Overview</h2> + <p>WebX11 v4.5.24 is a browser-based Unix-like terminal — dynamic modules, AI assistant (Ollama), persistent virtual filesystem, web search, voice input, code editor, and a full skill system. Everything runs client-side in your browser.</p> + <div class="feature-grid"> + <div class="feature-card"><h4>🧩 18 Core + 14 Ext</h4><p>Modules loaded at startup. Shell with pipes, redirects, vars, and scripts.</p></div> + <div class="feature-card"><h4>🤖 Agent with Tools</h4><p>28 tools — file ops, web search, skills, modules. Destructive action confirmations with inline bar + countdown.</p></div> + <div class="feature-card"><h4>📚 Skills System</h4><p>Persistent procedural memory. Create, patch, search, export skills for repeatable workflows.</p></div> + <div class="feature-card"><h4>💾 VFS + Sessions</h4><p>Virtual filesystem persists in localStorage. Save/load/export sessions.</p></div> + <div class="feature-card"><h4>🎤 Voice Input</h4><p>Speech recognition in the terminal. Works in Chrome, Edge, Safari.</p></div> + <div class="feature-card"><h4>🌐 Web Search</h4><p>SearXNG + DuckDuckGo fallback + URL fetch/extract. All built-in.</p></div> + <div class="feature-card"><h4>☁️ WebDAV Sync</h4><p>Push, pull, backup VFS to any WebDAV server.</p></div> + <div class="feature-card"><h4>📱 Mobile First</h4><p>Touch-optimized. <code>srcdoc</code> HTML preview works on mobile.</p></div> + <div class="feature-card"><h4>✏️ Text Editor</h4><p>Inline VFS editor — <code>edit <path></code> opens a modal with save/cancel.</p></div> + <div class="feature-card"><h4>🔗 Aliases</h4><p><code>ll</code>, <code>h</code>, <code>cls</code> built-in. Define custom aliases with <code>alias x=y</code>.</p></div> + </div> + </section> + + <!-- ── Quick Start ── --> + <section id="start"> + <h2>🚀 Quick Start</h2> + <ol style="margin-bottom:8px"> + <li><strong>Open</strong> <code>index.html</code> in Chrome/Edge</li> + <li>Watch the splash screen load modules</li> + <li>Type <code>help</code> + Enter</li> + <li>Use the quick-action buttons above the input area</li> + </ol> + + <h3>First Commands</h3> + <pre><span class="cmt"># List VFS files</span> +ls + +<span class="cmt"># List files faster</span> +ll + +<span class="cmt"># Connect to Ollama AI</span> +ollamaconnect + +<span class="cmt"># Chat with AI</span> +ai what's in this directory? + +<span class="cmt"># Create a file</span> +put hello.txt Hello World + +<span class="cmt"># Edit a file</span> +edit hello.txt + +<span class="cmt"># Search the web</span> +search quantum computing + +<span class="cmt"># Find files</span> +find hello + +<span class="cmt"># Compare two files</span> +diff a.txt b.txt</pre> + + <div class="callout callout-info"> + <span class="callout-title">⌨️ Keyboard Shortcuts</span> + <ul style="margin:0"> + <li><strong>Enter</strong> — Execute</li> + <li><strong>Tab</strong> — Cycle autocomplete</li> + <li><strong>↑/↓</strong> — Command history</li> + <li><strong>Esc</strong> — Hide autocomplete / stop AI</li> + <li><strong>|</strong> — Pipe: <code>ls | grep hello</code></li> + </ul> + </div> + </section> + + <!-- ── Commands ── --> + <section id="commands"> + <h2>📖 Full Command Reference</h2> + + <h3>System</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>help</code></td><td>Show all commands</td><td><code>help</code></td></tr> + <tr><td><code>clear</code> / <code>cls</code></td><td>Clear terminal</td><td><code>cls</code></td></tr> + <tr><td><code>echo</code></td><td>Print text</td><td><code>echo Hello</code></td></tr> + <tr><td><code>mem</code></td><td>Show memory usage</td><td><code>mem</code></td></tr> + <tr><td><code>config</code></td><td>View/set terminal config (max-lines, history, pipe-buffer)</td><td><code>config terminal-max-lines 500</code></td></tr> + <tr><td><code>status</code></td><td>System status</td><td><code>status</code></td></tr> + <tr><td><code>font-size</code></td><td>Change font size (8–32)</td><td><code>font-size 16</code></td></tr> + <tr><td><code>load-local</code></td><td>Load module from VFS or URL</td><td><code>load-local modules/ext/calc.js</code></td></tr> + <tr><td><code>startup-modules</code></td><td>Open startup module selector</td><td><code>startup-modules</code></td></tr> + <tr><td><code>preview</code></td><td>Preview HTML in iframe</td><td><code>preview test.html</code></td></tr> + <tr><td><code>reset mem</code></td><td>Clear AI memory (context, patterns, profile)</td><td><code>reset mem --confirm</code></td></tr> + <tr><td><code>reset vfs</code></td><td>Clear virtual filesystem to empty root</td><td><code>reset vfs --confirm</code></td></tr> + <tr><td><code>reset config</code></td><td>Reset all config to defaults</td><td><code>reset config --confirm</code></td></tr> + <tr><td><code>reset all</code></td><td>Wipe everything (nuclear)</td><td><code>reset all --confirm</code></td></tr> + <tr><td><code>logrotate</code></td><td>Rotate current.log to dated archive</td><td><code>logrotate</code></td></tr> + <tr><td><code>health-check</code></td><td>Audit VFS, modules, logs, trash, skills</td><td><code>health-check</code></td></tr> + <tr><td><code>memory-map-export</code></td><td>Generate memory map from /memory/index.json</td><td><code>memory-map-export</code></td></tr> + <tr><td><code>checkpoint</code></td><td>Create VFS snapshot</td><td><code>checkpoint</code></td></tr> + <tr><td><code>checkpoint-list</code></td><td>List VFS checkpoints</td><td><code>checkpoint-list</code></td></tr> + <tr><td><code>rollback</code></td><td>Restore VFS from checkpoint</td><td><code>rollback</code></td></tr> + <tr><td><code>checkpoint-del</code></td><td>Delete a checkpoint</td><td><code>checkpoint-del</code></td></tr> + <tr><td><code>smart-prompt</code></td><td>Toggle context-aware prompt</td><td><code>smart-prompt</code></td></tr> + <tr><td><code>test</code></td><td>Run test suite</td><td><code>test auto</code></td></tr> + </table></div> + + <h3>AI Assistant</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>ai</code> / <code>ask</code></td><td>Chat with AI (tool-calling)</td><td><code>ai create a notes file</code></td></tr> + <tr><td><code>ai-clear</code></td><td>Reset conversation context</td><td><code>ai-clear</code></td></tr> + <tr><td><code>ai-system</code></td><td>View/set system prompt</td><td><code>ai-system</code></td></tr> + <tr><td><code>ai-context</code></td><td>Show conversation memory</td><td><code>ai-context</code></td></tr> + <tr><td><code>ai-allow</code></td><td>Allow pending destructive action</td><td><code>ai-allow</code></td></tr> + <tr><td><code>ai-deny</code></td><td>Deny pending destructive action</td><td><code>ai-deny</code></td></tr> + <tr><td><code>ai-stop</code></td><td>Cancel running AI request</td><td><code>ai-stop</code></td></tr> + <tr><td><code>ai-compress</code></td><td>Manually compress conversation context</td><td><code>ai-compress</code></td></tr> + <tr><td><code>ai-config</code></td><td>View/set AI loop config (max-turns, max-context, max-context-tokens, confirm-timeout(0=disabled), chat-lock-timeout, skill-debounce, trivial-optimization)</td><td><code>ai-config max-turns 12</code></td></tr> + <tr><td><code>debug</code></td><td>Toggle AI debug mode (ext module)</td><td><code>debug</code></td></tr> + <tr><td><code>debug-ai</code></td><td>Toggle AI tool-call debug panel</td><td><code>debug-ai</code></td></tr> + <tr><td><code>debug-ai-last</code></td><td>Show last AI response (content, tool calls, errors)</td><td><code>debug-ai-last</code></td></tr> + <tr><td><code>debug-ai-send</code></td><td>Show what was sent to the AI (messages with roles)</td><td><code>debug-ai-send</code></td></tr> + <tr><td><code>debug-ai-log</code></td><td>Dump full tool call log for current session</td><td><code>debug-ai-log</code></td></tr> + <tr><td><code>archive-list</code></td><td>List archived session snapshots</td><td><code>archive-list</code></td></tr> + <tr><td><code>archive-read</code></td><td>View an archive by filename</td><td><code>archive-read 2026-06-25-14-30.json</code></td></tr> + <tr><td><code>mem-debug</code></td><td>Memory diagnostic (tool call log, heap, localStorage sizes)</td><td><code>mem-debug</code></td></tr> + <tr><td><code>reset-mem</code></td><td>Clear AI internal logs without touching VFS/config</td><td><code>reset-mem</code></td></tr> + </table></div> + + <h3>Debug Supervisor</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>debug-stats</code></td><td>Error summary (total, unique, clusters, top issues)</td><td><code>debug-stats</code></td></tr> + <tr><td><code>debug-history</code></td><td>Show last N errors with hash, type, severity</td><td><code>debug-history 10</code></td></tr> + <tr><td><code>debug-analyze</code></td><td>Deep analysis of a specific error (root cause, fix suggestions)</td><td><code>debug-analyze a1b2c3d4</code></td></tr> + <tr><td><code>debug-trends</code></td><td>Error frequency over time, grouped by day and type</td><td><code>debug-trends 7</code></td></tr> + <tr><td><code>debug-fix</code></td><td>Suggest and optionally auto-apply fix for an error</td><td><code>debug-fix a1b2c3d4</code></td></tr> + <tr><td><code>debug-health</code></td><td>Check DebugSupervisorModule health status</td><td><code>debug-health</code></td></tr> + </table></div> + + + + <h3>Skills</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>skill-list</code></td><td>List all skills</td><td><code>skill-list</code></td></tr> + <tr><td><code>skill-view</code></td><td>View skill content</td><td><code>skill-view web-scraper</code></td></tr> + <tr><td><code>skill-create</code></td><td>Create a skill</td><td><code>skill-create name desc "steps" tags</code></td></tr> + <tr><td><code>skill-patch</code></td><td>Update a skill</td><td><code>skill-patch name "new content"</code></td></tr> + <tr><td><code>skill-delete</code></td><td>Delete a skill</td><td><code>skill-delete oldskill</code></td></tr> + <tr><td><code>skill-export</code></td><td>Export skill to JSON</td><td><code>skill-export myskill</code></td></tr> + <tr><td><code>skill-import</code></td><td>Import skill from JSON</td><td><code>skill-import</code></td></tr> + <tr><td><code>skill-sync</code></td><td>Rebuild skill index</td><td><code>skill-sync</code></td></tr> + <tr><td><code>skill-webdav-sync</code></td><td>Push all skills to WebDAV as JSON</td><td><code>skill-webdav-sync</code></td></tr> + </table></div> + + <h3>Config</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>config</code></td><td>Get a config value</td><td><code>config</code></td></tr> + <tr><td><code>config-set</code></td><td>Set a config value</td><td><code>config-set key value</code></td></tr> + <tr><td><code>config-list</code></td><td>List all config</td><td><code>config-list</code></td></tr> + <tr><td><code>config-delete</code></td><td>Delete a config entry</td><td><code>config-delete key</code></td></tr> + <tr><td><code>config-export</code></td><td>Export config as JSON</td><td><code>config-export</code></td></tr> + <tr><td><code>config-reset</code></td><td>Reset all config</td><td><code>config-reset</code></td></tr> + </table></div> + </section> + + <!-- ── Filesystem ── --> + <section id="filesystem"> + <h2>📁 Filesystem</h2> + <p>All VFS files persist in <code>localStorage</code>. <code>ls</code>, <code>cd</code>, <code>pwd</code> work like a real terminal. Clickable output — tap a file to <code>cat</code>, tap a dir to <code>cd</code>.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>ls</code> / <code>ll</code></td><td>List files</td><td><code>ll</code></td></tr> + <tr><td><code>cd</code></td><td>Change directory</td><td><code>cd notes</code></td></tr> + <tr><td><code>pwd</code></td><td>Print working directory</td><td><code>pwd</code></td></tr> + <tr><td><code>cat</code></td><td>View file</td><td><code>cat readme.txt</code></td></tr> + <tr><td><code>put</code></td><td>Create file with content</td><td><code>put hello.txt Hello World</code></td></tr> + <tr><td><code>edit</code></td><td>Open in modal editor</td><td><code>edit notes.md</code></td></tr> + <tr><td><code>rm</code></td><td>Delete file</td><td><code>rm temp.txt</code></td></tr> + <tr><td><code>mkdir</code></td><td>Create directory</td><td><code>mkdir projects</code></td></tr> + <tr><td><code>rmdir</code></td><td>Remove directory</td><td><code>rmdir empty</code></td></tr> + <tr><td><code>trash</code></td><td>Move file to trash</td><td><code>trash temp.txt</code></td></tr> + <tr><td><code>trash-dir</code></td><td>Move directory to trash</td><td><code>trash-dir olddir</code></td></tr> + <tr><td><code>ls-trash</code></td><td>List items in trash</td><td><code>ls-trash</code></td></tr> + <tr><td><code>empty-trash</code></td><td>Permanently delete all trash items</td><td><code>empty-trash</code></td></tr> + <tr><td><code>mv</code></td><td>Move/rename</td><td><code>mv old.txt new.txt</code></td></tr> + <tr><td><code>cp</code></td><td>Copy file</td><td><code>cp a.txt b.txt</code></td></tr> + <tr><td><code>touch</code></td><td>Create empty file</td><td><code>touch newfile.txt</code></td></tr> + <tr><td><code>tree</code></td><td>Directory tree</td><td><code>tree</code></td></tr> + <tr><td><code>find</code></td><td>Recursive file search</td><td><code>find .txt</code></td></tr> + <tr><td><code>diff</code></td><td>Compare two files</td><td><code>diff a.txt b.txt</code></td></tr> + <tr><td><code>grep</code></td><td>Search file contents</td><td><code>grep hello *.txt</code></td></tr> + <tr><td><code>head</code></td><td>First N lines</td><td><code>head file.txt 10</code></td></tr> + <tr><td><code>tail</code></td><td>Last N lines</td><td><code>tail file.txt 10</code></td></tr> + <tr><td><code>sort</code></td><td>Sort file lines</td><td><code>sort file.txt</code></td></tr> + <tr><td><code>wc</code></td><td>Count lines/words/chars</td><td><code>wc file.txt</code></td></tr> + <tr><td><code>du</code></td><td>Disk usage</td><td><code>du</code></td></tr> + <tr><td><code>upload</code></td><td>Upload file from device</td><td><code>upload</code></td></tr> + <tr><td><code>download</code></td><td>Download file</td><td><code>download file.txt</code></td></tr> + <tr><td><code>vfs-size</code></td><td>Show VFS size report (top files, system dirs)</td><td><code>vfs-size</code></td></tr> + <tr><td><code>vfs-clean</code></td><td>Nuke snapshots, sessions, and trash</td><td><code>vfs-clean</code></td></tr> + <tr><td><code>vfs-export</code></td><td>Download VFS as JSON</td><td><code>vfs-export</code></td></tr> + <tr><td><code>vfs-import</code></td><td>Import VFS from JSON</td><td><code>vfs-import</code></td></tr> + <tr><td><code>session-save</code></td><td>Save a session snapshot</td><td><code>session-save</code></td></tr> + <tr><td><code>session-load</code></td><td>Load a session snapshot</td><td><code>session-load mysession</code></td></tr> + <tr><td><code>session-list</code></td><td>List all saved sessions</td><td><code>session-list</code></td></tr> + <tr><td><code>session-delete</code></td><td>Delete a session</td><td><code>session-delete old</code></td></tr> + <tr><td><code>session-export</code></td><td>Export session as JSON download</td><td><code>session-export mysession</code></td></tr> + <tr><td><code>session-import</code></td><td>Import a session from file</td><td><code>session-import</code></td></tr> + <tr><td><code>sed -n 'N,Mp' | s/a/b/ | /pat/d | -i</code></td><td>Print or edit VFS file lines</td></tr> + <tr><td><code>files</code></td><td>Open the Files panel</td></tr> +</table></div> + </section> + + <!-- ── AI Agent ── --> + <section id="ai"> + <h2>🤖 AI Assistant</h2> + <div class="callout callout-success"> + <span class="callout-title">Tool-Calling Agent</span> + The AI runs a full agent loop with 28 tools: filesystem, web search, URL fetch, skills, WPM, session memory, user profile, module introspection. + </div> + + <h3>How It Works</h3> + <ol> + <li>Type <code>ai <request></code></li> + <li>AI loads relevant skills + recent session memory</li> + <li>Decides which tools to call (up to 8 turns)</li> + <li><strong>Destructive tools</strong> trigger an inline confirm bar — no dark overlay</li> + <li>120s countdown: yellow → bold red at 30s → pulsing at 10s</li> + <li>Type <code>ai-allow</code> / <code>ai-deny</code> or tap the buttons</li> + <li>After complex tasks, AI suggests creating a skill</li> + </ol> + + <div class="callout callout-warning"> + <span class="callout-title">⚠️ Destructive Tools</span> + <code>write_file</code>, <code>delete_file</code>, <code>make_directory</code>, <code>edit_module</code> require confirmation before executing. <code>run_command</code> only requires confirmation for destructive commands (rm, kill, format) — safe-read commands like <code>ls</code>, <code>find</code>, <code>tree</code> are auto-approved. + </div> + + <h3>Available Tools</h3> + <div class="table-wrap"><table> + <tr><th>Tool</th><th>Description</th><th>Destructive?</th></tr> + <tr><td><code>list_files</code></td><td>List VFS directory</td><td>❌</td></tr> + <tr><td><code>read_file</code></td><td>Read file (8k trunc)</td><td>❌</td></tr> + <tr><td><code>write_file</code></td><td>Write to file</td><td>✅</td></tr> + <tr><td><code>make_directory</code></td><td>Create directory</td><td>✅</td></tr> + <tr><td><code>delete_file</code></td><td>Delete file/dir</td><td>✅</td></tr> + <tr><td><code>get_status</code></td><td>System status</td><td>❌</td></tr> + <tr><td><code>get_help</code></td><td>List commands</td><td>❌</td></tr> + <tr><td><code>web_search</code></td><td>SearXNG + DDG</td><td>❌</td></tr> + <tr><td><code>web_fetch</code></td><td>Extract URL content</td><td>❌</td></tr> + <tr><td><code>run_command</code></td><td>Execute terminal cmd (safe-read auto-approved)</td><td>❌ (only destructive cmds)</td></tr> + <tr><td><code>load_skills</code></td><td>Search relevant skills</td><td>❌</td></tr> + <tr><td><code>create/patch/list_skills</code></td><td>Skill management</td><td>❌</td></tr> + <tr><td><code>view/edit/test/reload</code></td><td>Module operations</td><td>edit ✅</td></tr> + <tr><td><code>user_get/set/list/forget</code></td><td>User profile</td><td>❌</td></tr> + <tr><td><code>session_save/load/recent/stats</code></td><td>Session memory</td><td>❌</td></tr> + <tr><td><code>vaultmind_connect</code></td><td>Connect wallet to VaultMind AI (reads key from SecretVault)</td><td>❌</td></tr> + <tr><td><code>vaultmind_status</code></td><td>Check VaultMind session status</td><td>❌</td></tr> + <tr><td><code>vaultmind_query</code></td><td>Query VaultMind: prices, portfolio, chat</td><td>❌</td></tr> + <tr><td><code>webx <question></code></td><td>Ask the assistant (short alias of <code>webxai</code>)</td></tr> + <tr><td><code>webxai <question></code></td><td>Ask the assistant a one-off question</td></tr> + <tr><td><code>wx <question></code></td><td>Alias of <code>webxai</code></td></tr> + <tr><td><code>ai-model [name]</code></td><td>Show or set the active model</td></tr> + <tr><td><code>ai-ignore <path></code></td><td>Exclude a path from AI context</td></tr> + <tr><td><code>commit-status</code></td><td>Show the pending AI file-commit batch</td></tr> + <tr><td><code>commit-approve</code></td><td>Apply the pending AI file commits</td></tr> + <tr><td><code>commit-deny</code></td><td>Discard the pending AI file commits</td></tr> + <tr><td><code>context</code></td><td>Show the active AI context profile</td></tr> + <tr><td><code>contexts</code></td><td>List context profiles</td></tr> + <tr><td><code>context-new <name> <display> <systemPrompt></code></td><td>Create a context profile</td></tr> + <tr><td><code>context-delete <name></code></td><td>Delete a context profile</td></tr> + <tr><td><code>context-auto on|off</code></td><td>Auto-switch contexts</td></tr> + <tr><td><code>smart-ask <question></code></td><td>Ask with automatic context selection</td></tr> +</table></div> + + <h3>Sound Notification</h3> + <p>A short <strong>"ding"</strong> plays via WebAudio when AI finishes. Toggle with the <strong>🔊 Sound</strong> button in quick-actions. Persists in localStorage.</p> + </section> + + <!-- ── Agent Loop Studio ── --> + <section id="agent-loops"> + <h2>🔄 Agent Loop Studio</h2> + <div class="callout callout-success"> + <span class="callout-title">Pluggable Agent Loops</span> + Switch between profiles that control max turns, tool sets, temperature, system prompt directives, and loop behavior — without restarting. + </div> + + <h3>Commands</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>agent-loops</code></td><td>List all profiles with turns, tools, and benchmark results</td></tr> + <tr><td><code>agent-loops <name></code></td><td>Switch to a named profile</td></tr> + <tr><td><code>agent-loops new <name> <desc></code></td><td>Create a new profile from defaults</td></tr> + <tr><td><code>agent-loops edit <name> <key> <val></code></td><td>Edit a profile setting (dot-notation, e.g. <code>loop.maxTurns 12</code>)</td></tr> + <tr><td><code>agent-loops delete <name></code></td><td>Delete a profile (not default)</td></tr> + <tr><td><code>agent-loops clone <src> <dst></code></td><td>Clone a profile</td></tr> + <tr><td><code>agent-loops export <name></code></td><td>Export profile as JSON</td></tr> + <tr><td><code>agent-loops reset <name></code></td><td>Reset profile to defaults</td></tr> + <tr><td><code>bench <profile> [--tasks=ids]</code></td><td>Run benchmark suite on a profile (6 tasks: fs-navigate, fs-create-read, nvfs-resolve, web-search, multi-tool, code-edit)</td></tr> + <tr><td><code>bench-compare <p1> <p2></code></td><td>Compare benchmark results of two profiles</td></tr> + </table></div> + + <h3>Default Profiles</h3> + <div class="table-wrap"><table> + <tr><th>Profile</th><th>Turns</th><th>Tools</th><th>Temp</th><th>Use Case</th></tr> + <tr><td><code>default</code></td><td>8</td><td>all</td><td>inherit</td><td>Balanced general-purpose</td></tr> + <tr><td><code>minimal</code></td><td>4</td><td>4 (custom)</td><td>0.3</td><td>Fast, low-token simple tasks</td></tr> + <tr><td><code>research</code></td><td>6</td><td>7 (custom)</td><td>0.5</td><td>Read-only web + file exploration</td></tr> + <tr><td><code>safe</code></td><td>8</td><td>all (destructive disabled)</td><td>0.5</td><td>No destructive tools</td></tr> + <tr><td><code>creative</code></td><td>12</td><td>all</td><td>0.9</td><td>More turns, higher creativity</td></tr> + <tr><td><code>coder</code></td><td>10</td><td>all</td><td>0.2</td><td>Code-focused with append directive</td></tr> + </table></div> + + <h3>System Prompt Layering</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Effect</th></tr> + <tr><td><code>ai-system +"directive"</code></td><td>Prepend a directive to the active profile's system prompt (persists to profile)</td></tr> + <tr><td><code>ai-system -"directive"</code></td><td>Append a directive to the active profile's system prompt (persists to profile)</td></tr> + <tr><td><code>ai-system "text"</code></td><td>Full replace (persists to localStorage, overrides profile)</td></tr> + <tr><td><code>ai-system reset</code></td><td>Restore default system prompt</td></tr> + </table></div> + + <h3>Self-Improvement</h3> + <p>After each AI run, <code>_postRunReview()</code> detects anomalies: near-max-turns, high token usage, tool failures, and above-benchmark consumption. Lessons are auto-saved as VFS skills under <code>/skills/loop-lesson-*</code>.</p> + + <h3>AI Tools</h3> + <p>The AI can also manage profiles via tools: <code>agent_loop_list</code>, <code>agent_loop_switch</code>, <code>agent_loop_create</code>, <code>agent_loop_benchmark</code>.</p> + </section> + + <!-- ── Skills ── --> + <section id="skills"> + <h2>📚 Skills System</h2> + <div class="callout callout-success"> + <span class="callout-title">Dynamic Browser</span> + Skills are now in a <strong><a href="skills.html" target="_blank">dedicated dynamic page →</a></strong>. Search, filter by category, browse all 17 skills with descriptions and tags — no more hardcoded lists. + </div> + <div class="feature-grid" style="margin-top:14px"> + <div class="feature-card"><h4>📄 <a href="skills.html">skills.html</a></h4><p>Dynamic skill browser — searchable, filterable card grid with tag badges, category pills, and update dates. Zero hardcoded data.</p></div> + <div class="feature-card"><h4>📘 <a href="guide.html">guide.html</a></h4><p>Quick user guide with anchor-navigable sections, module refs, and command examples.</p></div> + </div> + <h3>Terminal Commands</h3> + <pre><span class="cmt"># List all skills</span> +skill-list + +<span class="cmt"># Create a skill</span> +skill-create my-skill "Does X" "Steps to do X" "tag1,tag2" + +<span class="cmt"># View / patch / delete</span> +skill-view my-skill +skill-patch my-skill "Updated steps" +skill-delete my-skill + +<span class="cmt"># Export / Import</span> +skill-export my-skill +skill-import</pre> + + <h3>Auto-Creation</h3> + <p>When the AI encounters the same tool error 3+ times, a workaround skill is auto-created. Every 20 messages, skills are audited for staleness.</p> + <table> + <thead><tr><th>Command</th><th>Description</th></tr></thead> + <tbody> + <tr><td><code>learn-skill <topic></code></td><td>Learn a new skill from a topic</td></tr> + <tr><td><code>skill-validate <name></code></td><td>Validate a skill file</td></tr> + <tr><td><code>skill-audit</code></td><td>Audit all installed skills</td></tr> + <tr><td><code>skill-restore <name></code></td><td>Restore a skill from its backup</td></tr> + <tr><td><code>skill-pack-core</code></td><td>Install / verify the core skill pack</td></tr> + </tbody> + </table> + +</section> + + <!-- ── Ollama ── --> + <section id="ollama"> + <h2>🤖 Ollama</h2> + <div class="callout callout-ollama"> + <span class="callout-title">Local or Remote AI</span> + WebX11 connects to any Ollama instance. All tool-calling and chat features require a connection. + </div> + + <h3>Setup</h3> + <pre><span class="cmt"># Install & pull a model</span> +curl -fsSL https://ollama.com/install.sh | sh +ollama pull llama2 + +<span class="cmt"># Start Ollama</span> +ollama serve + +<span class="cmt"># In WebX11</span> +ollamaconnect</pre> + + <h3>Commands</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>ollamaconnect</code></td><td>Connect to Ollama</td></tr> + <tr><td><code>ollamasetproxy</code></td><td>Set remote endpoint</td></tr> + <tr><td><code>ollamamodels</code></td><td>List models</td></tr> + <tr><td><code>ollamasetmodel</code></td><td>Set active model</td></tr> + <tr><td><code>ollamadisconnect</code></td><td>Disconnect</td></tr> + <tr><td><code>ollama</code></td><td>Open Ollama Manager UI</td></tr> + <tr><td><code>models</code></td><td>List all models</td></tr> + <tr><td><code>model-info</code></td><td>Model details</td></tr> + <tr><td><code>model-pull</code></td><td>Pull a model</td></tr> + <tr><td><code>model-delete</code></td><td>Delete a model</td></tr> + <tr><td><code>model-run</code></td><td>Run model with prompt</td></tr> + </table></div> + + <div class="callout callout-warning"> + <span class="callout-title">🔌 CORS for Remote</span> + <code>OLLAMA_ORIGINS="*" ollama serve</code> + </div> + </section> + + <!-- ── Search & Web ── --> + <section id="web"> + <h2>🌐 Search & Web</h2> + <div class="callout callout-info"> + <span class="callout-title">SearXNG + DDG + URL Fetcher</span> + Three modules provide comprehensive web capabilities via the proxy API. + </div> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Module</th><th>Description</th><th>Example</th></tr> + <tr><td><code>search</code> / <code>s</code></td><td>SearXNG</td><td>Web search</td><td><code>search raspberry pi</code></td></tr> + + <tr><td><code>fetch</code> / <code>web</code></td><td>Fetcher</td><td>Fetch URL content</td><td><code>fetch https://example.com</code></td></tr> + <tr><td><code>extract</code></td><td>Fetcher</td><td>Clean readable text</td><td><code>extract https://news.article</code></td></tr> + <tr><td><code>images</code></td><td>SearXNG</td><td>Image search</td><td><code>images cats</code></td></tr> + <tr><td><code>videos <query></code></td><td>Video search via SearXNG</td></tr> +</table></div> + <p>The AI agent also has <code>web_search</code> and <code>web_fetch</code> tools using the same APIs.</p> + </section> + + <!-- ── Voice & Sound ── --> + <section id="voice"> + <h2>🎤 Voice & Sound</h2> + <div class="callout callout-success"> + <span class="callout-title">Speech Recognition</span> + A <strong>🎤 button</strong> in the input area activates SpeechRecognition. Chrome, Edge, Safari 14.1+. Not Firefox. + </div> + <ul> + <li>Tap 🎤 to start listening — button pulses green</li> + <li>Say your command — recognized text fills the input</li> + <li>Tap again or wait to stop</li> + <li>Red flash indicates failure</li> + </ul> + <h3>Sound</h3> + <p>Toggle AI response "ding" with the <strong>🔊 Sound</strong> button. Persists in localStorage.</p> + <table> + <thead><tr><th>Command</th><th>Description</th></tr></thead> + <tbody> + <tr><td><code>speak <text></code></td><td>Speak text aloud (TTS)</td></tr> + <tr><td><code>voice</code></td><td>Voice settings and microphone test</td></tr> + <tr><td><code>analyze <file> [--frames N] [--spectrogram] [--beats] [--scene]</code></td><td>Analyze an audio or video file</td></tr> + </tbody> + </table> + +</section> + + <!-- ── Config ── --> + <section id="config"> + <h2>⚙️ Configuration</h2> + <p>All config values stored as <code>webx11_config_*</code> in localStorage. Use the ⚙ Config button or CLI commands.</p> + <h3>Notable Keys</h3> + <div class="table-wrap"><table> + <tr><th>Key</th><th>Description</th><th>Values</th></tr> + <tr><td><code>webx11_config_ai_sound</code></td><td>AI sound toggle</td><td><code>on</code>, <code>off</code></td></tr> + <tr><td><code>webx11_config_voice_visible</code></td><td>Mic button visibility</td><td><code>on</code>, <code>off</code></td></tr> + </table></div> + <h3>Persisted State</h3> + <div class="table-wrap"><table> + <tr><th>Key</th><th>Description</th></tr> + <tr><td><code>webx11_filesystem</code></td><td>VFS JSON</td></tr> + <tr><td><code>webx11_modules</code></td><td>Loaded module URLs</td></tr> + <tr><td><code>webx11_ollama_endpoint</code></td><td>Ollama API URL</td></tr> + <tr><td><code>webx11_ollama_model</code></td><td>Selected model</td></tr> + <tr><td><code>webx11_startup_modules</code></td><td>Startup selection</td></tr> + <tr><td><code>webx11_font_size</code></td><td>Font size (8–32)</td></tr> + <tr><td><code>webx11_command_history</code></td><td>Command history</td></tr> + <tr><td><code>webx11_terminal_output</code></td><td>Persisted output</td></tr> + <tr><td><code>webx11_ai_context</code></td><td>AI conversation history</td></tr> + <tr><td><code>webx11_user_profile</code></td><td>AI user profile</td></tr> + <tr><td><code>webx11_aliases</code></td><td>User-defined aliases</td></tr> + <tr><td><code>bug</code></td><td>Generate a bug report from the current session</td></tr> + <tr><td><code>factory-reset-old --confirm</code></td><td>Legacy full reset (prefer <code>factory-reset</code>)</td></tr> + <tr><td><code>setfont <px></code></td><td>Set terminal font size (alias of <code>font-size</code>)</td></tr> +</table></div> + </section> + + <!-- ── Secret Vault ── --> + <section id="vault"> + <h2>🔒 Secret Vault</h2> + <div class="callout callout-success"> + <span class="callout-title">Encrypted Secrets Manager</span> + AES-256-GCM encrypted key-value storage in localStorage. Lock/unlock with a PIN — secrets are never stored in plain text. Vault status persists across sessions. + </div> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>secret-set</code></td><td>Encrypt and store a secret</td></tr> + <tr><td><code>secret-get</code></td><td>Decrypt and display a secret value</td></tr> + <tr><td><code>secret-list</code></td><td>List all stored secret names</td></tr> + <tr><td><code>secret-del</code></td><td>Remove a stored secret</td></tr> + <tr><td><code>secret-lock</code></td><td>Lock the vault (clears key from memory)</td></tr> + <tr><td><code>secret-unlock</code></td><td>Unlock the vault with PIN</td></tr> + <tr><td><code>secret-setpin</code></td><td>Set or change vault PIN</td></tr> + <tr><td><code>secret-status</code></td><td>Show vault status (locked/unlocked/pin set)</td></tr> + <tr><td><code>encrypt <path> <passphrase></code></td><td>AES-256-GCM encrypt a VFS file</td></tr> + <tr><td><code>decrypt <path.enc> <passphrase></code></td><td>Decrypt a .enc file</td></tr> +</table></div> + </section> + + <!-- ── VaultMind AI ── --> + <section id="vaultmind"> + <h2>🧠 VaultMind AI</h2> + <div class="callout callout-success"> + <span class="callout-title">Hyperliquid AI Assistant</span> + VaultMind is an AI-powered wallet assistant for Hyperliquid. It provides market data, portfolio analysis, transaction analysis, and AI chat agents. + </div> + + <h3>Setup</h3> + <ol> + <li>Store your Hyperliquid private key: <code>secret-set hyperliquid_key 0x...</code></li> + <li>Ask the AI to connect: <code>ai connect to vaultmind</code> or use the <code>vaultmind_connect</code> tool</li> + <li>Check status: <code>ai check vaultmind status</code> or <code>vaultmind_status</code></li> + </ol> + + <h3>AI Tools</h3> + <div class="table-wrap"><table> + <tr><th>Tool</th><th>Description</th></tr> + <tr><td><code>vaultmind_connect</code></td><td>Reads <code>hyperliquid_key</code> from SecretVault, authenticates with VaultMind backend, stores session token</td></tr> + <tr><td><code>vaultmind_status</code></td><td>Checks if a valid VaultMind session token exists in localStorage</td></tr> + <tr><td><code>vaultmind_query</code></td><td>Query endpoints: <code>prices</code>, <code>portfolio</code>, <code>transactions</code>, <code>copy-trade</code>, or <code>chat</code> with an AI agent</td></tr> + </table></div> + + <h3>API Endpoints (proxied via nginx)</h3> + <div class="table-wrap"><table> + <tr><th>Path</th><th>Backend</th></tr> + <tr><td><code>/vmai/</code></td><td>Proxied to VaultMind backend at <code>127.0.0.1:8000</code></td></tr> + <tr><td><code>/vmai-api/</code></td><td>Alias for frontend chat — also proxied to <code>127.0.0.1:8000</code></td></tr> + <tr><td><code>vaultmind-connect</code></td><td>Connect VaultMind to the trading API</td></tr> + <tr><td><code>vaultmind-status</code></td><td>VaultMind connection and balance status</td></tr> + <tr><td><code>vaultmind-query <prices|portfolio|transactions|copy-trade|chat></code></td><td>Query VaultMind</td></tr> + <tr><td><code>wallet-lookup <address></code></td><td>Look up a wallet address</td></tr> +</table></div> + </section> + + <!-- ── Modules ── --> + <section id="modules"> + <h2>🧩 Module System</h2> + <div class="callout callout-info"> + <span class="callout-title">25 Core + 17 Ext</span> + Modules loaded in dependency order at startup. Toggle ext modules with ⚙ gear on splash. + </div> + <h3>Commands</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>modules</code></td><td>Open Module Manager UI</td></tr> + <tr><td><code>loadmod <url></code></td><td>Load module from URL</td></tr> + <tr><td><code>removemod <name></code></td><td>Remove a module</td></tr> + <tr><td><code>listmods</code></td><td>List all loaded modules</td></tr> + <tr><td><code>load-local</code></td><td>Load module from VFS or URL</td></tr> + <tr><td><code>loadlocal</code></td><td>Alias for load-local</td></tr> + <tr><td><code>js <expr></code></td><td>Evaluate JavaScript in page context</td></tr> + <tr><td><code>js-run <path></code></td><td>Load and execute a JS file from VFS</td></tr> + <tr><td><code>startup-modules</code></td><td>Configure boot modules</td></tr> + <tr><td><code>module-load <name></code></td><td>Load a module by name</td></tr> + <tr><td><code>module-unload <name></code></td><td>Unload a module</td></tr> + <tr><td><code>module-enable <name></code></td><td>Enable a module for startup</td></tr> + <tr><td><code>module-reset <name></code></td><td>Reset a module to its shipped source</td></tr> +</table></div> + + <h3>Boot Order</h3> + <ol> + <li>Splash screen with ⚙ gear</li> + <li>Foundation: <code>virtual-fs.js</code> → <code>module-manager.js</code> → <code>ollama-manager.js</code> → <code>terminal.js</code></li> + <li>Built-in modules loaded async</li> + <li>Ext modules loaded if selected</li> + <li>Splash hides, terminal ready</li> + </ol> + + <h3>Code Editor</h3> + <p>The AI can <code>edit_module(name)</code> to copy source into the Code Editor modal. Edit inline, then <strong>💾 Save & Test</strong> to load live from <code>/_mods/</code>. Use <code>test_module</code> without reloading the page.</p> + <p>You can also type <code>edit modules/ext/foo.js</code> — the editor now mirrors saves to <code>_mods/<name>.js</code> so <code>test_module</code> works from either path.</p> + </section> + + <!-- ── Extras ── --> + <section id="extras"> + <h2>🧰 Extended Modules</h2> + + <h3>WebDAV Sync</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>webdav-config</code></td><td>Configure server</td></tr> + <tr><td><code>webdav-status</code></td><td>Connection status</td></tr> + <tr><td><code>webdav-ls</code></td><td>List remote dir</td></tr> + <tr><td><code>webdav-push</code></td><td>Push file</td></tr> + <tr><td><code>webdav-pull</code></td><td>Pull file</td></tr> + <tr><td><code>webdav-backup</code></td><td>Backup VFS</td></tr> + <tr><td><code>webdav-restore</code></td><td>Restore VFS</td></tr> + <tr><td><code>webdav-backup-list</code></td><td>List backups</td></tr> + <tr><td><code>webdav-browser</code></td><td>Visual file explorer modal</td></tr> + </table></div> + + <h3>Calculator & Cron</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Module</th><th>Description</th></tr> + <tr><td><code>calc</code></td><td>calc.js</td><td>Evaluate math / unit conversion</td></tr> + <tr><td><code>cron-every</code></td><td>cron.js</td><td>Schedule a command</td></tr> + <tr><td><code>cron-list</code></td><td>cron.js</td><td>List scheduled jobs</td></tr> + <tr><td><code>cron-stop</code></td><td>cron.js</td><td>Stop a job</td></tr> + <tr><td><code>cron-clear</code></td><td>cron.js</td><td>Clear all jobs</td></tr> + </table></div> + + <h3>Theme, WPM & Mindmap</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Module</th><th>Description</th></tr> + <tr><td><code>theme</code></td><td>theme.js</td><td>Set color theme (dark, light, amber, cyber, …)</td></tr> + <tr><td><code>wpm</code></td><td>wpm.js</td><td>Package manager</td></tr> + <tr><td><code>mindmap</code></td><td>mindmap.js</td><td>Show file structure as mindmap</td></tr> + </table></div> + + <h3>Server Monitor</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>server</code></td><td>Add server to monitor</td></tr> + <tr><td><code>servers</code></td><td>List monitored servers</td></tr> + <tr><td><code>server-check</code></td><td>Ping a server</td></tr> + <tr><td><code>server-remove</code></td><td>Remove server</td></tr> + <tr><td><code>monitor</code></td><td>Toggle auto-monitoring</td></tr> + <tr><td><code>course open <lessonId> | course list</code></td><td>Course browser</td></tr> + <tr><td><code>kanban add <task> | list | done <id></code></td><td>Task board</td></tr> + <tr><td><code>three add text <text> | reset | screenshot</code></td><td>3D scene commands</td></tr> + <tr><td><code>gui-run <command></code></td><td>Run a command and render its output in the GUI panel</td></tr> + <tr><td><code>gui-text <content></code></td><td>Render text in the GUI panel</td></tr> + <tr><td><code>gui-clear</code></td><td>Clear the GUI panel</td></tr> + <tr><td><code>gzip <path></code></td><td>Compress a VFS file to .gz</td></tr> + <tr><td><code>wget <url> [filename]</code></td><td>Download a URL and save it to the VFS</td></tr> +</table></div> + + + + <h3>Aliases</h3> + <p>Built-in: <code>ll</code> = <code>ls</code>, <code>h</code> = <code>help</code>, <code>cls</code> = <code>clear</code>. Define custom: <code>alias x=ls -la</code>. Remove: <code>unalias x</code>. Persists in localStorage.</p> + </section> + + <!-- ── BusyBox ── --> + <section id="busybox"> + <h2>🔧 BusyBox Utilities</h2> + <div class="callout callout-success"> + <span class="callout-title">16 Unix Utility Commands</span> + Lightweight utility commands for everyday terminal work — identity, path, text, and system info tools. All work standalone and with shell pipes. + </div> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>which</code></td><td>Locate command in module registry + fuzzy suggestions</td><td><code>which ls</code></td></tr> + <tr><td><code>env</code></td><td>List local env vars (webx11_, ollama, user profile)</td><td><code>env</code></td></tr> + <tr><td><code>date</code></td><td>Current time (local, ISO, UTC, Unix timestamp)</td><td><code>date</code></td></tr> + <tr><td><code>cal</code></td><td>ASCII calendar for any month/year</td><td><code>cal 12 2026</code></td></tr> + <tr><td><code>yes</code></td><td>Output repeated string (capped at 50)</td><td><code>yes test</code></td></tr> + <tr><td><code>seq</code></td><td>Generate number sequence</td><td><code>seq 1 5</code></td></tr> + <tr><td><code>base64</code></td><td>Base64 encode/decode</td><td><code>base64 -d aGVsbG8=</code></td></tr> + <tr><td><code>printf</code></td><td>Formatted print (%s, %d, %f)</td><td><code>printf "hello %s" world</code></td></tr> + <tr><td><code>cut</code></td><td>Extract column from file</td><td><code>cut -f2 -d, data.csv</code></td></tr> + <tr><td><code>uniq</code></td><td>Filter adjacent duplicates</td><td><code>uniq lines.txt</code></td></tr> + <tr><td><code>hostname</code></td><td>Show host/platform info</td><td><code>hostname</code></td></tr> + <tr><td><code>whoami</code></td><td>Show current user</td><td><code>whoami</code></td></tr> + <tr><td><code>basename</code></td><td>Strip directory from path</td><td><code>basename /a/b/c.txt</code></td></tr> + <tr><td><code>dirname</code></td><td>Strip filename from path</td><td><code>dirname /a/b/c.txt</code></td></tr> + <tr><td><code>sleep</code></td><td>Countdown delay (1-30s)</td><td><code>sleep 3</code></td></tr> + <tr><td><code>expand</code></td><td>Convert tabs to spaces</td><td><code>expand code.txt</code></td></tr> + </table></div> + <p>All file-reading commands (<code>cut</code>, <code>uniq</code>, <code>expand</code>) work with shell pipes: <code>cat data.csv | cut -f2 -d, | uniq</code>.</p> + </section> + + <!-- ── Floating ── --> + <section id="floating"> + <h2>🪟 Floating UI Elements</h2> + <div class="callout callout-success"> + <span class="callout-title">Buttons, Menus & Panels</span> + Create persistent floating UI elements that survive page reload — buttons that run commands, collapsible menus with sub-buttons, and informational panels. + </div> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th><th>Example</th></tr> + <tr><td><code>floating-add</code></td><td>Add a floating element (btn, menu, or panel)</td><td><code>floating-add btn quick-status ls -la</code></td></tr> + <tr><td><code>floating-remove</code></td><td>Remove a floating element</td><td><code>floating-remove quick-status</code></td></tr> + <tr><td><code>floating-list</code></td><td>List all floating elements</td><td><code>floating-list</code></td></tr> + <tr><td><code>floating-pos</code></td><td>Reposition an element (x y in px, or auto)</td><td><code>floating-pos menu1 100 200</code></td></tr> + <tr><td><code>floating-clear</code></td><td>Remove all floating elements</td><td><code>floating-clear</code></td></tr> + <tr><td><code>floating-toggle</code></td><td>Show/hide a floating element</td><td><code>floating-toggle menu1</code></td></tr> + </table></div> + <h3>Usage Examples</h3> + <pre><span class="cmt"># Simple button — click to run a command</span> +floating-add btn quick ls -la + +<span class="cmt"># Menu with sub-buttons (btn:Label:command)</span> +floating-add menu tools Tools btn:Status:status btn:Help:help btn:Check:health-check + +<span class="cmt"># Panel with info text</span> +floating-add panel info "Server: production | Uptime: 12d" + +<span class="cmt"># You can drag buttons and menu headers to reposition them</span> +<span class="cmt"># Position persists across page reloads</span></pre> + </section> + + <!-- ── Runtime Debug /sys/ ── --> + <section id="runtime-debug"> + <h2>🔍 Runtime Debug — /sys/</h2> + <div class="callout callout-success"> + <span class="callout-title">Virtual /sys/ filesystem</span> + Live runtime state mounted as browsable VFS files. Cat, grep, tree, find all work — no special commands needed. Never persisted to localStorage. + </div> + <h3>Path Reference</h3> + <pre><span class="cmt"># Overview</span> +cat /sys/info + +<span class="cmt"># Memory</span> +cat /sys/heap/stats +cat /sys/heap/breakdown + +<span class="cmt"># AI Internal Logs</span> +cat /sys/logs/tool-calls +cat /sys/logs/errors +cat /sys/logs/commands + +<span class="cmt"># VFS Stats</span> +cat /sys/vfs/stats +cat /sys/vfs/largest + +<span class="cmt"># Module Info</span> +ls /sys/modules/ +cat /sys/modules/calc/info + +<span class="cmt"># DOM / Config</span> +cat /sys/dom/node-count +cat /sys/config/ai +cat /sys/config/version</pre> + <p>Also available: <code>mem-debug</code> (one-shot text output), <code>reset-mem</code> (clear AI internal logs without touching VFS or config), and the <strong>DebugSupervisorModule</strong> (<code>debug-stats</code>, <code>debug-history</code>, <code>debug-analyze</code>, <code>debug-trends</code>, <code>debug-fix</code>, <code>debug-health</code>) for persistent error tracking and root-cause analysis.</p> + </section> + + <!-- ── Shell ── --> + <section id="shell"> + <h2>🐚 Shell</h2> + <div class="callout callout-success"> + <span class="callout-title">Pipes · Redirects · Variables · Scripts</span> + The shell module sits on top of every command — pipes, redirections, variable substitution, command chaining, and VFS script execution work automatically without any prefix. + </div> + + <h3>Pipes <code>|</code></h3> + <p>Chain commands by piping stdout to the next command's stdin. Pipe-aware commands (<code>grep</code>, <code>head</code>, <code>tail</code>, <code>sort</code>, <code>wc</code>, <code>cut</code>, <code>uniq</code>, <code>expand</code>) auto-read from pipe when no file argument is given.</p> + <pre><span class="cmt"># Filter file listing</span> +ls | grep .md + +<span class="cmt"># Count lines matching pattern</span> +cat notes.txt | grep error | wc + +<span class="cmt"># Pipeline: filter → sort → head</span> +cat data.csv | grep 2026 | sort | head -5</pre> + + <h3>Redirects <code>></code> <code>>></code> <code><</code></h3> + <pre><span class="cmt"># Write output to file</span> +cal > /tmp/calendar.txt + +<span class="cmt"># Append to file</span> +echo "new line" >> log.txt + +<span class="cmt"># Read file as stdin</span> +grep error < log.txt</pre> + + <h3>Command Chaining</h3> + <pre><span class="cmt"># AND: next runs only if previous succeeds</span> +touch test.txt && echo "created" + +<span class="cmt"># OR: next runs only if previous fails</span> +rm nonexistent || echo "failed" + +<span class="cmt"># Sequence: runs in order regardless</span> +cd /skills; ls</pre> + + <h3>Variables</h3> + <pre><span class="cmt"># Set a variable</span> +export GREET=hello + +<span class="cmt"># Reference in any command</span> +echo $GREET + +<span class="cmt"># List all vars</span> +set + +<span class="cmt"># Remove a var</span> +unset GREET</pre> + + <h3>Scripts</h3> + <p>VFS files with <code>.sh</code> extension can be executed line by line. Variables persist across lines.</p> + <pre><span class="cmt"># Create a script in VFS</span> +echo 'export NAME=WebX11' > greet.sh +echo 'echo "Hello, $NAME!"' >> greet.sh + +<span class="cmt"># Run it</span> +script greet.sh +sh greet.sh</pre> + + <h3>Shell Commands</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>export <var>=<val></code></td><td>Set a shell variable</td></tr> + <tr><td><code>unset <var></code></td><td>Remove a shell variable</td></tr> + <tr><td><code>set</code></td><td>List all shell variables</td></tr> + <tr><td><code>script <path.sh></code></td><td>Run a VFS script file</td></tr> + <tr><td><code>sh <path.sh></code></td><td>Alias for <code>script</code> — run a VFS script file</td></tr> + <tr><td><code>alias [name=value]</code></td><td>List aliases or set a custom alias name=command</td></tr> + <tr><td><code>unalias <name></code></td><td>Remove a custom alias</td></tr> + <tr><td><code>h</code> · <code>s</code> · <code>ll</code></td><td>Short aliases: <code>h</code> = help, <code>s</code> = web search, <code>ll</code> = detailed listing</td></tr> + <tr><td><code>dashboard [--watch|--stop]</code></td><td>Collect live telemetry and open the dashboard page; --watch re-collects every 5 s</td></tr> + <tr><td><code>usage [--json] [--reset]</code></td><td>LLM token usage report for this browser (per model, cost estimate)</td></tr> + <tr><td><code>df</code></td><td>Virtual filesystem usage</td></tr> + <tr><td><code>free</code></td><td>JS heap / memory snapshot</td></tr> + <tr><td><code>top</code></td><td>Busiest commands and modules by activity</td></tr> + <tr><td><code>ps</code></td><td>Commands and follows currently running</td></tr> + <tr><td><code>history [--search <term>]</code></td><td>Command history, optionally filtered</td></tr> + <tr><td><code>run <script></code></td><td>Execute a saved script from the VFS</td></tr> + <tr><td><code>sysmsg [on|off]</code></td><td>Toggle system messages</td></tr> + <tr><td><code>view_module <name></code></td><td>Print a module's source</td></tr> + <tr><td><code>node <script.js></code></td><td>Run a JS file from the VFS (alias of <code>js-run</code>)</td></tr> +</table></div> + </section> + + <!-- ── Floating UI ── --> + <section id="floating"> + <h2>🪄 Floating UI</h2> + <div class="callout callout-success"> + <span class="callout-title">Remixable floating buttons · Menus · Panels</span> + The Floating Module lets you or the AI spawn persistent floating UI elements that survive page reloads. All state is kept in localStorage. + </div> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>floating-add btn <id> <label> <command></code></td><td>Spawn a floating button that runs a terminal command</td></tr> + <tr><td><code>floating-add menu <id> <label> btn:Sub|cmd ...</code></td><td>Spawn a collapsible floating menu with sub-buttons</td></tr> + <tr><td><code>floating-add panel <id> <title> <content></code></td><td>Spawn a floating text panel</td></tr> + <tr><td><code>floating-remove <id></code></td><td>Remove a floating element</td></tr> + <tr><td><code>floating-list</code></td><td>Show all floating elements with IDs and positions</td></tr> + <tr><td><code>floating-pos <id> <x|auto> <y|auto></code></td><td>Reposition a floating element</td></tr> + <tr><td><code>floating-toggle <id></code></td><td>Show/hide a floating element</td></tr> + <tr><td><code>floating-clear</code></td><td>Remove all floating elements</td></tr> + </table></div> + <pre><span class="cmt"># Create a button</span> +floating-add btn files "📁 Files" ls + +<span class="cmt"># Create a collapsible menu</span> +floating-add menu tools "🔧 Tools" btn:Help|help btn:Clear|clear + +<span class="cmt"># Create a status panel</span> +floating-add panel status "📊 Status" "Ready" + +<span class="cmt"># List all elements</span> +floating-list + +<span class="cmt"># Hide without removing</span> +floating-toggle files</pre> + </section> + + <!-- ── Security ── --> + <section id="security"> + <h2>🔒 Security & Guardrails</h2> + <div class="callout callout-warning"> + <span class="callout-title">Protecting Your Terminal</span> + Three layered protections — guardrails block dangerous patterns, confidence escalation requires AI to self-assess, shadow VFS previews filesystem impact. + </div> + + <h3>Guardrail Policy</h3> + <p>Pre-execution guardrails intercept AI tool calls and block or warn on patterns matching dangerous operations:</p> + <div class="table-wrap"><table> + <tr><th>Rule</th><th>Description</th><th>Severity</th></tr> + <tr><td><code>rm-rf-block</code></td><td>Prevent recursive force deletes</td><td>🔴 deny</td></tr> + <tr><td><code>curl-pipe-bash</code></td><td>Block curl-to-bash execution</td><td>🔴 deny</td></tr> + <tr><td><code>rm-outer-vfs</code></td><td>Block deletion of sensitive metadata files</td><td>🔴 deny</td></tr> + <tr><td><code>mass-delete</code></td><td>Block mass-delete operations</td><td>🔴 deny</td></tr> + <tr><td><code>chmod-777</code></td><td>Block world-writable permissions</td><td>🔴 deny</td></tr> + <tr><td><code>eval-danger</code></td><td>Block dynamic code execution (eval/exec/system)</td><td>🔴 deny</td></tr> + <tr><td><code>external-dl</code></td><td>External file download warning</td><td>🟡 warn</td></tr> + <tr><td><code>env-overwrite</code></td><td>Modifying environment variables</td><td>🟡 warn</td></tr> + </table></div> + + <h3>Commands</h3> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>guardrail</code></td><td>Show guardrail policy rules and violation count</td></tr> + <tr><td><code>guardrail-add <id> <severity> <pattern> <tools...></code></td><td>Add a custom guardrail rule (severity: deny/warn)</td></tr> + <tr><td><code>guardrail-remove <id></code></td><td>Remove a guardrail rule</td></tr> + <tr><td><code>shadow <command></code></td><td>Execute command in Shadow VFS — snapshot, run, diff changes</td></tr> + <tr><td><code>shadow-commit</code></td><td>Accept shadow VFS changes</td></tr> + <tr><td><code>shadow-rollback</code></td><td>Undo shadow VFS changes</td></tr> + </table></div> + + <h3>Confidence Escalation</h3> + <p>When the AI requests destructive actions, it must declare <code>Confidence: N%</code> in its reasoning. Below 90%, manual approval is required. If no confidence is declared, manual approval is required by default. This prevents the AI from making low-confidence destructive changes.</p> + </section> + + <!-- ── Sessions ── --> + <section id="sessions"> + <h2>💬 Sessions</h2> + <p>Sessions persist AI conversation logs in VFS <code>/memory/</code>. The AI auto-loads recent sessions at start for continuity.</p> + <h3>AI Tools</h3> + <div class="table-wrap"><table> + <tr><th>Tool</th><th>Description</th></tr> + <tr><td><code>session_save</code></td><td>Save summary</td></tr> + <tr><td><code>session_load</code></td><td>Load by date</td></tr> + <tr><td><code>session_recent</code></td><td>Show last N</td></tr> + <tr><td><code>session_stats</code></td><td>Aggregate statistics</td></tr> + <tr><td><code>session-new</code></td><td>Start a fresh AI session (clears context, keeps history)</td></tr> +</table></div> + <p>The terminal auto-saves session state every 60s and auto-restores on page reload.</p> + </section> + + <!-- ── Storage ── --> + <section id="storage"> + <h2>💾 Storage</h2> + <div class="callout callout-success"> + <span class="callout-title">localStorage Persistence</span> + Everything survives hard refreshes via 15+ localStorage keys. + </div> + <pre><span class="cmt"># Clear all WebX11 data</span> +localStorage.clear() +location.reload() + +<span class="cmt"># Back up / restore VFS</span> +vfs-export +vfs-import</pre> + <p>~5–10MB per domain. Only URLs (not code) are stored for modules.</p> + </section> + + <!-- ── WebDAV ── --> + <section id="webdav"> + <h2>☁️ WebDAV</h2> + <p>Cloud sync with your WebX11 space. File-tree browser UI with bulk actions.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>webdav-config <url> <token></code></td><td>Configure WebDAV connection</td></tr> + <tr><td><code>webdav-status</code></td><td>Show sync status and connection health</td></tr> + <tr><td><code>webdav-ls [path]</code></td><td>List remote files</td></tr> + <tr><td><code>webdav-push <local> [remote]</code></td><td>Upload file to cloud</td></tr> + <tr><td><code>webdav-pull <remote> [local]</code></td><td>Download file from cloud</td></tr> + <tr><td><code>webdav-browser</code></td><td>Open file-tree browser UI with checkboxes, context menu, inline rename, per-file preview 👁 / open-in-new-tab ⛶ buttons, minimize-to-floating and share-URL header buttons</td></tr> + <tr><td><code>webdav-rm <path></code></td><td>Delete remote file/directory</td></tr> + <tr><td><code>webdav-mkdir <path></code></td><td>Create remote directory</td></tr> + <tr><td><code>webdav-rename <old> <new></code></td><td>Rename remote file</td></tr> + <tr><td><code>webdav-move <src> <dst></code></td><td>Move remote file (alias for rename)</td></tr> + <tr><td><code>webdav-backup</code></td><td>Backup entire space</td></tr> + <tr><td><code>webdav-login <user></code></td><td>Store WebDAV credentials for this session</td></tr> +</table></div> + <h3>Browser Features</h3> + <ul> + <li>Checkbox select + Select All toggle</li> + <li>Bulk action bar: Delete, Move, Download selected files</li> + <li>Inline rename: double-click filename</li> + <li>Right-click context menu with all operations</li> + <li>Breadcrumb navigation</li> + <li>Create-directory button</li> + <li>Keyboard shortcuts: <code>j</code>/<code>k</code> navigate, <code>Space</code> select, <code>Enter</code> open</li> + </ul> + </section> + + <!-- ── Agents ── --> + <section id="agents"> + <h2>🤖 Agent Orchestration</h2> + <p>Register, list, and delegate tasks to AI agents with lease-based lifecycle management.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>agent-list</code></td><td>List all registered agents with status</td></tr> + <tr><td><code>agent-status <id></code></td><td>Show detailed status for a specific agent</td></tr> + <tr><td><code>agent-register <name> <model></code></td><td>Register a new AI agent</td></tr> + <tr><td><code>agent-unregister <id></code></td><td>Remove an agent from the registry</td></tr> + <tr><td><code>lease-list</code></td><td>Show active leases — agent tasks with status and TTL</td></tr> + <tr><td><code>orchestrate <task></code></td><td>Delegate multi-step task to agent orchestrator</td></tr> + <tr><td><code>orchestrate-parallel <task></code></td><td>Decompose and run sub-tasks in parallel (auto-splits on "and"/"then")</td></tr> + <tr><td><code>orchestrate-decompose <task></code></td><td>Preview how a task would be split into sub-tasks</td></tr> + <tr><td><code>orchestrate-result</code></td><td>Show results of the last parallel batch</td></tr> + <tr><td><code>orchestrator-status</code></td><td>Show orchestrator agent pool status</td></tr> + <tr><td><code>orchestrator-list</code></td><td>List all spawned agents with full details</td></tr> + <tr><td><code>orchestrator-spawn <role> [caps...]</code></td><td>Spawn a new worker agent</td></tr> + <tr><td><code>orchestrator-sleep <id></code></td><td>Suspend agent to VFS (survives reload)</td></tr> + <tr><td><code>orchestrator-wake <id></code></td><td>Restore agent from VFS sleep state</td></tr> + <tr><td><code>orchestrator-kill <id></code></td><td>Terminate an agent and revoke leases</td></tr> + <tr><td><code>orchestrator-purge</code></td><td>Remove dead agents (>60s silent)</td></tr> + <tr><td><code>orchestrator-config <key> <value></code></td><td>Tune: spawn-limit, spawn-strategy, heartbeat-timeout, idle-timeout, restart-policy, a2a-polling (on/off), a2a-poll-interval, heartbeat-check, idle-sweep-interval, dead-purge-timeout, consensus-size, consensus-strategy, consensus-timeout, pipeline-auto-fix, pipeline-stage-timeout (persisted)</td></tr> + <tr><td><code>orchestrator-restart-policy <id> <policy></code></td><td>Set per-agent restart policy: on-failure, always, never</td></tr> + <tr><td><code>consensus <question></code></td><td>Consensus: spawn N agents, debate, resolve by majority vote</td></tr> + <tr><td><code>consensus-status</code></td><td>Show current/active consensus round status</td></tr> + <tr><td><code>consensus-history</code></td><td>Show past consensus rounds and resolutions</td></tr> + <tr><td><code>pipeline <test|deploy|verify|history|config></code></td><td>Autonomous CI/CD: test agents/modules, deploy (test→auto-fix→verify), history, config</td></tr> + <tr><td><code>lease-create <agent-id> [duration] [task]</code></td><td>Create a time-bound lease for a worker agent</td></tr> + <tr><td><code>lease-list</code></td><td>Show active leases — agent tasks with status and TTL</td></tr> + <tr><td><code>lease-revoke <id></code></td><td>Revoke an active lease</td></tr> + <tr><td><code>lease-renew <id> <seconds></code></td><td>Extend an active lease by N seconds</td></tr> + <tr><td><code>orchestrator-schedule <role> <interval_s> <task...></code></td><td>Schedule a recurring task for a role</td></tr> + <tr><td><code>orchestrator-schedules</code></td><td>List scheduled tasks</td></tr> + <tr><td><code>orchestrator-unschedule <id></code></td><td>Remove a scheduled task</td></tr> +</table></div> + </section> + + <!-- ── A2A Contracts ── --> + <section id="a2a-contracts"> + <h2>📜 A2A Contracts</h2> + <p>Define and enforce agent-to-agent contracts with input/output schema validation. Contracts are stored in <code>/.contracts/</code> and validated during orchestrator delegation.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>a2a-send <agent-id> <json></code></td><td>Send an A2A message to an agent's VFS inbox</td></tr> + <tr><td><code>a2a-list</code></td><td>Show all A2A messages with pending status</td></tr> + <tr><td><code>contract-register <role> [fields...] --output [fields...]</code></td><td>Register a contract with input/output schema</td></tr> + <tr><td><code>contract-list</code></td><td>List all registered contracts</td></tr> + <tr><td><code>a2a-post <to> <type> <capability> <payload></code></td><td>Post a message to another agent's mailbox</td></tr> + <tr><td><code>a2a-poll</code></td><td>Read your own inbox</td></tr> + <tr><td><code>a2a-ack <id></code></td><td>Acknowledge a message</td></tr> + <tr><td><code>a2a-reject <id></code></td><td>Reject a message</td></tr> + <tr><td><code>a2a-status</code></td><td>Mailbox counters per agent</td></tr> + <tr><td><code>a2a-prune</code></td><td>Drop old and acknowledged messages</td></tr> +</table></div> + </section> + + <!-- ── Neural VFS ── --> + <section id="neural-vfs"> + <h2>🧠 Neural VFS</h2> + <p>Semantic concept-indexing layer over the hierarchical VFS. Scans files and builds a concept → path mapping using filenames, tags, and headers.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>memgraph-status</code></td><td>Memory graph node/edge counts</td></tr> + <tr><td><code>memgraph-search <q></code></td><td>Find nodes by label or type</td></tr> + <tr><td><code>memgraph-stats</code></td><td>Most connected nodes, strongest edges</td></tr> + <tr><td><code>memgraph-export</code></td><td>Export graph as JSON</td></tr> + <tr><td><code>memgraph-prune</code></td><td>Remove stale low-weight edges</td></tr> + <tr><td><code>nvfs-status</code></td><td>Show index stats and last scan time</td></tr> + <tr><td><code>nvfs-resolve <concept></code></td><td>Find files related to a concept (exact + fuzzy)</td></tr> + <tr><td><code>nvfs-tree [concept]</code></td><td>Show concept-to-file mapping tree</td></tr> +<tr><td><code>nvfs-config [key] [value]</code></td><td>View/set config (fuzzy-limit, tree-files, tree-concepts, resolve-files, deep-index, deep-model)</td></tr> + <tr><td><code>nvfs-alias list|add|remove|clear</code></td><td>Manage concept aliases</td></tr> + <tr><td><code>nvfs-sync [--deep]</code></td><td>Incremental background sync dirty files</td></tr> + <tr><td><code>nvfs-save</code></td><td>Force-save semantic index to VFS disk</td></tr> + <tr><td><code>nvfs-cancel</code></td><td>Cancel running index operation</td></tr> + <tr><td><code>nvfs-index-graph [--deep]</code></td><td>Build the NVFS index dependency graph</td></tr> +</table></div> + </section> + + <!-- ── Server Monitor ── --> + <section id="server-monitor"> + <h2>📊 Server Monitor</h2> + <p>Uptime monitoring for external services + self-optimization telemetry tracking tool latency and error rates.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>server <name> <url></code></td><td>Add a server to monitor</td></tr> + <tr><td><code>servers</code></td><td>List all monitored servers</td></tr> + <tr><td><code>server-check <name></code></td><td>Check a server's current status</td></tr> + <tr><td><code>monitor</code></td><td>Toggle auto-monitoring (60s interval)</td></tr> +<tr><td><code>system-health</code></td><td>Tool latency, VFS stats, modules, memory, error rates</td></tr> + <tr><td><code>predict <task></code></td><td>Predict task duration, tool turns, and confidence</td></tr> + <tr><td><code>predictor-status</code></td><td>Prediction model accuracy and data points</td></tr> + <tr><td><code>predictor-config <k> <v></code></td><td>Tune confidence-threshold, min-data-points</td></tr> + </table></div> + </section> + <section id="debug-panel"> + <h2>🔧 Debug Panel</h2> + <p>Toggle the debug overlay to monitor system internals in real-time.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>debug</code></td><td>Toggle debug panel on/off</td></tr> + <tr><td><code>debug-sync</code></td><td>Push debug records to the configured sync endpoint</td></tr> + <tr><td><code>debug-sync-url <url></code></td><td>Show or set the sync endpoint</td></tr> +</table></div> + <h3>Debug Panel Shows</h3> + <ul> + <li><strong>Memory</strong> — localStorage usage, VFS size, session context size</li> + <li><strong>Events</strong> — registered event listeners, module event bindings</li> + <li><strong>Errors</strong> — recent JS errors with stack traces</li> + <li><strong>Modules</strong> — loaded count, broken references, cache state</li> + </ul> + <p>Useful for troubleshooting module load failures, VFS corruption, and AI context bloat.</p> + </section> + + <!-- ── Sandbox ── --> + <section id="sandbox"> + <h2>🧪 Sandboxed Execution</h2> + <p>WebWorkers provide isolated contexts for task execution. Each worker gets a VFS snapshot so operations don't interfere with the main terminal.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>sandbox-status</code></td><td>Show worker pool health and task metrics</td></tr> + <tr><td><code>sandbox-config <k> <v></code></td><td>Configure max-workers, min-workers</td></tr> + <tr><td><code>sandbox-run <task></code></td><td>Execute a task in the sandbox pool</td></tr> + </table></div> + <p><code>orchestrate --sandboxed <task></code> routes delegation through the sandbox for full isolation.</p> + </section> + + <!-- ── Memory Graph ── --> + <section id="memory-graph"> + <h2>🧠 Memory Graph</h2> + <p>Cross-session persistent graph database tracking files, concepts, tasks, and tools. Nodes store metadata, edges record relationships with weighted strength. Survives page reloads via VFS persistence.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>memgraph-status</code></td><td>Show node/edge counts and graph health</td></tr> + <tr><td><code>memgraph-search <q></code></td><td>Find nodes by label, type, or id</td></tr> + <tr><td><code>memgraph-stats</code></td><td>Most connected nodes and strongest edges</td></tr> + <tr><td><code>memgraph-export</code></td><td>Export full graph as JSON to VFS</td></tr> +<tr><td><code>memgraph-prune</code></td><td>Remove stale low-weight edges (>30d, <3 uses)</td></tr> + <tr><td><code>memgraph-learn <entity> <fact></code></td><td>Add a fact to the memory graph</td></tr> + <tr><td><code>memgraph-agent <agentId></code></td><td>Show one agent's memory subgraph</td></tr> + <tr><td><code>memgraph-session [YYYY-MM-DD]</code></td><td>Show a day's session graph</td></tr> + <tr><td><code>memgraph-decay-config <days> <min_uses></code></td><td>Tune memory decay</td></tr> +</table></div> + <p>Context is automatically injected into AI prompts for cross-session awareness.</p> + </section> + + <!-- ── World Model ── --> + <section id="world-model"> + <h2>🌐 World Model</h2> + <p>System self-awareness engine. Synthesizes data from memory graph, module system, skills index, telemetry, and agent pool into a unified model at <code>/system/world-model.json</code>. Auto-refreshes every 5 minutes.</p> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>world-model</code></td><td>Show full world model breakdown</td></tr> + <tr><td><code>world-model-summary</code></td><td>One-line system status summary</td></tr> + <tr><td><code>world-model-ask <q></code></td><td>Query modules, skills, agents, health, or changes</td></tr> + <tr><td><code>world-model-refresh</code></td><td>Force re-synthesis immediately</td></tr> + <tr><td><code>world-model-config <k> <v></code></td><td>Tune refresh-interval and max-projects</td></tr> + </table></div> + </section> + + <!-- ── Security ── --> + <section id="security"> + <h2>🔒 Security</h2> + <div class="table-wrap"><table> + <tr><th>Feature</th><th>Status</th></tr> + <tr><td>Input Validation</td><td>✅</td></tr> + <tr><td>Output Escaping</td><td>✅</td></tr> + <tr><td>No eval() on User Input</td><td>✅</td></tr> + <tr><td>Path Traversal Prevention</td><td>✅</td></tr> + <tr><td>Sandboxed File System</td><td>✅</td></tr> + <tr><td>AI Destructive Confirmations</td><td>✅ Required + 120s countdown</td></tr> + <tr><td>Iframe Preview Sandbox</td><td>✅ allow-same-origin allow-scripts</td></tr> + </table></div> + <h3>Security Levels</h3> + <div class="table-wrap"><table> + <tr><th>Level</th><th>Behavior</th></tr> + <tr><td><code>0</code></td><td>Unrestricted — all commands allowed without confirmation</td></tr> + <tr><td><code>1</code> (default)</td><td>Confirm destructive actions (rm, overwrite, etc.)</td></tr> + <tr><td><code>2</code></td><td>Deny sensitive commands (rm -rf, encrypt operations)</td></tr> + <tr><td><code>3</code></td><td>Deny all dangerous commands (requires deliberate override)</td></tr> + </table></div> + <div class="table-wrap"><table> + <tr><th>Command</th><th>Description</th></tr> + <tr><td><code>security-level <0-3></code></td><td>Set active security level</td></tr> + <tr><td><code>security</code></td><td>Show full status: level, blocked count, destructive/system/whitelist sets, suspicious flags, registered commands</td></tr> + <tr><td><code>security-destructive list</code></td><td>Show destructive command set</td></tr> + <tr><td><code>security-destructive add|remove <cmd></code></td><td>Add/remove command from destructive set (persisted)</td></tr> + <tr><td><code>security-system list</code></td><td>Show system command set</td></tr> + <tr><td><code>security-system add|remove <cmd></code></td><td>Add/remove command from system set (persisted)</td></tr> + <tr><td><code>security-whitelist list</code></td><td>Show whitelist command set</td></tr> + <tr><td><code>security-whitelist add|remove <cmd></code></td><td>Add/remove command from whitelist (persisted)</td></tr> + <tr><td><code>security-flag list</code></td><td>Show suspicious flags</td></tr> + <tr><td><code>security-flag add|remove <flag></code></td><td>Add/remove suspicious flag (persisted, -- prefix optional)</td></tr> + <tr><td><code>cmd-allow <command></code></td><td>Add command to allowlist (bypasses restrictions)</td></tr> + <tr><td><code>cmd-deny <command></code></td><td>Add command to denylist (always blocked)</td></tr> + </table></div> + <div class="callout callout-warning"> + <span class="callout-title">⚠️ Module Loading</span> + Only load modules from trusted sources — they have full terminal access. + </div> + </section> + + <!-- ── Troubleshooting ── --> + <section id="trouble"> + <h2>🔧 Troubleshooting</h2> + <div class="table-wrap"><table> + <tr><th>Issue</th><th>Solution</th></tr> + <tr><td>AI not responding</td><td>Run <code>ollamaconnect</code> first, ensure Ollama is running</td></tr> + <tr><td>Voice not working</td><td>Chrome/Edge/Safari only. Grant mic permission</td></tr> + <tr><td>Module fails to load</td><td>Check CORS on the hosting server</td></tr> + <tr><td>Data lost after refresh</td><td>Check localStorage is enabled. Private mode clears data</td></tr> + <tr><td>AI actions not confirming</td><td>Confirm bar auto-denies after 120s. Type <code>ai-allow</code></td></tr> + <tr><td>Sound not playing</td><td>Browser may need first user gesture. Toggle off/on</td></tr> + <tr><td>Ollama CORS error</td><td><code>OLLAMA_ORIGINS="*" ollama serve</code></td></tr> + </table></div> + <h3>Debug</h3> + <pre><span class="cmt"># Console</span> +F12 → Console + +<span class="cmt"># View AI state</span> +ai-system +ai-context + +<span class="cmt"># Module status</span> +listmods</pre> + </section> + + <!-- ── Quick Ref ── --> + <section id="ref"> + <h2>⚡ Quick Reference</h2> + <div class="quick-ref"> + <div class="quick-ref-title">WebX11 v4.5.11</div> + <div class="quick-ref-grid"> + <div class="quick-ref-item"><span class="cmd">help</span><span class="desc">Show all commands</span></div> + <div class="quick-ref-item"><span class="cmd">cls</span><span class="desc">Clear terminal</span></div> + <div class="quick-ref-item"><span class="cmd">ll</span><span class="desc">List files</span></div> + <div class="quick-ref-item"><span class="cmd">cd <dir></span><span class="desc">Change directory</span></div> + <div class="quick-ref-item"><span class="cmd">cat <f></span><span class="desc">View file</span></div> + <div class="quick-ref-item"><span class="cmd">edit <f></span><span class="desc">Edit file</span></div> + <div class="quick-ref-item"><span class="cmd">ai <msg></span><span class="desc">Chat with AI</span></div> + <div class="quick-ref-item"><span class="cmd">search <q></span><span class="desc">Web search</span></div> + <div class="quick-ref-item"><span class="cmd">find <q></span><span class="desc">File search</span></div> + <div class="quick-ref-item"><span class="cmd">diff a b</span><span class="desc">Compare files</span></div> + <div class="quick-ref-item"><span class="cmd">ollamaconnect</span><span class="desc">Connect AI</span></div> + <div class="quick-ref-item"><span class="cmd">ai-allow</span><span class="desc">Allow destructive</span></div> + <div class="quick-ref-item"><span class="cmd">ai-deny</span><span class="desc">Deny destructive</span></div> + <div class="quick-ref-item"><span class="cmd">modules</span><span class="desc">Module Manager</span></div> + <div class="quick-ref-item"><span class="cmd">skill-list</span><span class="desc">List skills</span></div> + <div class="quick-ref-item"><span class="cmd">alias</span><span class="desc">List aliases</span></div> + <div class="quick-ref-item"><span class="cmd">preview</span><span class="desc">HTML preview</span></div> + <div class="quick-ref-item"><span class="cmd">upload</span><span class="desc">Upload file</span></div> + <div class="quick-ref-item"><span class="cmd">| pipe</span><span class="desc">Chain commands</span></div> + <div class="quick-ref-item"><span class="cmd">> file</span><span class="desc">Redirect output</span></div> + <div class="quick-ref-item"><span class="cmd">which</span><span class="desc">Locate command</span></div> + <div class="quick-ref-item"><span class="cmd">env</span><span class="desc">Show env vars</span></div> + <div class="quick-ref-item"><span class="cmd">script</span><span class="desc">Run .sh file</span></div> + <div class="quick-ref-item"><span class="cmd">date</span><span class="desc">Show time</span></div> + <div class="quick-ref-item"><span class="cmd">cal</span><span class="desc">Show calendar</span></div> + <div class="quick-ref-item"><span class="cmd">base64</span><span class="desc">Encode/decode</span></div> + <div class="quick-ref-item"><span class="cmd">nvfs-index</span><span class="desc">Build semantic index</span></div> + <div class="quick-ref-item"><span class="cmd">nvfs-resolve</span><span class="desc">Find files by concept</span></div> + <div class="quick-ref-item"><span class="cmd">nvfs-sync</span><span class="desc">Sync dirty files</span></div> + <div class="quick-ref-item"><span class="cmd">nvfs-save</span><span class="desc">Save index to disk</span></div> + <div class="quick-ref-item"><span class="cmd">nvfs-cancel</span><span class="desc">Cancel index op</span></div> + <div class="quick-ref-item"><span class="cmd">js</span><span class="desc">Eval JS expression</span></div> + <div class="quick-ref-item"><span class="cmd">js-run</span><span class="desc">Run JS file</span></div> + <div class="quick-ref-item"><span class="cmd">vfs-size</span><span class="desc">VFS size report</span></div> + <div class="quick-ref-item"><span class="cmd">vfs-clean</span><span class="desc">Nuke system dirs</span></div> + <div class="quick-ref-item"><span class="cmd">mindmap svg</span><span class="desc">Render mindmap as SVG</span></div> + <div class="quick-ref-item"><span class="cmd">gui</span><span class="desc">Simple GUI builder</span></div> + <div class="quick-ref-item"><span class="cmd">contract-list</span><span class="desc">List A2A contracts</span></div> + <div class="quick-ref-item"><span class="cmd">modules-list</span><span class="desc">List all 45 modules</span></div> + <div class="quick-ref-item"><span class="cmd">orchestrate</span><span class="desc">Delegate to agent</span></div> + <div class="quick-ref-item"><span class="cmd">system-health</span><span class="desc">System diagnostics</span></div> + <div class="quick-ref-item"><span class="cmd">seq</span><span class="desc">Number sequence</span></div> + <div class="quick-ref-item"><span class="cmd">whoami</span><span class="desc">Show user</span></div> + <div class="quick-ref-item"><span class="cmd">basename</span><span class="desc">Strip dir path</span></div> + </div> + </div> + </section> + + <div style="text-align:center;margin-bottom:32px;"> + <p>📄 One-page <a href="cheatsheet.html" style="color:var(--accent2);font-weight:600;">Quick Reference cheat sheet</a> — printable, dark mode, all commands.</p> + </div> + + <!-- ── Changelog ── --> + <section id="history"> + <h2>📋 Changelog</h2> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.6.52 — October 2026</span><span class="v-date">2026-10-22</span></div> + <ul> + <li><strong>Documentation backlog cleared</strong> — 74 commands that the code registered but this page never documented are now in their own sections: <code>dashboard</code> (with <code>--watch</code>/<code>--stop</code>), <code>usage</code>, <code>ps</code>/<code>top</code>/<code>df</code>/<code>free</code>, the six <code>a2a-*</code> mailbox commands, <code>webxai</code>/<code>webx</code>/<code>wx</code>, <code>context</code>/<code>contexts</code>/<code>context-new</code>/<code>context-delete</code>/<code>context-auto</code>/<code>smart-ask</code>, the <code>commit-*</code> approval trio, <code>module-load|unload|enable|reset</code>, <code>memgraph-agent|session|decay-config</code>, <code>orchestrator-schedule|schedules|unschedule</code>, <code>skill-validate|audit|restore|pack-core</code>, <code>learn-skill</code>, <code>encrypt</code>/<code>decrypt</code>, <code>gzip</code>/<code>wget</code>, <code>kanban</code>, <code>three</code>, <code>course</code>, <code>videos</code>, <code>speak</code>/<code>voice</code>/<code>analyze</code>, <code>gui-run|text|clear</code>, the <code>vaultmind-*</code> set, <code>debug-sync</code>/<code>debug-sync-url</code>, <code>setfont</code>, <code>bug</code>, <code>session-new</code>, <code>files</code>, <code>node</code>, <code>sed</code>, <code>nvfs-index-graph</code>, <code>wallet-lookup</code>, <code>ai-model</code>, <code>ai-ignore</code>, <code>webdav-login</code>, <code>view_module</code>, <code>run</code>, <code>sysmsg</code>, <code>history</code>.</li> + <li><strong>Ghost rows removed</strong> — <code>commands</code>, <code>check</code>, <code>sandbox-kill</code> and <code>webdav-explorer</code> were documented here but are not registered anywhere in the code. Their rows are gone; the sandbox prose no longer promises <code>sandbox-kill</code>.</li> + <li><strong>Audit method</strong> — the command list is now derived from <code>terminal.js</code> (<code>_baseWhitelist</code>, <code>internals</code>, <code>cmd ===</code> dispatch) plus every <code>commands['…']</code> registration in <code>modules/</code>, so the next gap can be found mechanically.</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.86 — July 2026</span><span class="v-date">2026-07-04</span></div> + <ul> + <li><strong>Cold module activation</strong> — Three modules (Memory Graph, Predictor, World Model) were loaded but produced zero actionable data. All now wired into the AI agent loop.</li> + <li><strong>Predictor feedback loop</strong> — <code>predictor.recordResult()</code> now called after multi-turn AI tasks (toolTurns ≥ 2). Predictor accumulates historical data for duration/turn predictions. Previously had zero call sites — module was dead.</li> + <li><strong>New AI tools</strong> — <code>predict_task</code> (estimate task duration before starting) and <code>world_model_query</code> (query system self-awareness: modules, skills, files, agents, health, changes, projects). AI now has 51 tools (was 49).</li> + <li><strong>Memory graph noise suppression</strong> — <code>getContextForPrompt()</code> returns empty string when graph has ≤2 nodes and 0 edges. Eliminates useless <code>[Memory Graph Context] 1 nodes, 0 edges</code> token waste on every AI turn.</li> + <li><strong>Memory graph task recording</strong> — <code>recordTask()</code> now called for direct AI conversations, not just orchestrator tasks. Graph learns about all AI interactions.</li> + <li><strong><code>memgraph-learn</code> command</strong> — Documented in help.html but never implemented. Now creates concept+fact nodes with weighted edge. <code>memgraph-learn <entity> <fact></code>.</li> + <li><strong><code>getStats()</code> alias</strong> — Orchestrator's <code>_pipelineVerify()</code> called <code>memgraph.getStats()</code> but the method was <code>showStats()</code>. Added <code>getStats()</code> alias returning <code>{nodes, edges, types, totalAccesses}</code>.</li> + <li><strong>World Model summary fix</strong> — <code>_getTotalModules()</code> returned registry count (7) instead of <code>max(loaded, registry)</code> (43). Summary now shows <code>43/43</code> not <code>43/7</code>.</li> + <li><strong>Dashboard World Model panel</strong> — New section showing version, last synthesized time, module/skill/file/agent counts, memory graph stats, health, active projects, recent changes.</li> + <li><strong>System prompt update</strong> — Now mentions <code>predict_task</code> and <code>world_model_query</code> capabilities.</li> + <li>Cache: <code>2026-07-04-v4.5.86</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.64–v4.5.67 — June 2026</span><span class="v-date">2026-06-18</span></div> + <ul> + <li><strong>Orphan removal</strong> — Removed 5 dead modules from core-bundle: <code>MyModule</code>, <code>ModuleIOModule</code>, <code>DynamicPromptsModule</code>, <code>SmartContextModule</code>, <code>DuckDuckGoModule</code>. 454 lines, 23KB saved. 12+ ghost commands cleaned from help.html. <code>modules-index.json</code> 50→45 entries. <code>rebuild-bundles.py</code> updated to prevent resurrection.</li> + <li><strong>Unified <code>reset</code> command</strong> — Supersedes <code>factory-reset</code>, <code>reset-vfs</code>, <code>reset-mem</code>, <code>config-reset</code>. Subcommands: <code>reset mem</code> (AI state), <code>reset vfs</code> (filesystem), <code>reset config</code> (settings), <code>reset all</code> (nuclear). Old commands kept as aliases.</li> + <li><strong>Agent loop detection</strong> — <code>agenticLoop</code> now tracks repeated tool calls. Same tool+args 3× triggers loop break with system message. Prevents AI from wasting 8 turns calling <code>ls</code>.</li> + <li><strong>Agent optimization default OFF</strong> — <code>trivial-optimization</code> was always ON by default (<code>!== 'false'</code>). Changed to default OFF (<code>=== 'true'</code>). Use <code>ai-config trivial-optimization on</code> to enable.</li> + <li><strong>JS Console fix</strong> — <code>js</code> / <code>js-run</code> commands were not in the security whitelist. At level 1+ they were classified "unknown" and routed to AI instead of dispatching. Added to whitelist — now works.</li> + <li><strong>Telemetry throttle</strong> — ServerMonitor persisted tool-latency logs every 20 calls. Throttled to every 100 calls or 5 minutes. ~80% fewer VFS writes.</li> + <li><strong>Pipe security fix</strong> — Pipe chains (<code>cmd1 | cmd2</code>) bypassed ALL security classification. <code>rm foo | cat</code> ran <code>rm</code> with zero checks even at Paranoid level. Each pipe stage now passes through <code>_classify()</code> — destructive and system commands blocked at level 1+.</li> + <li>Cache: <code>2026-06-18-v4.5.67</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.45–v4.5.63 — June 2026</span><span class="v-date">2026-06-12 to 2026-06-17</span></div> + <ul> + <li><strong>Critical ext bundle</strong> — 7 command-critical ext modules (editor, shell, alias, finder, filemgr, diff, busybox) promoted into <code>critical-ext-bundle.js</code> (2,365 lines). Solves HTTP 503 request-storm during boot.</li> + <li><strong>Core module bundle</strong> — All core modules concatenated into <code>core-bundle.js</code>. Single <code><script></code> tag replaces 30 individual loads. <code>rebuild-bundles.py</code> script added.</li> + <li><strong>VFS session bloat fixes</strong> — v2 metadata-only sessions (no VFS tree). Checkpoints strip system dirs, capped at 3. <code>_purgeTrash()</code> on boot (24h TTL). WebDAV backup deep-clones + strips.</li> + <li><strong>New modules</strong> — <code>module-agent-registry.js</code> (A2A transport), <code>module-leases.js</code> (agent lifecycle), <code>module-aiasm.js</code> (assembly), <code>module-duckduckgo.js</code> (search, later orphaned), <code>debug-panel.js</code>, <code>skill-pack-core.js</code>.</li> + <li><strong>A2A scratchpad architecture</strong> — Orchestrator agent-to-agent transport with prune timers, heartbeat checks, idle sweep. 6 <code>a2a-*</code> commands.</li> + <li><strong>Orchestrator rewrite</strong> — <code>delegateTask</code> re-enters full agentic loop. <code>spawnAgent</code>, <code>orchestrate-parallel</code>, <code>orchestrate-decompose</code>, consensus protocol.</li> + <li><strong>Deep architecture audit</strong> — 3 parallel subagent investigation of AI subsystem, VFS/state, security/dispatch. Found pipe security bypass, 5 orphaned modules, 6 duplicate localStorage keys, 19 unregistered intervals, 47 bare fetch() calls.</li> + <li>Cache: various — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.44 — June 2026</span><span class="v-date">2026-06-11</span></div> + <ul> + <li><strong>Mindmap organization overhaul</strong> — Pain point #5 shipped. The <code>mindmap</code> command went from 12 subcommands to <strong>40</strong>. <code>mindmap.js</code> grew from 321 to 1127 lines.</li> + <li><strong>Multi-mindmap support</strong> — No more losing work when switching. <code>mindmap new foo</code> + <code>mindmap new bar</code> creates two in-memory mindmaps. <code>mindmap switch foo</code> to jump between them. <code>mindmap list-loaded</code> shows all in-memory. Current is marked with <code>*</code>, dirty mindmaps with <code>[DIRTY]</code>.</li> + <li><strong>Dirty-flag warning on load</strong> — <code>mindmap load foo</code> now warns if the current mindmap has unsaved changes. Use <code>--force</code> to override.</li> + <li><strong>Find by text</strong> — <code>mindmap find <text></code> searches all node text + tags (case-insensitive). Returns matching IDs and depth.</li> + <li><strong>Move nodes</strong> — <code>mindmap move <id> <new-parent-id></code> reparents a node (with all its children). Validates against cycles (can't move under self or descendant).</li> + <li><strong>Undo</strong> — Stack of last 10 destructive ops. <code>mindmap undo</code> reverses: add, remove, rename, move, color, tag, weight, merge.</li> + <li><strong>Human-readable aliases</strong> — <code>mindmap alias <id> <name></code> gives a memorable name. All commands that take an ID (<code>edit</code>, <code>move</code>, <code>color</code>, etc.) now accept either ID or alias.</li> + <li><strong>Disambiguated delete</strong> — <code>mindmap delete <name></code> still deletes a FILE (backward compat). New <code>mindmap remove <id></code> removes a NODE. <code>mindmap delete-file</code> is the explicit form.</li> + <li><strong>Import</strong> — <code>mindmap import <file></code> reads from VFS, auto-detects format (JSON/Mermaid/Markdown) by extension or content. Re-generates IDs to avoid collisions.</li> + <li><strong>Merge</strong> — <code>mindmap merge <name> [--into=<id>]</code> adds a saved mindmap under the current root (or specified parent). Conflict-free: just appends.</li> + <li><strong>Diff</strong> — <code>mindmap diff <name1> <name2></code> shows added/removed/modified nodes between two saved mindmaps.</li> + <li><strong>Stats</strong> — <code>mindmap stats</code> shows total nodes, max depth, nodes per level, colors used, top 10 tags, dirty status, last save time.</li> + <li><strong>Tags cross-node</strong> — <code>mindmap tags-list [<tag>]</code> shows all tags + counts, or all nodes with a specific tag.</li> + <li><strong>Clone</strong> — <code>mindmap clone <id></code> duplicates a node and its children with new IDs. Text gets " (copy)" suffix.</li> + <li><strong>Archive</strong> — <code>mindmap archive <name></code> saves to <code>/mindmaps/archive/<name>-<ts>.json</code>. Auto-cleans to last 20.</li> + <li><strong>Weight</strong> — <code>mindmap weight <id> <1-5></code> scales node size in SVG output (1=small, 5=large, default=3).</li> + <li><strong>Mermaid export</strong> — <code>mindmap mermaid</code> (or <code>mindmap export mermaid</code>) prints Mermaid mindmap syntax. Auto-escapes parentheses, brackets, ampersands.</li> + <li><strong>JSON export</strong> — <code>mindmap json</code> prints the internal JSON (with aliases). Both Markdown and JSON get copied to clipboard.</li> + <li><strong>Refresh HTML</strong> — <code>mindmap refresh-html</code> regenerates the standalone architecture page from <code>modules-index.json</code>. Writes to <code>/mindmaps/_generated-architecture.html</code> in VFS, prints preview. Deploy with <code>cat <file> > mindmap.html</code>.</li> + <li><strong>SVG layout fix</strong> — New <code>_layoutTree()</code> algorithm computes subtree widths first, then positions. Handles 30+ node mindmaps without going off-screen. <code>weight</code> affects node size.</li> + <li>Cache: <code>2026-06-11-v4.5.44</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.43 — June 2026</span><span class="v-date">2026-06-11</span></div> + <ul> + <li><strong>Module management overhaul</strong> — Pain point #3 finally shipped. <code>module-list</code> now groups by category (CORE/EXTENSION/FOUNDATION), supports <code>--core --ext --foundation --lazy --eager --loaded --unloaded --failed --disabled --search=<pat> --flat</code> flags, and shows aggregate summary (size, count, failed, disabled).</li> + <li><strong><code>module-info <name></code></strong> — Shows module details: status, category, type, path, size, lazy flag, <strong>and the full list of commands it provides</strong> (the biggest gap). Listed in 2 columns.</li> + <li><strong><code>module-stats</code></strong> — Aggregate view: total/loaded/unloaded/lazy/eager/failed/disabled + total size + total commands.</li> + <li><strong><code>module-disable / module-enable</code></strong> — Persistently disable a module from auto-loading. Stored in <code>localStorage</code> <code>webx11_module_disabled</code>. Survives refresh. <code>module-loader.js</code> now checks this list and skips disabled modules with a <code>⊘</code> marker in the splash.</li> + <li><strong><code>module-reload / module-reset</code></strong> — Reload shows old→new diff. Reset clears module's localStorage state and reloads.</li> + <li><strong>System troubleshooting commands</strong> — Pain point #4.</li> + <li><strong><code>version</code></strong> — Single command shows: version, build date (parsed from script tag), cache key, browser engine, online status.</li> + <li><strong><code>uptime</code></strong> — Time since page load (formatted <code>Xh Ym Zs</code>) + last save time.</li> + <li><strong><code>errors [n]</code></strong> — Alias for <code>logs [n] ERROR</code>. Shows last N errors. Says "No errors found" when logs are clean.</li> + <li><strong><code>doctor</code></strong> — Runs 8 health checks (network, ollama, VFS size, heap, logs, recent errors, localStorage quota, disabled modules), ranks by severity (🔴/🟡/🟢), shows top 5, and gives recommended actions.</li> + <li><strong><code>bug-report</code></strong> — Generates a markdown report with system info, recent errors, recent commands, disabled modules, top-level VFS listing. Saves to <code>/tmp/bug-report-<timestamp>.md</code>. Send this file when reporting a bug.</li> + <li><strong><code>test-net</code></strong> — Checks browser online status, proxy API (<code>/api/stats</code>), Ollama connection, and internet (HEAD to duckduckgo.com). Green/red status for each.</li> + <li><strong><code>mem</code> enhanced</strong> — Now shows JS heap + localStorage size + sessionStorage size + VFS in-memory size + total. Color-coded thresholds (green/yellow/red).</li> + <li><strong>Trust violations fixed</strong> — Removed ghost commands <code>commands</code> and <code>check</code> from <code>getHelpInfo()</code> (they were in help but never registered). Fixed <code>memory-map-export</code> to actually save to <code>/memory/reference.md</code> (was: print to terminal).</li> + <li>Cache: <code>2026-06-11-v4.5.43</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.41 — June 2026</span><span class="v-date">2026-06-11</span></div> + <ul> + <li><strong>Search result quality fix</strong> — Default engines changed from <code>google,bing,brave,wikipedia</code> to <code>mojeek,bing</code>. Previous default had 3/4 engines broken (Google/Brave/Wikipedia block datacenter IPs); Bing worked but returned French-localized results due to server's Amsterdam IP. <strong>Mojeek</strong> is a privacy-focused crawler-based search that returns English results regardless of server location.</li> + <li><strong>Result deduplication</strong> — <code>/api/search</code> now dedupes results by domain and <strong>prefers Mojeek</strong> over Bing (Mojeek is more relevant in this environment). Two-pass: Mojeek first, then Bing for domains not already seen.</li> + <li><strong>Verified</strong>: <code>search quantum computing</code> now returns "Quantum computing - Wikipedia" as the #1 result (was "iPhone - Apple"). <code>search how to cook risotto</code> now returns actual risotto recipes (was "Cook, les épices bio" - a French spice site).</li> + <li>Cache: <code>2026-06-11-v4.5.41</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.40 — June 2026</span><span class="v-date">2026-06-10</span></div> + <ul> + <li><strong>AI assistant POST support</strong> — <code>web_fetch</code> tool now accepts <code>method=POST</code>, <code>body</code>, and <code>content_type</code> params. AI can now fetch POST-only APIs (Hyperliquid, financial APIs) without telling the user to "use curl". POST routes through <code>/api/fetch</code>; GET still uses <code>/api/extract</code> for cleaner output.</li> + <li><strong>AI assistant error parsing</strong> — <code>web_search</code> and <code>web_fetch</code> now parse JSON errors from proxy and surface the real reason (was just "HTTP 500" with no details).</li> + <li><strong>30s frontend timeout</strong> — <code>fetch</code>, <code>extract</code>, and <code>search</code> now abort after 30s with a helpful message. Replaces 15s silent freeze. Implementation: <code>AbortController</code>.</li> + <li><strong>Loading indicator for <code>--summarize</code></strong> — Shows "⏳ AI overview will be generated (1-3s)..." before the LLM call, so user knows the terminal is alive.</li> + <li><strong>Extract follow-up hint</strong> — After <code>extract</code>, shows: "💡 Try <code>summarize <url></code> for AI summary, or <code>nvfs-resolve <concept></code> to find related files".</li> + <li><strong>Backend script/style strip</strong> — Extract's regex fallback now strips <code><script></code>, <code><style></code>, <code><noscript></code> and HTML comments. Prevents raw JS leaking into extracted text on BS4 failures.</li> + <li><strong><code>web</code> alias removed</strong> — Was a duplicate of <code>fetch</code> that didn't appear in autocomplete. Confusing. Just use <code>fetch</code>.</li> + <li>Cache: <code>2026-06-10-v4.5.40</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.39 — June 2026</span><span class="v-date">2026-06-10</span></div> + <ul> + <li><strong>POST support in <code>/api/fetch</code></strong> — Proxy was GET-only, blocking any API that requires POST (Hyperliquid <code>/info</code>, etc). Now accepts <code>method=POST&body=...&content_type=...</code> query params with 10KB body cap and method-aware cache key.</li> + <li><strong><code>fetch</code> command gains 3 flags</strong> — <code>--post=BODY</code> sends a POST request with the given body, <code>--type=CT</code> sets the Content-Type header (defaults to <code>application/json</code> if <code>--post</code> is set), <code>--raw</code> shows untruncated response. Example: <code>fetch https://api.hyperliquid.xyz/info --post='{"type":"l2Book","coin":"HYPE"}' --type=application/json</code></li> + <li><strong>Better error messages</strong> — Frontend <code>fetch</code> now parses JSON error from proxy and shows the real reason (was just "HTTP 502" with no details).</li> + <li>Cache: <code>2026-06-10-v4.5.39</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.38 — June 2026</span><span class="v-date">2026-06-10</span></div> + <ul> + <li><strong>Keyboard shortcuts</strong> — <code>Ctrl+L</code> clears the output area, <code>Ctrl+C</code> cancels the current input line (prints <code>^C</code>), <code>Ctrl+U</code> clears the input field. Standard terminal conventions now work.</li> + <li><strong>Shift+Tab cycles backward</strong> — autocomplete suggestions can be cycled in both directions.</li> + <li><strong>Send button → 48px tappable</strong> — was 31px (fails mobile/tablet tap target). Now <code>min-width: 48px; min-height: 48px</code> per Android/iOS standards.</li> + <li><strong>Autocomplete argType fixes</strong> — <code>nvfs-config</code>, <code>nvfs-alias</code>, <code>skill-list</code> now show enum values (config keys, alias actions, skill categories) instead of file paths. <code>nvfs-sync</code>/<code>nvfs-save</code>/<code>nvfs-cancel</code>/<code>nvfs-status</code> marked as <code>argType: 'none'</code> so they don't show file suggestions.</li> + <li><strong>Stale autocomplete cleared</strong> — Tab suggestions from prior input no longer linger when you start typing something new.</li> + <li><strong>History cap on startup</strong> — <code>terminal-cmd-history</code> config now applies on page load, not "next save" (which never happened).</li> + <li>Cache: <code>2026-06-10-v4.5.38</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.37 — June 2026</span><span class="v-date">2026-06-10</span></div> + <ul> + <li><strong>/skills/index.json re-index loop FIXED</strong> — <code>skill-pack-core.seed()</code> was rewriting the <code>updated</code> timestamp for all 8 core skills on every page refresh, causing NVFS to see a hash mismatch and re-queue the 7KB JSON for LLM extraction every run. Now <code>seed()</code> compares existing file content to bundled content and only writes the index if something actually changed. Eliminates the 5-concepts-from-1-file loop on every refresh.</li> + <li><strong>One-time data fix</strong> — After deploying, the existing stale <code>updated</code> timestamp in your VFS will be re-evaluated on next refresh. If it matches the bundled timestamp, the loop stops immediately. If not, one final write happens and the loop is dead thereafter.</li> + <li>Cache: <code>2026-06-10-v4.5.37</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.36 — June 2026</span><span class="v-date">2026-06-10</span></div> + <ul> + <li><strong>Deep pass output shows file paths</strong> — Was "5 LLM concepts across 1 file" (no path). Now lists up to 20 files with their concept counts. Makes it obvious if a single file keeps re-processing every refresh (loop detection).</li> + <li><strong>Auto-sync output shows file paths</strong> — Same treatment: "re-indexed N file(s)" now lists the actual paths so you can see what's looping.</li> + <li><strong>nvfs-status shows LLM/fast breakdown</strong> — Two new lines: "Fast concepts: N" and "LLM concepts: N (across M files)". Proves persistence is working without needing DevTools inspection.</li> + <li><strong>Deep pass message clearer</strong> — "added N new LLM concepts (M files). Total in index: X" — distinguishes the per-pass delta from the persisted total.</li> + <li>Cache: <code>2026-06-10-v4.5.36</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.35 — June 2026</span><span class="v-date">2026-06-10</span></div> + <ul> + <li><strong>NVFS bug fix audit (7 bugs)</strong> — Stale <code>/sys/...</code> entries from pre-v4.5.34 builds cause permanent re-index loops. <code>init()</code> now auto-purges them on first run with a one-time warning.</li> + <li><strong>Cancel responsive</strong> — <code>nvfs-cancel</code> now checks between every LLM call (was: between every batch of 3). Stop within one 30s call instead of waiting up to 90s.</li> + <li><strong>Save race fixed</strong> — <code>nvfs-save</code> and end of deep pass now await in-flight VFS save instead of clobbering the debounce flag. Prevents silent LLM concept loss on concurrent writes.</li> + <li><strong>init() now awaits VFS load</strong> — Was fire-and-forget; first <code>nvfs-status</code> could return empty even when an index existed. <code>module-manager.js</code> already awaits init(), so making it async is safe.</li> + <li><strong>Deep-mode warning shown once</strong> — Was spammy on every <code>nvfs-index</code> call. Tracked by session flag <code>_warnedAboutLLMStrip</code>.</li> + <li><strong>Tag extraction fixed</strong> — <code>_extractConcepts</code> used <code>tagMatches[0]</code> (whole match) instead of capture group, so inline <code>#tag1 #tag2</code> only captured <code>#tag1</code>. Now correctly splits on commas or captures all hash tags.</li> + <li><strong>Filter defensive</strong> — <code>_isSystemFile</code> split into clean two-check structure. <code>node_modules</code> check now uses normalized path so <code>node_modules/foo.js</code> (no leading slash) also gets filtered.</li> + <li>Cache: <code>2026-06-10-v4.5.35</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.34 — June 2026</span><span class="v-date">2026-06-10</span></div> + <ul> + <li><strong>NVFS deep index persistence</strong> — LLM-generated concepts now survive page refresh. <code>_processDeepQueue()</code> calls <code>_saveIndex()</code>. Deep concepts written to disk on completion.</li> + <li><strong>nvfs-save command</strong> — <code>nvfs-save</code> force-saves the semantic index to VFS disk immediately. Useful before hard refresh.</li> + <li><strong>Auto-sync deep mode</strong> — <code>nvfs-sync --deep</code> or <code>nvfs-config deep-index on</code> now triggers LLM analysis for dirty files, not just fast filename concepts.</li> + <li><strong>Safety guard</strong> — Running <code>nvfs-index</code> without <code>--deep</code> when saved index contains LLM concepts prints a warning: they'll be stripped from re-indexed files.</li> + <li><strong>JS Console module</strong> — New <code>js <expression></code> command evals JavaScript in page context. <code>js-run <path></code> loads and executes a VFS script file. Auto-loads at startup.</li> + <li><strong>Module registration</strong> — <code>console</code> added to packages.json, terminal.js ext loader, and skipList. Auto-loads on next refresh.</li> + <li>Cache: <code>2026-06-10-v4.5.34</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.24 — June 2026</span><span class="v-date">2026-06-08</span></div> + <ul> + <li><strong>tar / untar commands</strong> — New pure-JS tarball parser in cryptogzip.js. <code>tar <src-dir> <out.tar[.gz]></code> bundles a VFS directory; <code>untar <path.tar[.gz]> [dest-dir]</code> extracts back. Auto-detects gzip wrapper. Fixes the "downloaded newos4.tar.gz but can't extract" problem.</li> + <li><strong>Binary-safe gzip</strong> — <code>gunzip</code> now preserves binary content (was UTF-8 only). Updated to use base64 roundtrip for binary files.</li> + <li><strong>POSIX ustar format</strong> — Reads & writes standard ustar tarballs (compatible with GNU tar, BSD tar, macOS tar).</li> + <li><strong>Cheatsheet updated</strong> — Added 8 entries under 🔧 Tools for tar/untar/gzip/gunzip/encrypt/decrypt/diff/edit</li> + <li><strong>System prompt</strong> — tar/untar added to [ALL OTHERS] command list</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.23 — June 2026</span><span class="v-date">2026-06-08</span></div> + <ul> + <li><strong>Doc version sync</strong> — Help page title, overview, and footer updated to v4.5.22 to match deployed module-loader.js</li> + <li><strong>Whitepaper v4.5.22</strong> — Bumped from v4.3.0-beta; Last Updated 2026-06-08</li> + <li><strong>Deprecated module-modmgr</strong> — Removed from BUILTIN array (was duplicate of module-manager.js). Set auto_load=false, layer=deprecated. File retained for one release for rollback safety; deletion scheduled v4.6.0</li> + <li><strong>Fixed modules-index class</strong> — <code>module-loader</code> class changed from filename string <code>"module-loader.js"</code> to <code>null</code> (foundation file, not a module class)</li> + <li><strong>packages.json cleanup</strong> — Renamed <code>neural-vfs</code> to <code>neural-vfs-core</code>, category → <code>core</code>, added note that NVFS is built-in not a WPM package</li> + <li><strong>Cheatsheet coverage</strong> — Added 4 missing commands: <code>sandbox-config</code>, <code>memgraph-export</code>, <code>predictor-config</code>, <code>world-model-config</code></li> + <li><strong>Audit script fix</strong> — <code>audit-newos4-filesystem.py</code> now respects <code>skills/index.json</code> for orphan detection (no more 26 false-positive warnings on valid skill JSONs)</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5 — June 2026</span><span class="v-date">2026-06-06</span></div> + <ul> +<li><strong>Security Config CLI</strong> — <code>security-destructive</code>, <code>security-system</code>, <code>security-whitelist</code>, <code>security-flag</code> add|remove|list with localStorage persistence and boot loading</li> + <li><strong>Enhanced security command</strong> — Shows all sets (destructive, system, whitelist, flags) plus registered command count</li> + <li><strong>AI loop config</strong> — <code>ai-config max-turns|max-context|trivial-optimization</code> with persistence across sessions</li> + <li><strong>Unified config CLI</strong> — <code>config</code> command with 4 terminal tuning keys (max-lines, history, pipe-buffer), all persisted in localStorage</li> + <li><strong>Extended ai-config</strong> — New keys: <code>max-context-tokens</code>, <code>confirm-timeout</code>, <code>chat-lock-timeout</code>, <code>skill-debounce</code> with range validation</li> + <li><strong>Safe-read run_command</strong> — <code>run_command</code> now command-aware: <code>ls</code>, <code>find</code>, <code>tree</code>, <code>cat</code> auto-approved; only mutating commands require confirmation</li> + <li><strong>Whitelist expanded (50+ cmds)</strong> — find, grep, tree, head, tail, wc, sort, du, diff, which, hostname, and all BusyBox read-only utils now whitelisted</li> + <li><strong>Security-bypass fix</strong> — <code>run_command</code> AI tool now routes through <code>checkAndRun()</code> security layer instead of bypassing</li> + <li><strong>list_files root fallback</strong> — relative paths retry from root if cwd-relative lookup fails</li> + <li><strong>Confirm timeout configurable</strong> — <code>ai-config confirm-timeout <seconds></code> accepts 0+ (0 = no confirm / auto-approve all, no upper cap). Dynamic label on confirm bar shows actual timeout.</li> + <li><strong>Auto-sync Neural VFS</strong> — <code>write_file</code>/<code>mkdir</code>/<code>rm</code>/<code>mv</code>/<code>cp</code> automatically mark index dirty; auto-reindexes after 10s debounce. <code>nvfs-alias</code> command for concept aliases. Hybrid discovery fallback in <code>nvfs-resolve</code> (live VFS scan when index empty). Staleness warning in <code>nvfs-status</code> if index >4h old.</li> + <li><strong>5 modules whitelisted</strong> — system-health, server, servers, server-check, monitor run directly</li> + <li><strong>OllamaModule consolidated</strong> — Removed duplicate <code>ollamamodels</code> code path (redirects to <code>models</code>), centralized endpoint via <code>ollamaManager.endpoint</code></li> + <li><strong>Neural VFS async indexing</strong> — Chunked processing with progress percentage, no UI freeze on large VFS. Improved <code>_summarize</code> (section heading → paragraph → sentence → fallback)</li> + <li><strong>Neural VFS display-limit config</strong> — <code>nvfs-config</code> command with 4 keys (fuzzy-limit, tree-files, tree-concepts, resolve-files), persisted</li> + <li><strong>Orchestrator event bus</strong> — In-memory pub/sub for instant A2A delivery (VFS polling remains as fallback). Improved <code>_deriveCapabilities</code> with 14 keyword mappings</li> + <li><strong>Orchestrator extended config</strong> — 4 new interval keys (a2a-poll-interval, heartbeat-check, idle-sweep-interval, dead-purge-timeout) + all config now persists across sessions</li> + <li>Cache: <code>2026-06-06-v4.5.11</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.12 — June 2026</span><span class="v-date">2026-06-06</span></div> + <ul> + <li><strong>Tiered Indexing toggle</strong> — <code>nvfs-config deep-index on|off</code> switches between Fast (metadata-only, instant) and Deep (LLM-assisted, semantic) modes. Off by default. <code>nvfs-index --deep</code> or <code>nvfs-sync --deep</code> forces deep mode per-run.</li> + <li><strong>Configurable deep model</strong> — <code>nvfs-config deep-model <name></code> selects the LLM for deep indexing. Default: <code>gemma4:31b-cloud</code> for speed. Example: <code>nvfs-config deep-model gemma4:31b-cloud</code> for deeper analysis.</li> + <li><strong>Status bar indicator</strong> — Real-time 🧠 status in terminal bar: concept count + 🌊 wave for deep mode, 🟡 amber for pending auto-sync, 🧠 Deep Indexing progress percentage during LLM processing.</li> + <li><strong>nvfs-sync command</strong> — <code>nvfs-sync [--deep]</code> for incremental background sync of dirty files.</li> + <li><strong>Deep concept extraction</strong> — LLM generates 2-5 semantic concepts per file (configurable model via <code>nvfs-config deep-model</code>, default <code>gemma4:31b-cloud</code>, 2000 chars, 3-file batches with UI yield). Fast filename-concepts stored immediately, LLM concepts augment in background queue.</li> + <li><strong>nvfs-status mode display</strong> — Shows 🌊 Deep or ⚡ Fast mode.</li> + <li><strong>LLM self-healing</strong> — If Ollama disconnected, deep mode silently falls back to fast metadata-only.</li> + <li>Cache: <code>2026-06-06-v4.5.12</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.2 — June 2026</span><span class="v-date">2026-06-06</span></div> + <ul> + <li><strong>VFS Size Diagnostics</strong> — <code>vfs-size</code> shows total VFS size, top 5 largest files, and system dir sizes</li> + <li><strong>VFS Clean</strong> — <code>vfs-clean</code> / <code>vfs clean</code> — nuke snapshots, sessions, trash in one shot</li> + <li><strong>Fractal checkpoint fix</strong> — <code>checkpoint()</code> no longer deep-clones its own <code>/_snapshots/</code>, eliminating recursive bloat. Same for <code>session-save</code></li> + <li><strong>Ghost commands wired</strong> — <code>checkpoint</code>, <code>checkpoint-list</code>, <code>checkpoint-del</code>, <code>rollback</code> had help text but no handlers — now actually work</li> + <li><strong>Autocomplete fix</strong> — Built-in commands (vfs-clean, vfs-size) now appear in dropdown</li> + <li><strong>Editor→_mods bridge</strong> — <code>edit path/to/module.js</code> now mirrors to <code>_mods/</code> for test_module compatibility</li> + <li><strong>Skill WebDAV Sync</strong> — <code>skill-webdav-sync</code> pushes all skills to WebDAV as JSON files</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.5.11 — June 2026</span><span class="v-date">2026-06-06</span></div> + <ul> + <li><strong>init(terminal) fix</strong> — <code>loadModuleFromCode</code> and <code>loadModuleFromURL</code> now pass <code>this.terminal</code> to <code>init()</code>, fixing PredictorModule fatal error</li> + <li><strong>Save & Test returns value</strong> — <code>saveCodeEditor</code> checks <code>loadModuleFromCode</code> return before printing success</li> + <li><strong>StateSyncModule recovered</strong> — Extracted from backup, saved to <code>~/.hermes/scripts/</code></li> + <li><strong>PredictorModule hasSync</strong> — Feature detection for sync/recall tasks with tuned duration/turn prediction</li> + <li>Cache: <code>2026-06-06-v4.5.11</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.4 — June 2026</span><span class="v-date">2026-06-05</span></div> + <ul> + <li><strong>v4.4 complete</strong> — 46 modules, 24 skills, full A2A lifecycle, sandboxed execution, memory graph, world model, health monitoring</li> + <li><strong>A2A Mailbox Transport</strong> — <code>a2a-send</code>, <code>a2a-list</code>, 500ms polling with envelope routing (request/response/broadcast/heartbeat)</li> + <li><strong>Autonomous sub-agent spawning</strong> — auto-role derivation, sleep/reanimate VFS serialization</li> + <li><strong>Sandboxed execution</strong> — WebWorker pool <code>sandbox-run</code> (there is no <code>sandbox-kill</code>; tasks end on timeout) with inline fallback for headless</li> + <li><strong>A2A Protocol</strong> — Agent contract system: <code>contract-register</code>, <code>contract-list</code>, schema validation in orchestrator</li> + <li><strong>Self-Optimization Telemetry</strong> — <code>system-health</code> command showing tool latency, VFS stats, error rates</li> + <li><strong>AI tool: nvfs_resolve</strong> — AI can search VFS by concept</li> + <li><strong>Skills consolidated</strong> — 9 → 4 unified; index rebuilt minified</li> + <li><strong>Docs sync</strong> — vision.html and whitepaper updated</li> + <li>Cache: <code>2026-06-03-neuralvfs</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.3.2 — June 2026</span><span class="v-date">2026-06-04</span></div> + <ul> + <li><strong>mindmap svg</strong> — Inline SVG rendering with colored rects + bezier curves</li> + <li><strong>GUI Builder</strong> — <code>gui</code>, <code>gui-button</code>, <code>gui-input</code> — SimpleGUIModule registered</li> + <li><strong>mermaid.min.js</strong> — Downloaded for webx11_mindmap.html</li> + <li><strong>get_module_status fixed</strong> — Shows all 34 loaded modules (was only HTTP-loaded)</li> + <li><strong>view_module fixed</strong> — Uses modules-index.json to resolve class→file paths</li> + <li><strong>module-ollamamodels merged</strong> — Into module-ollama (13 commands total)</li> + <li><strong>concept:// URIs</strong> — <code>cat concept://skill</code> resolves via Neural VFS</li> + <li><strong>Module categorization</strong> — <code>modules-list</code> shows [core], [ext], [infra] layer tags</li> + <li><strong>5 modules whitelisted</strong> — system-health, server, servers, server-check, monitor run directly</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.3 — June 2026</span><span class="v-date">2026-06-02</span></div> + <ul> + <li><strong>WebDAV Browser</strong> — Modern file-tree UI with checkboxes, Select All, bulk actions (Delete, Move, Download), inline rename (double-click), context menu, breadcrumbs, keyboard shortcuts</li> + <li><strong>WebDAV commands</strong> — <code>webdav-browser</code>, <code>webdav-rm</code>, <code>webdav-mkdir</code>, <code>webdav-rename</code>, <code>webdav-move</code>, <code>webdav-backup</code></li> + <li><strong>Skill Pack System</strong> — Auto-loads 12 skills on startup, seed/reload support, skill-pack-core.js manages in-memory index</li> + <li><strong>Agent Orchestration</strong> — <code>agent-list</code>, <code>agent-register</code>, <code>lease-list</code>, <code>orchestrate</code> for multi-step delegation</li> + <li><strong>Security Layer</strong> — <code>security-level 0-3</code> with granular restrictions, <code>cmd-allow</code>/<code>cmd-deny</code> per-command access control</li> + <li><strong>Debug Panel</strong> — <code>debug</code> toggle shows memory, events, errors, module health</li> + <li><strong>Chat Cleanup</strong> — Removed <code>chat-setapi</code>, <code>chat-setmodel</code>, <code>chat-ask</code>; single <code>chat</code> command toggles overlay</li> + <li>Module count refactored: 18 core + 14 ext (was 25+17)</li> + <li><strong>Download fix</strong> — switched from <code>resp.text()</code> to <code>resp.blob()</code> for binary-safe downloads; same fix for image preview (FileReader DataURL)</li> + <li>Cache: <code>v=40</code> — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.2.1 — May 2026</span><span class="v-date">2026-05-27</span></div> + <ul> + <li><strong>BusyBox</strong> — 16 new utility commands: <code>which</code>, <code>env</code>, <code>date</code>, <code>cal</code>, <code>yes</code>, <code>seq</code>, <code>base64</code>, <code>printf</code>, <code>cut</code>, <code>uniq</code>, <code>hostname</code>, <code>whoami</code>, <code>basename</code>, <code>dirname</code>, <code>sleep</code>, <code>expand</code></li> + <li><strong>Shell</strong> — Full pipe (<code>|</code>), redirect (<code>></code>, <code>>></code>, <code><</code>), chain (<code>&&</code>, <code>||</code>, <code>;</code>), variable (<code>$VAR</code>), and VFS script execution (<code>script</code>)</li> + <li>Pipe-aware commands (<code>grep</code>, <code>head</code>, <code>tail</code>, <code>sort</code>, <code>wc</code>, <code>cut</code>, <code>uniq</code>, <code>expand</code>) auto-read from pipe via temp file injection</li> + <li><code>export</code>, <code>unset</code>, <code>set</code> — shell variable management</li> + <li>Multiple ASI and VFS API bug fixes (<code>fs.fsWrite</code> → <code>fs.writeFile</code> across 3 modules)</li> + <li><strong>Test Suite</strong> — 32 automated regression tests. Run with <code>load-local modules/test/test-suite.js</code> then <code>test</code>, <code>test auto</code>, or <code>test list</code></li> + <li>Cache v34 — hard refresh required</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.2 — May 2026</span><span class="v-date">2026-05-25</span></div> + <ul> + <li><strong>Editor</strong> — <code>edit <path></code> opens inline VFS editor modal</li> + <li><strong>Diff</strong> — <code>diff a b</code> LCS-based comparison + <code>diff --module</code></li> + <li><strong>Aliases</strong> — <code>ll</code>, <code>h</code>, <code>cls</code> defaults + custom alias definition</li> + <li><strong>File Finder</strong> — <code>find <query></code> recursive VFS search</li> + <li>Agent loop: capped at 8 turns (was 1), <code>edit_module</code> destructive confirmation, model auto-validation</li> + <li><code>ai-stop</code> now cancels chat + stream, not just tool calls</li> + <li>Unknown commands awaited, "Command not found" suppressed on AI route</li> + <li><code>loopResult</code> scope fix — no more undefined error on AI fail</li> + <li>Preview iframe allows JS (<code>allow-scripts</code>), cache bump <code>v=18</code></li> + <li>Splash fallback + startup modal list all 12 ext modules</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.1</span><span class="v-date">2026-05-23</span></div> + <ul> + <li>AI Agent with full tool-calling loop (28 tools)</li> + <li>Inline destructive confirmation bar with 120s countdown timer</li> + <li>Skills system (8 CLI commands + UI modal)</li> + <li>Voice input (🎤 button, SpeechRecognition, show/hide toggle)</li> + <li>Sound notification (🔊 toggle, WebAudio ding)</li> + <li>AI spinner in status bar</li> + <li>Session system (save/load/recent/stats)</li> + <li>WebDAV sync (8 commands)</li> + <li>Web search (SearXNG + DDG + URL fetch/extract)</li> + <li>Config manager (6 commands + UI)</li> + <li>Startup modules selector (⚙ gear on splash)</li> + <li>Code editor modal (module editing, save & test live)</li> + <li>HTML preview via srcdoc (mobile)</li> + <li>File/dir autocomplete, pipe support</li> + <li>Smart context profiles, dynamic prompts with variables</li> + <li>Server monitor, ChatStudio overlay</li> + <li>Modular architecture: 23 JS modules, async loader</li> + </ul> + </div> + + <div class="version-item"> + <div class="v-header"><span class="v-num">v4.0</span><span class="v-date">2026-05-20</span></div> + <ul> + <li>Monolith refactored into core/ext modules</li> + <li>Async module loader with splash screen</li> + <li>Config manager modal</li> + <li>Bootloader fix for disabled modules</li> + </ul> + </div> + </section> +</div> +</main> + +<footer> + <div class="links"> + <a href="./main.html">Launch WebX11</a> + <a href="https://ollama.com" target="_blank">Ollama</a> + </div> + <p>WebX11 v4.5.22 · 2026</p> + <p class="tagline">Happy Hacking 🖥️🤖🎤</p> +</footer> + +<a href="#" class="back-top" id="backTop">↑</a> + +<script> +/* ── Back to Top ── */ +const bt = document.getElementById('backTop'); +window.addEventListener('scroll',()=>{bt.classList.toggle('visible',window.scrollY>300)}); + +/* ── Search ── */ +function searchDocs(){ + const q=document.getElementById('search-input').value.toLowerCase().trim(); + const msg=document.getElementById('search-result-msg'); + if(!q){msg.style.display='none';return} + // Search in ALL tabs, switch to the one with results + const tabs = document.querySelectorAll('.doc-tab'); + let found = false; + tabs.forEach(tab => { + if (tab.textContent.toLowerCase().includes(q)) { + // Found a match in this tab — switch to it + const tabId = tab.id.replace('content-', 'tab-'); + const radio = document.getElementById(tabId); + if (radio) { + radio.checked = true; + radio.dispatchEvent(new Event('change')); + } + // Highlight the matching element + const sections = tab.querySelectorAll('section, .quick-ref-item, .feature-card, .callout'); + sections.forEach(s => { + if (s.textContent.toLowerCase().includes(q)) { + s.scrollIntoView({behavior:'smooth', block:'center'}); + s.style.border='2px solid var(--accent)'; s.style.borderRadius='12px'; + s.style.padding='0 20px'; s.style.transition='border .3s'; + setTimeout(() => { s.style.border='none'; s.style.padding='0'; }, 2000); + found = true; + } + }); + } + }); + if(!found){ + msg.textContent='No results for "'+q+'"'; + msg.style.display='block'; + setTimeout(()=>{msg.style.display='none'},3000); + }else{msg.style.display='none'} +} +document.getElementById('search-input').addEventListener('keypress',e=>{if(e.key==='Enter')searchDocs()}); + +/* ── Smooth scroll nav — switch to User Guide tab first ── */ +document.querySelectorAll('.nav-link').forEach(l=>{ + l.addEventListener('click',e=>{ + e.preventDefault(); + const href = l.getAttribute('href'); + // Switch to User Guide tab first + const guideTab = document.getElementById('tab-guide'); + if (guideTab) { + guideTab.checked = true; + guideTab.dispatchEvent(new Event('change')); + } + // Then scroll after a short delay so tab content becomes visible + setTimeout(() => { + const t = document.querySelector(href); + if (t) t.scrollIntoView({behavior:'smooth', block:'start'}); + }, 100); + }); +}); +/* ── Doc Tabs ── */ +document.querySelectorAll('.doc-tabs input').forEach(radio=>{ + radio.addEventListener('change',function(){ + document.querySelectorAll('.doc-tab').forEach(t=>t.classList.remove('active')); + const tab=document.getElementById('content-'+this.id.replace('tab-','')); + if(tab)tab.classList.add('active'); + localStorage.setItem('webx11_help_tab',this.id); + }); +}); +// Restore last tab +(function(){ + const saved = localStorage.getItem('webx11_help_tab'); + if(saved){ + const el = document.getElementById(saved); + if(el){ el.checked = true; el.dispatchEvent(new Event('change')); } + } +})(); + +console.log('WebX11 v4.3 Docs — Modern'); +</script> +</body> +</html> |