aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAgando <roduccomm@gmail.com>2026-06-03 06:00:40 +0200
committerAgando <roduccomm@gmail.com>2026-06-03 06:00:40 +0200
commit7a3c8e74ecbf28d7921433430023f4ccaf8426dc (patch)
treec16ae627d307990cd049a6113ab2685826c29733
parentaafb0fbde5289a45f9f818a00141f80b149be283 (diff)
auto: 2026-06-03_06:00 changes
-rw-r--r--downloads/test1
-rw-r--r--downloads/webx11_mindmap.html85
-rw-r--r--help.html3
-rw-r--r--main.html2
-rw-r--r--modules/core/module-fs.js88
-rw-r--r--modules/ext/webdav.js149
-rw-r--r--skills/agent-optimization-framework.md1
-rw-r--r--skills/index.json249
-rw-r--r--skills/macro-engine-debug.md24
-rw-r--r--skills/macro-engine-onboarding.md24
-rw-r--r--skills/mindmap-master-guide.md40
-rw-r--r--webx11_mindmap.html85
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
diff --git a/help.html b/help.html
index 1c02628..2b8a593 100644
--- a/help.html
+++ b/help.html
@@ -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>
diff --git a/main.html b/main.html
index c642891..bdfb761 100644
--- a/main.html
+++ b/main.html
@@ -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