diff options
Diffstat (limited to 'modules/core/core-bundle.js')
| -rw-r--r-- | modules/core/core-bundle.js | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/modules/core/core-bundle.js b/modules/core/core-bundle.js index 025572c..f275a1f 100644 --- a/modules/core/core-bundle.js +++ b/modules/core/core-bundle.js @@ -615,20 +615,13 @@ class VirtualFileSystem { this.root.content['.trash'] = { type: 'dir', content: {} }; } const trash = this.root.content['.trash']; - const flatten = (n, prefix) => { - if (n.type === 'file') { - const flatName = prefix + '-' + name; - let ctr = 0; - let unique = flatName; - while (trash.content[unique]) { unique = flatName + '-' + (++ctr); } - trash.content[unique] = JSON.parse(JSON.stringify(n)); - } else if (n.type === 'dir') { - for (const [childName, child] of Object.entries(n.content || {})) { - flatten(child, prefix + '-' + childName); - } - } - }; - flatten(node, ts + '-dir-' + name); + // Keep the subtree intact so it can be restored later; the old flatten loop + // turned every descendant into a sibling file and lost empty dirs entirely. + const baseName = ts + '-dir-' + name; + let unique = baseName; + let ctr = 0; + while (trash.content[unique]) { unique = baseName + '-' + (++ctr); } + trash.content[unique] = JSON.parse(JSON.stringify(node)); delete resolved.dir.content[resolved.name]; this.saveToStorage(); this._emitChange(path); @@ -5758,8 +5751,18 @@ Only output XML function calls for tool tasks. If no tool is needed, answer norm errors: [], }; try { - const raw = JSON.parse(localStorage.getItem('webx11_debug_db') || '[]'); - const list = Array.isArray(raw) ? raw : (raw.errors || []); + // Prefer the LIVE error DB: localStorage writes are debounced, so a report + // filed right after an error would otherwise carry an empty list. + let list = []; + try { + const ds = Object.values(this.terminal.moduleManager.modules) + .find(m => m && m._errorDB && m._errorDB.errors); + if (ds) list = Object.values(ds._errorDB.errors); + } catch (_e) {} + if (!list.length) { + const raw = JSON.parse(localStorage.getItem('webx11_debug_db') || '[]'); + list = Array.isArray(raw) ? raw : Object.values((raw && raw.errors) || {}); + } diag.errors = list.slice(-20).map(e => ({ message: String(e.message || e.msg || '').slice(0, 300), source: String(e.source || e.url || '').slice(0, 200), |