diff options
| author | Agando <roduccomm@gmail.com> | 2026-06-03 06:00:40 +0200 |
|---|---|---|
| committer | Agando <roduccomm@gmail.com> | 2026-06-03 06:00:40 +0200 |
| commit | 7a3c8e74ecbf28d7921433430023f4ccaf8426dc (patch) | |
| tree | c16ae627d307990cd049a6113ab2685826c29733 | |
| parent | aafb0fbde5289a45f9f818a00141f80b149be283 (diff) | |
auto: 2026-06-03_06:00 changes
| -rw-r--r-- | downloads/test | 1 | ||||
| -rw-r--r-- | downloads/webx11_mindmap.html | 85 | ||||
| -rw-r--r-- | help.html | 3 | ||||
| -rw-r--r-- | main.html | 2 | ||||
| -rw-r--r-- | modules/core/module-fs.js | 88 | ||||
| -rw-r--r-- | modules/ext/webdav.js | 149 | ||||
| -rw-r--r-- | skills/agent-optimization-framework.md | 1 | ||||
| -rw-r--r-- | skills/index.json | 249 | ||||
| -rw-r--r-- | skills/macro-engine-debug.md | 24 | ||||
| -rw-r--r-- | skills/macro-engine-onboarding.md | 24 | ||||
| -rw-r--r-- | skills/mindmap-master-guide.md | 40 | ||||
| -rw-r--r-- | webx11_mindmap.html | 85 |
12 files changed, 407 insertions, 344 deletions
diff --git a/downloads/test b/downloads/test new file mode 100644 index 0000000..57881f1 --- /dev/null +++ b/downloads/test @@ -0,0 +1 @@ +test.
\ No newline at end of file diff --git a/downloads/webx11_mindmap.html b/downloads/webx11_mindmap.html new file mode 100644 index 0000000..fe7750d --- /dev/null +++ b/downloads/webx11_mindmap.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>WebX11 Semantic Mindmap</title> + <script src="mermaid.min.js"></script> + <style> + body { + background-color: #000; + color: #0f0; + font-family: 'Courier New', Courier, monospace; + margin: 0; + padding: 20px; + display: flex; + flex-direction: column; + align-items: center; + } + .header { + text-align: center; + border-bottom: 2px solid #0f0; + width: 100%; + padding-bottom: 10px; + margin-bottom: 30px; + text-shadow: 0 0 10px #0f0; + } + .mindmap-container { + width: 100%; + max-width: 1000px; + background: rgba(20, 20, 20, 0.8); + border: 1px solid #0f0; + border-radius: 15px; + padding: 20px; + box-shadow: 0 0 20px rgba(0, 255, 0, 0.2); + } + .mermaid { + background-color: transparent !important; + } + </style> +</head> +<body> + <div class="header"> + <h1>WEBX11 ARCHITECTURE MAP v1.0</h1> + <p>Neural VFS & A2A Integrated System</p> + </div> + <div class="mindmap-container"> + <pre class="mermaid"> + mindmap + root((WebX11)) + Neural_VFS + Semantic_Mapping + Conceptual_Index + Skill_Cross_Referencing + A2A_Protocol + Contract_Formalization + Input_Output_Schemas + Agent_Delegation + Self_Optimization + Telemetry_Logs + Recursive_Patching + Health_Checks + Interface + Browser_Terminal + Mobile_Optimized + Dark_Mode_UI + Core_Capabilities + File_System_Access + Web_Search_Fetch + Package_Management + </pre> + </div> + <script> + mermaid.initialize({ + startOnLoad: true, + theme: 'dark', + themeVariables: { + primaryColor: '#00ff00', + mainBkg: '#000', + nodeTextColor: '#0f0', + lineColor: '#0f0' + } + }); + </script> +</body> +</html>
\ No newline at end of file @@ -1228,7 +1228,8 @@ listmods</pre> <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>Cache: <code>skillpack1</code>/<code>chatfix1</code>/<code>webdav2</code> — hard refresh required</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> @@ -1095,7 +1095,7 @@ </script> <!-- Async dependency-ordered module loader (replaces 26 synchronous script tags) --> - <script src="modules/core/module-loader.js?v=39"></script> + <script src="modules/core/module-loader.js?v=47"></script> </body> </html> diff --git a/modules/core/module-fs.js b/modules/core/module-fs.js index b119343..160dccc 100644 --- a/modules/core/module-fs.js +++ b/modules/core/module-fs.js @@ -277,46 +277,60 @@ class FileSystemModule { } }; this.commands['upload'] = () => { document.getElementById('file-upload-input').click(); }; - this.commands['download'] = (args) => { + this.commands['download'] = async (args) => { if(!args[0]) return this.terminal.print('Usage: download <filename>', 'warning'); const fname = args[0]; const content = this.terminal.fs.readFile(fname); - if(content !== null && content !== undefined) { - const size = content.length; - const sizeStr = size > 1024 ? (size / 1024).toFixed(1) + ' KB' : size + ' B'; - // Desktop: programmatic click (works on desktop Chrome/Firefox) - const blob = new Blob([content], {type: 'application/octet-stream'}); - const url = URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; a.download = fname; - a.style.display = 'none'; - document.body.appendChild(a); - a.click(); - setTimeout(() => { document.body.removeChild(a); URL.revokeObjectURL(url); }, 2000); - // Mobile fallback: build a DOM button with real user gesture - const line = document.createElement('div'); - line.className = 'output-line'; - const msg = document.createElement('span'); - msg.textContent = '⬇ ' + fname + ' (' + sizeStr + ') '; - const btn = document.createElement('button'); - btn.textContent = '⬇ Download'; - btn.className = 'btn'; - btn.style.cssText = 'background:var(--bg-tertiary);border:1px solid var(--border-color);color:var(--success-color);padding:4px 12px;border-radius:4px;cursor:pointer;font-size:0.85em;min-height:36px;'; - btn.onclick = () => { - const b = new Blob([this.terminal.fs.readFile(fname)], {type: 'application/octet-stream'}); - const u = URL.createObjectURL(b); - const el = document.createElement('a'); - el.href = u; el.download = fname; - el.style.display = 'none'; - document.body.appendChild(el); - el.click(); - setTimeout(() => { document.body.removeChild(el); URL.revokeObjectURL(u); }, 2000); - }; - line.appendChild(msg); - line.appendChild(btn); - this.terminal.outputContainer.appendChild(line); - this.terminal.scrollToBottom(); - } else { this.terminal.print('download: ' + fname + ': No such file', 'error'); } + if(content === null || content === undefined) { + return this.terminal.print('download: ' + fname + ': No such file', 'error'); + } + // Push to WebDAV first — this is the only path to a real file download on Telegram WebView + // because browser-based file downloads are blocked in WebViews + let downloadUrl = null; + if (this.terminal.moduleManager && this.terminal.moduleManager.modules.WebDAVModule) { + const wdav = this.terminal.moduleManager.modules.WebDAVModule; + if (wdav.config && wdav.config.url) { + try { + // Make sure /downloads/ dir exists + try { await wdav._ensureDir('/downloads'); } catch(e) {} + const resp = await wdav._webdavRequest('PUT', '/downloads/' + fname, { + body: content, + headers: { 'Content-Type': 'application/octet-stream' } + }); + if (resp.ok || resp.status === 201 || resp.status === 204) { + // Build the public URL the user can tap + const baseUrl = wdav.config.url.replace(/\/+$/, ''); + const hostMatch = baseUrl.match(/^(https?:\/\/[^\/]+)/); + const host = hostMatch ? hostMatch[1] : 'https://webx11.duckdns.org'; + downloadUrl = host + '/spaces/' + wdav._spaceName + '/downloads/' + encodeURIComponent(fname); + this.terminal.print('Uploaded to: ' + downloadUrl, 'success'); + } else { + this.terminal.print('WebDAV push failed: HTTP ' + resp.status, 'warning'); + } + } catch (e) { + this.terminal.print('WebDAV push error: ' + e.message, 'warning'); + } + } else { + this.terminal.print('WebDAV not configured. Run: webdav-config', 'warning'); + } + } + // Build a visible anchor link — tap = real user gesture = native browser download bar + const size = content.length; + const sizeStr = size > 1024 ? (size / 1024).toFixed(1) + ' KB' : size + ' B'; + const line = document.createElement('div'); + line.className = 'output-line'; + line.style.cssText = 'padding:8px 0;display:flex;align-items:center;gap:10px;flex-wrap:wrap;'; + if (downloadUrl) { + line.innerHTML = '<span>⬇ ' + fname + ' (' + sizeStr + ') </span>' + + '<a href="' + downloadUrl + '" target="_blank" rel="noopener" ' + + 'style="background:var(--success-color);color:#000;border:none;padding:8px 16px;' + + 'border-radius:6px;cursor:pointer;font-size:0.9em;min-height:44px;' + + 'display:inline-flex;align-items:center;text-decoration:none;font-weight:bold;">⬇ Tap to download</a>'; + } else { + line.innerHTML = '<span>⬇ ' + fname + ' (' + sizeStr + ') — run <code>webdav-config</code> first to enable downloads</span>'; + } + this.terminal.outputContainer.appendChild(line); + this.terminal.scrollToBottom(); }; this.commands['vfs-export'] = () => { const data = this.terminal.fs.root; diff --git a/modules/ext/webdav.js b/modules/ext/webdav.js index eea513b..01856ce 100644 --- a/modules/ext/webdav.js +++ b/modules/ext/webdav.js @@ -24,6 +24,27 @@ class WebDAVModule { return ''; } + _detectSessionUser() { + try { + const cookies = document.cookie.split(';').map(c => c.trim()); + for (const c of cookies) { + if (c.startsWith('webx11_user=')) { + return decodeURIComponent(c.substring('webx11_user='.length)); + } + } + } catch (e) {} + return null; + } + + _promptForToken(spaceName) { + // Use textarea+execCommand for mobile WebView compatibility + const input = window.prompt('Enter your WebDAV token for space "' + spaceName + '":', ''); + if (input && input.trim()) { + return input.trim(); + } + return null; + } + requirements() { const cfg = localStorage.getItem('webx11_webdav_config'); if (!cfg) return { met: false, missing: ['WebDAV endpoint not configured. Use webdav-config to set it up.'] }; @@ -59,24 +80,33 @@ class WebDAVModule { const saved = localStorage.getItem(this._STORAGE_KEY); if (saved) { this.config = JSON.parse(saved); - // Try to get password from SecretVault + // Try to get password from SecretVault (async — will be resolved on first use) if (window.webx11_secretVault && this.config && this.config.username) { - let encryptedPass = window.webx11_secretVault.decrypt('webdav_pass_' + this.config.username); - if (encryptedPass !== null && encryptedPass !== undefined) { - this.config.password = encryptedPass; - } else { - // Fallback to old token key - encryptedPass = window.webx11_secretVault.decrypt('webdav_token_' + this.config.username); - if (encryptedPass !== null && encryptedPass !== undefined) { - this.config.password = encryptedPass; - } - } + // Store a placeholder; actual decrypt happens on first auth call + this._cachedPassUser = this.config.username; + } + } + } catch (e) { /* ignore */ } + } + + async _resolvePassword() { + if (!window.webx11_secretVault || !this._cachedPassUser) return; + try { + const pass = await window.webx11_secretVault.decrypt('webdav_pass_' + this._cachedPassUser); + if (pass !== null && typeof pass === 'string') { + this.config.password = pass; + } else { + // Fallback to old token key + const tokenPass = await window.webx11_secretVault.decrypt('webdav_token_' + this._cachedPassUser); + if (tokenPass !== null && typeof tokenPass === 'string') { + this.config.password = tokenPass; } } } catch (e) { /* ignore */ } + this._cachedPassUser = null; } - _saveConfig() { + async _saveConfig() { try { if (this.config) { const toStore = { @@ -85,14 +115,13 @@ class WebDAVModule { }; // Try SecretVault for encrypted password storage if (window.webx11_secretVault && this.config.password) { - window.webx11_secretVault.encrypt('webdav_pass_' + this.config.username, this.config.password); + await window.webx11_secretVault.encrypt('webdav_pass_' + this.config.username, this.config.password); // Also store space token if (this._spaceName) { - window.webx11_secretVault.encrypt('webdav_token_' + this._spaceName, this.config.password); + await window.webx11_secretVault.encrypt('webdav_token_' + this._spaceName, this.config.password); } } - // Also store in localStorage for backward compat (SecretVault decrypts later) - // Store only url and username hint in plaintext lS, encrypted password handled above + // Also store in localStorage for backward compat (url and username only) localStorage.setItem(this._STORAGE_KEY, JSON.stringify(toStore)); } else { localStorage.removeItem(this._STORAGE_KEY); @@ -110,6 +139,10 @@ class WebDAVModule { if (!this.config || !this.config.url) { throw new Error('WebDAV not configured. Use webdav-config first.'); } + // Resolve password from SecretVault if needed (lazy load) + if (this._cachedPassUser) { + await this._resolvePassword(); + } const baseUrl = this.config.url.replace(/\/+$/, ''); const urlPath = path ? (path.startsWith('/') ? path : '/' + path) : '/'; const url = baseUrl + urlPath; @@ -372,7 +405,12 @@ class WebDAVModule { // Check SecretVault first if (window.webx11_secretVault) { - token = window.webx11_secretVault.decrypt('webdav_token_' + spaceName); + const vaultToken = window.webx11_secretVault.decrypt('webdav_token_' + spaceName); + if (vaultToken && typeof vaultToken.then === 'function') { + token = await vaultToken; + } else if (vaultToken !== null && vaultToken !== undefined) { + token = vaultToken; + } } // Fallback to localStorage @@ -380,18 +418,30 @@ class WebDAVModule { token = localStorage.getItem('webx11_spaces_' + spaceName); } - // Fallback: fetch .token directly from server + // If still no token, use session-aware prompting if (!token) { - try { - const tokenResp = await fetch('/spaces/' + spaceName + '/.token'); - if (tokenResp.ok) { - token = (await tokenResp.text()).trim(); - // Cache in SecretVault for future use - if (window.webx11_secretVault) { - window.webx11_secretVault.encrypt('webdav_token_' + spaceName, token); - } - } - } catch (e) { /* .token not accessible */ } + const sessionUser = self._detectSessionUser(); + if (sessionUser && sessionUser === spaceName) { + self.terminal.print('👋 Welcome back, ' + sessionUser + '!', 'success'); + self.terminal.print('No saved WebDAV config found. Enter your token:', 'info'); + } else if (sessionUser) { + self.terminal.print('👋 You are logged in as "' + sessionUser + '" — this space is "' + spaceName + '".', 'info'); + self.terminal.print('Enter the WebDAV token for space "' + spaceName + '":', 'info'); + } else { + self.terminal.print('No saved WebDAV config found for space "' + spaceName + '".', 'info'); + self.terminal.print('Enter the WebDAV token (get it from the WebX11 dashboard):', 'info'); + } + self.terminal.print('', 'text-muted'); + self.terminal.print(' webdav-config ' + autoUrl + ' ' + spaceName + ' <your-token>', 'success'); + self.terminal.print('', 'text-muted'); + // Pre-configure URL + username so user only needs token + self.config = { + url: autoUrl, + username: spaceName, + password: '' + }; + await self._saveConfig(); + return; } if (token) { @@ -400,7 +450,7 @@ class WebDAVModule { username: spaceName, password: token }; - self._saveConfig(); + await self._saveConfig(); self._autoConfigured = true; self.terminal.print('Auto-configured WebDAV for space: ' + spaceName, 'success'); try { @@ -413,7 +463,7 @@ class WebDAVModule { } } else { self.terminal.print('No WebDAV token found for space: ' + spaceName, 'warning'); - self.terminal.print('Get your token from /spaces/' + spaceName + '/.token or the dashboard.', 'info'); + self.terminal.print('Get your token from the WebX11 dashboard.', 'info'); self.terminal.print('Auto-setting URL: ' + autoUrl, 'info'); self.terminal.print('Then configure with: webdav-config ' + autoUrl + ' ' + spaceName + ' <your-token>', 'info'); // At minimum set the URL @@ -422,7 +472,7 @@ class WebDAVModule { username: spaceName, password: '' }; - self._saveConfig(); + await self._saveConfig(); self._autoConfigured = true; } return; @@ -434,7 +484,7 @@ class WebDAVModule { username: args[1] || (self.config ? self.config.username : ''), password: args[2] || (self.config ? self.config.password : '') }; - self._saveConfig(); + await self._saveConfig(); self.terminal.print('Testing WebDAV connection...', 'info'); try { const resp = await self._webdavRequest('OPTIONS', '/'); @@ -447,11 +497,15 @@ class WebDAVModule { }; // --- webdav-status: show current WebDAV config --- - this.commands['webdav-status'] = () => { + this.commands['webdav-status'] = async () => { if (!self.config || !self.config.url) { self.terminal.print('WebDAV not configured. Use webdav-config <url> [username] [password]', 'warning'); return; } + // Resolve password from SecretVault if needed + if (self._cachedPassUser) { + await self._resolvePassword(); + } self.terminal.print('WebDAV Status:', 'text-muted'); self.terminal.print(' URL: ' + self.config.url); self.terminal.print(' User: ' + (self.config.username || '(none)')); @@ -1197,24 +1251,31 @@ class WebDAVModule { async previewWebdavFile(entry) { try { - var resp = await this._webdavRequest('GET', entry.href); + var basePath = (this._browsingPath || '/').replace(/\/+$/, ''); + var fullPath = basePath + '/' + entry.name; + var resp = await this._webdavRequest('GET', fullPath); if (!resp.ok) { this.terminal.print('Failed to fetch: HTTP ' + resp.status, 'error'); return; } - var content = await resp.text(); var isHtml = entry.name.match(/\.html?$/i); var isImage = entry.name.match(/\.(png|jpg|jpeg|gif|svg|webp)$/i); - var size = content.length; + var size = parseInt(resp.headers.get('content-length') || '0'); if (size > 512000 && !isHtml && !isImage) { // Large non-html file — offer download instead this.terminal.print(entry.name + ' is ' + this._formatSize(size) + ' — double-click to download instead of preview.', 'warning'); + var textPreview = await resp.text(); this.terminal.print('--- ' + entry.name + ' (first 2000 chars) ---'); - this.terminal.print(content.substring(0, 2000)); - if (content.length > 2000) this.terminal.print('...(truncated ' + this._formatSize(size) + ' total)'); + this.terminal.print(textPreview.substring(0, 2000)); + if (textPreview.length > 2000) this.terminal.print('...(truncated ' + this._formatSize(size) + ' total)'); return; } if (isImage) { - var dataUrl = 'data:image/' + (entry.name.split('.').pop()) + ';base64,' + btoa(unescape(encodeURIComponent(content))); + var blob = await resp.blob(); + var dataUrl = await new Promise(function(resolve) { + var reader = new FileReader(); + reader.onloadend = function() { resolve(reader.result); }; + reader.readAsDataURL(blob); + }); // Use preview modal var previewTitle = document.getElementById('preview-title'); var previewIframe = document.getElementById('preview-iframe'); @@ -1227,6 +1288,7 @@ class WebDAVModule { } if (isHtml) { + var content = await resp.text(); var previewTitle = document.getElementById('preview-title'); var previewIframe = document.getElementById('preview-iframe'); if (previewTitle && previewIframe) { @@ -1238,7 +1300,8 @@ class WebDAVModule { } // Text file — print to terminal - this.terminal.print('--- ' + entry.name + ' (' + this._formatSize(size) + ') ---', 'info'); + var content = await resp.text(); + this.terminal.print('--- ' + entry.name + ' (' + this._formatSize(content.length) + ') ---', 'info'); this.terminal.print(content); this.terminal.print('--- End: ' + entry.name + ' ---', 'text-muted'); } catch (e) { @@ -1286,8 +1349,8 @@ class WebDAVModule { var fullPath = basePath + '/' + entry.name; var resp = await this._webdavRequest('GET', fullPath); if (!resp.ok) { this.terminal.print('Download failed: HTTP ' + resp.status, 'error'); return; } - var content = await resp.text(); - var blob = new Blob([content], { type: 'application/octet-stream' }); + // Use blob() instead of text() to preserve binary data + var blob = await resp.blob(); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; @@ -1299,7 +1362,7 @@ class WebDAVModule { document.body.removeChild(a); URL.revokeObjectURL(url); }, 200); - this.terminal.print('⬇ Downloaded: ' + entry.name + ' (' + this._formatSize(content.length) + ')', 'success'); + this.terminal.print('⬇ Downloaded: ' + entry.name + ' (' + this._formatSize(blob.size) + ')', 'success'); } catch (e) { this.terminal.print('Download error: ' + e.message, 'error'); } diff --git a/skills/agent-optimization-framework.md b/skills/agent-optimization-framework.md index 78a143d..52c10b1 100644 --- a/skills/agent-optimization-framework.md +++ b/skills/agent-optimization-framework.md @@ -2,6 +2,7 @@ name: agent-optimization-framework description: System for reducing tool-call latency and increasing agentic precision through programmatic workflows. tags: [optimization, agentic-workflow, efficiency, tool-calls] +category: system --- # Agent Optimization Framework diff --git a/skills/index.json b/skills/index.json index a1254ae..4b168ca 100644 --- a/skills/index.json +++ b/skills/index.json @@ -1,248 +1 @@ -{ - "navigating-the-terminal": { - "name": "navigating-the-terminal", - "description": "How to explore the WebX11 terminal, find commands, check status, and navigate the filesystem", - "tags": [ - "terminal", - "navigation", - "help", - "filesystem" - ], - "category": "system", - "created": "2026-06-02T13:19:44.542Z", - "updated": "2026-06-02T13:19:44.542Z" - }, - "memory-and-profile": { - "name": "memory-and-profile", - "description": "How to use the user profile system, session memory, and pattern tracking for persistent context", - "tags": [ - "memory", - "profile", - "session", - "persistence" - ], - "category": "system", - "created": "2026-06-02T13:19:44.542Z", - "updated": "2026-06-02T13:19:44.542Z" - }, - "web-search-and-fetch": { - "name": "web-search-and-fetch", - "description": "How to search the web and fetch URL content using the WebX11 proxy API", - "tags": [ - "search", - "fetch", - "web", - "proxy", - "api" - ], - "category": "research", - "created": "2026-06-02T13:19:44.542Z", - "updated": "2026-06-02T13:19:44.542Z" - }, - "module-management": { - "name": "module-management", - "description": "How to view, edit, test, reload modules and manage startup configuration", - "tags": [ - "modules", - "editing", - "code", - "self-improvement" - ], - "category": "dev", - "created": "2026-06-02T13:19:44.542Z", - "updated": "2026-06-02T13:19:44.542Z" - }, - "system-maintenance": { - "name": "system-maintenance", - "description": "How to reset, troubleshoot, and maintain the WebX11 terminal", - "tags": [ - "system", - "maintenance", - "reset", - "troubleshoot", - "config" - ], - "category": "system", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "backup-and-restore": { - "name": "backup-and-restore", - "description": "How to backup, restore, and export WebX11 data", - "tags": [ - "backup", - "restore", - "export", - "import", - "persistence" - ], - "category": "system", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "mindmap-workflow": { - "name": "mindmap-workflow", - "description": "How to create, view, edit, and manage brainstorming mindmaps", - "tags": [ - "mindmap", - "brainstorming", - "planning", - "organization" - ], - "category": "productivity", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "skills-system-guide": { - "name": "skills-system-guide", - "description": "How to use the skills system: load, create, patch, list, and audit skills for persistent procedural memory", - "tags": [ - "skills", - "system", - "meta" - ], - "category": "system", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "agent-orchestration": { - "name": "agent-orchestration", - "description": "How to use the agent registry, leases, and orchestrator for multi-agent workflows", - "tags": [ - "agents", - "orchestration", - "delegation", - "leases" - ], - "category": "system", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "debug-panel-and-logs": { - "name": "debug-panel-and-logs", - "description": "How to use the debug panel, session logging, and terminal diagnostics", - "tags": [ - "debug", - "logging", - "diagnostics", - "troubleshooting" - ], - "category": "system", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "webdav-operations": { - "name": "webdav-operations", - "description": "How to use WebDAV cloud storage for backup, file sync, and remote file access", - "tags": [ - "webdav", - "cloud", - "backup", - "sync", - "storage" - ], - "category": "system", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "security-and-safety": { - "name": "security-and-safety", - "description": "How to use WebX11 security levels, command blocking, and safety features", - "tags": [ - "security", - "safety", - "blocking", - "permissions" - ], - "category": "system", - "created": "2026-06-02T13:19:44.543Z", - "updated": "2026-06-02T13:19:44.543Z" - }, - "mindmap-user-guide": { - "name": "mindmap-user-guide", - "description": "How to create, view, and manage brainstorming mindmaps using the mindmap terminal module", - "tags": [ - "mindmap", - "brainstorming", - "organization", - "planning" - ], - "category": "productivity", - "created": "2026-06-02T13:20:28.672Z", - "updated": "2026-06-02T13:20:28.672Z" - }, - "bug-tracker": { - "name": "bug-tracker", - "description": "Systematic workflow for tracking bugs using a JSON log file in the VFS.", - "tags": [ - "dev", - "debugging", - "management", - "workflow" - ], - "category": "dev", - "created": "2026-06-02T10:10:44.447Z", - "updated": "2026-06-02T10:10:44.447Z" - }, - "task-manager": { - "name": "task-manager", - "description": "A systematic workflow for tracking and managing tasks via a VFS JSON store.", - "tags": [ - "productivity", - "tasks", - "vfs" - ], - "category": "productivity", - "created": "2026-06-02T10:12:44.476Z", - "updated": "2026-06-02T10:12:44.476Z" - }, - "agent-optimization-framework": { - "name": "agent-optimization-framework", - "description": "", - "tags": [ - "optimization", - "agentic-workflow", - "efficiency", - "tool-calls" - ], - "category": "system", - "created": "2026-05-29T14:52:23.451Z", - "updated": "2026-05-29T14:52:23.451Z" - }, - "macro-engine-debug": { - "name": "macro-engine-debug", - "description": "", - "tags": [ - "debug", - "a-repair", - "macro" - ], - "category": "system", - "created": "2026-05-29T15:06:24.057Z", - "updated": "2026-05-29T15:06:24.057Z" - }, - "macro-engine-onboarding": { - "name": "macro-engine-onboarding", - "description": "", - "tags": [ - "onboarding", - "context", - "macro" - ], - "category": "system", - "created": "2026-05-29T15:06:24.064Z", - "updated": "2026-05-29T15:06:24.064Z" - }, - "project-profile-manager": { - "name": "project-profile-manager", - "description": "", - "tags": [ - "context", - "memory", - "workspace" - ], - "category": "system", - "created": "2026-05-29T15:08:44.897Z", - "updated": "2026-05-29T15:08:44.897Z" - } -}
\ No newline at end of file +{"navigating-the-terminal":{"name":"navigating-the-terminal","description":"How to explore the WebX11 terminal, find commands, check status, and navigate the filesystem","tags":["terminal","navigation","help","filesystem"],"category":"system","created":"2026-06-02T22:07:32.333Z","updated":"2026-06-02T22:07:32.333Z"},"memory-and-profile":{"name":"memory-and-profile","description":"How to use the user profile system, session memory, and pattern tracking for persistent context","tags":["memory","profile","session","persistence"],"category":"system","created":"2026-06-02T22:07:32.333Z","updated":"2026-06-02T22:07:32.333Z"},"web-search-and-fetch":{"name":"web-search-and-fetch","description":"How to search the web and fetch URL content using the WebX11 proxy API","tags":["search","fetch","web","proxy","api"],"category":"research","created":"2026-06-02T22:07:32.334Z","updated":"2026-06-02T22:07:32.334Z"},"module-management":{"name":"module-management","description":"How to view, edit, test, reload modules and manage startup configuration","tags":["modules","editing","code","self-improvement"],"category":"dev","created":"2026-06-02T22:07:32.334Z","updated":"2026-06-02T22:07:32.334Z"},"system-maintenance":{"name":"system-maintenance","description":"How to reset, troubleshoot, and maintain the WebX11 terminal","tags":["system","maintenance","reset","troubleshoot","config"],"category":"system","created":"2026-06-02T22:07:32.334Z","updated":"2026-06-02T22:07:32.334Z"},"backup-and-restore":{"name":"backup-and-restore","description":"How to backup, restore, and export WebX11 data","tags":["backup","restore","export","import","persistence"],"category":"system","created":"2026-06-02T22:07:32.334Z","updated":"2026-06-02T22:07:32.334Z"},"mindmap-workflow":{"name":"mindmap-workflow","description":"How to create, view, edit, and manage brainstorming mindmaps","tags":["mindmap","brainstorming","planning","organization"],"category":"productivity","created":"2026-06-02T22:07:32.334Z","updated":"2026-06-02T22:07:32.334Z"},"skills-system-guide":{"name":"skills-system-guide","description":"How to use the skills system: load, create, patch, list, and audit skills for persistent procedural memory","tags":["skills","system","meta"],"category":"system","created":"2026-06-02T22:07:32.334Z","updated":"2026-06-02T22:07:32.334Z"},"agent-orchestration":{"name":"agent-orchestration","description":"How to use the agent registry, leases, and orchestrator for multi-agent workflows","tags":["agents","orchestration","delegation","leases"],"category":"system","created":"2026-06-02T22:07:32.335Z","updated":"2026-06-02T22:07:32.335Z"},"debug-panel-and-logs":{"name":"debug-panel-and-logs","description":"How to use the debug panel, session logging, and terminal diagnostics","tags":["debug","logging","diagnostics","troubleshooting"],"category":"system","created":"2026-06-02T22:07:32.335Z","updated":"2026-06-02T22:07:32.335Z"},"webdav-operations":{"name":"webdav-operations","description":"How to use WebDAV cloud storage for backup, file sync, and remote file access","tags":["webdav","cloud","backup","sync","storage"],"category":"system","created":"2026-06-02T22:07:32.335Z","updated":"2026-06-02T22:07:32.335Z"},"security-and-safety":{"name":"security-and-safety","description":"How to use WebX11 security levels, command blocking, and safety features","tags":["security","safety","blocking","permissions"],"category":"system","created":"2026-06-02T22:07:32.335Z","updated":"2026-06-02T22:07:32.335Z"},"mindmap-user-guide":{"name":"mindmap-user-guide","description":"How to create, view, and manage brainstorming mindmaps using the mindmap terminal module","tags":["mindmap","brainstorming","organization","planning"],"category":"productivity","created":"2026-06-02T13:20:28.672Z","updated":"2026-06-02T13:20:28.672Z"},"bug-tracker":{"name":"bug-tracker","description":"Systematic workflow for tracking bugs using a JSON log file in the VFS.","tags":["dev","debugging","management","workflow"],"category":"dev","created":"2026-06-02T10:10:44.447Z","updated":"2026-06-02T10:10:44.447Z"},"task-manager":{"name":"task-manager","description":"A systematic workflow for tracking and managing tasks via a VFS JSON store.","tags":["productivity","tasks","vfs"],"category":"productivity","created":"2026-06-02T10:12:44.476Z","updated":"2026-06-02T10:12:44.476Z"},"agent-optimization-framework":{"name":"agent-optimization-framework","description":"","tags":["optimization","agentic-workflow","efficiency","tool-calls"],"category":"system","created":"2026-05-29T14:52:23.451Z","updated":"2026-05-29T14:52:23.451Z"},"macro-engine-debug":{"name":"macro-engine-debug","description":"","tags":["debug","a-repair","macro"],"category":"system","created":"2026-05-29T15:06:24.057Z","updated":"2026-05-29T15:06:24.057Z"},"macro-engine-onboarding":{"name":"macro-engine-onboarding","description":"","tags":["onboarding","context","macro"],"category":"system","created":"2026-05-29T15:06:24.064Z","updated":"2026-05-29T15:06:24.064Z"},"project-profile-manager":{"name":"project-profile-manager","description":"","tags":["context","memory","workspace"],"category":"system","created":"2026-05-29T15:08:44.897Z","updated":"2026-05-29T15:08:44.897Z"}}
\ No newline at end of file diff --git a/skills/macro-engine-debug.md b/skills/macro-engine-debug.md index cd43a29..e8cc662 100644 --- a/skills/macro-engine-debug.md +++ b/skills/macro-engine-debug.md @@ -1,10 +1,20 @@ --- name: macro-engine-debug -description: A compound operation to audit, view, and test a module in one logical flow. -steps: - 1. Call get_module_status to identify if the module is loaded/modified. - 2. Call view_module(name) to analyze the source. - 3. Call run_command('test-module <name>') or similar health checks. - 4. Synthesize a health report. -tags: [debug, a-repair, macro] +description: A compound operation sequence to audit, view, and test a module for stability and correctness. +tags: [debug, a-repair, macro, development] +category: dev --- + +# Macro Engine Debug + +## 🎯 Objective +Rapidly diagnose issues within a loaded module by combining status checks, source analysis, and live testing. + +## 🛠️ Execution Steps +1. **Status Check:** Call `get_module_status` to identify if the module is currently loaded, modified, or has a remote URL mismatch. +2. **Source Analysis:** Call `view_module(name)` to examine the current implementation logic. +3. **Live Testing:** Use `test_module(name)` to load the edited version from `/_mods/` and verify the fix. +4. **Synthesis:** Compare the test results with the original bug report to confirm the resolution. + +## 🔄 Workflow +`get_module_status` ➔ `view_module` ➔ `test_module` ➔ `report` diff --git a/skills/macro-engine-onboarding.md b/skills/macro-engine-onboarding.md index 46c2677..669d665 100644 --- a/skills/macro-engine-onboarding.md +++ b/skills/macro-engine-onboarding.md @@ -1,10 +1,20 @@ --- name: macro-engine-onboarding -description: A rapid context-recovery sequence to understand current session state. -steps: - 1. Call session_recent(3) to see previous work. - 2. Call list_files('') to see current root state. - 3. Call load_skills('current-task') to find relevant procedures. - 4. Call user_list to check for project-specific flags. -tags: [onboarding, context, macro] +description: A rapid context-recovery sequence to align the AI with the current session state and active projects. +tags: [onboarding, context, recovery, macro] +category: system --- + +# Macro Engine Onboarding + +## 🎯 Objective +Efficiently recover state and context at the start of a session to avoid redundant queries and minimize hallucinations. + +## 🛠️ Execution Steps +1. **Session Review:** Call `session_recent(3)` to identify the last active tasks and their outcomes. +2. **VFS Snapshot:** Call `list_files('')` to examine the root directory for new project files or configuration changes. +3. **Procedure Retrieval:** Call `load_skills('current-task')` to see if any stored procedures are applicable to the immediate goal. +4. **User Preferences:** Call `user_list` to check for project-specific flags or persistent preferences (e.g., preferred models, project paths). + +## 🔄 Workflow +`session_recent` ➔ `list_files` ➔ `load_skills` ➔ `user_list` diff --git a/skills/mindmap-master-guide.md b/skills/mindmap-master-guide.md new file mode 100644 index 0000000..83cebd2 --- /dev/null +++ b/skills/mindmap-master-guide.md @@ -0,0 +1,40 @@ +--- +name: mindmap-master-guide +description: Comprehensive guide to creating, managing, and exporting brainstorming mindmaps using the mindmap terminal module. +tags: [mindmap, brainstorming, planning, organization, visualization] +category: productivity +--- +## Core Workflow + +1. **Initialization** + - `mindmap new "<topic>" -t tag1,tag2` — Creates a root node. + - Tags are optional (e.g., planning, research, dev). + - The root node is auto-assigned a color from the 7-color palette. + +2. **Expansion (Adding Nodes)** + - `mindmap add <parent-id> "<idea>" -t tag` — Adds a child node to a specific parent. + - To find the `parent-id`, use `mindmap show`. IDs are 4-character random strings (e.g., `a3f8`). + +3. **Visualization** + - `mindmap show` — Displays the full tree using Unicode box-drawing. + - `mindmap show <id>` — Displays a subtree starting from the specified node. + +4. **Refinement (Editing)** + - `mindmap rename <id> "<new text>"` — Changes the node text. + - `mindmap color <id> <color>` — Sets node color (`red`, `green`, `yellow`, `blue`, `cyan`, `magenta`, `white`). + - `mindmap tag <id> <tag>` — Assigns or updates a tag for the node. + +5. **Persistence & Storage** + - `mindmap save <name>` — Saves the current map to localStorage. + - `mindmap load <name>` — Restores a saved map. + - `mindmap list` — Lists all saved mindmaps. + - `mindmap delete <name>` — Removes a saved map from storage. + +6. **Exporting** + - `mindmap export [id]` — Generates a Markdown bullet list of the map (or specific subtree), automatically copying the result to the clipboard. + +## Use Cases +- **Brainstorming:** Map out feature sets, project architectures, or conceptual ideas. +- **Planning:** Decompose complex tasks into manageable sub-tasks. +- **Organization:** Structure research findings or user requirements. +- **Trigger Phrases:** Use when the user mentions "brainstorm", "diagram", "organize thoughts", "plan", or "map out". diff --git a/webx11_mindmap.html b/webx11_mindmap.html new file mode 100644 index 0000000..fe7750d --- /dev/null +++ b/webx11_mindmap.html @@ -0,0 +1,85 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>WebX11 Semantic Mindmap</title> + <script src="mermaid.min.js"></script> + <style> + body { + background-color: #000; + color: #0f0; + font-family: 'Courier New', Courier, monospace; + margin: 0; + padding: 20px; + display: flex; + flex-direction: column; + align-items: center; + } + .header { + text-align: center; + border-bottom: 2px solid #0f0; + width: 100%; + padding-bottom: 10px; + margin-bottom: 30px; + text-shadow: 0 0 10px #0f0; + } + .mindmap-container { + width: 100%; + max-width: 1000px; + background: rgba(20, 20, 20, 0.8); + border: 1px solid #0f0; + border-radius: 15px; + padding: 20px; + box-shadow: 0 0 20px rgba(0, 255, 0, 0.2); + } + .mermaid { + background-color: transparent !important; + } + </style> +</head> +<body> + <div class="header"> + <h1>WEBX11 ARCHITECTURE MAP v1.0</h1> + <p>Neural VFS & A2A Integrated System</p> + </div> + <div class="mindmap-container"> + <pre class="mermaid"> + mindmap + root((WebX11)) + Neural_VFS + Semantic_Mapping + Conceptual_Index + Skill_Cross_Referencing + A2A_Protocol + Contract_Formalization + Input_Output_Schemas + Agent_Delegation + Self_Optimization + Telemetry_Logs + Recursive_Patching + Health_Checks + Interface + Browser_Terminal + Mobile_Optimized + Dark_Mode_UI + Core_Capabilities + File_System_Access + Web_Search_Fetch + Package_Management + </pre> + </div> + <script> + mermaid.initialize({ + startOnLoad: true, + theme: 'dark', + themeVariables: { + primaryColor: '#00ff00', + mainBkg: '#000', + nodeTextColor: '#0f0', + lineColor: '#0f0' + } + }); + </script> +</body> +</html>
\ No newline at end of file |