feat: restore Wolai workspace navigation and assets

This commit is contained in:
Agent Board
2026-07-15 23:12:15 +08:00
parent 31a160fcc5
commit 6f9c7d3b58
48 changed files with 6734 additions and 517 deletions
@@ -46,6 +46,7 @@ export const createSidebarTreeLiveApplyRuntime = (dependencies = {}) => {
var fileTreeVisibleHydrateTimer = 0;
var fileTreeVisibleHydrateQueued = false;
var fileTreeCommandBatchRefreshParents = new Map();
var fileTreeRevealRequests = new Map();
var FILETREE_VISIBLE_EXPANDED_HYDRATE_MAX = 20;
var FILETREE_VISIBLE_EXPANDED_HYDRATE_BATCH = 2;
var FILETREE_EXPANSION_STORAGE_KEY = 'mnote.localFileTree.expandedRelativePaths.v1';
@@ -1795,32 +1796,46 @@ export const createSidebarTreeLiveApplyRuntime = (dependencies = {}) => {
ensureFileTreeLazyCacheScope();
var relativePath = normalizeFileTreeRelativePath(input.relativePath || input.relative_path || '');
var rowId = String(input.rowId || input.row_id || '').trim();
var parentChain = fileTreeParentChainForRelativePath(relativePath);
for (var index = 0; index < parentChain.length; index += 1) {
var parentRelativePath = parentChain[index];
var parentRow = fileTreeRowByRelativePath(parentRelativePath);
if (!(parentRow instanceof HTMLElement)) continue;
var button = parentRow.querySelector('[data-rust-action="toggle"]');
await getFileTreeChildren(parentRelativePath);
renderCachedFileTreeChildren(parentRow, button, parentRelativePath);
setTreeRowExpanded(parentRow, button, true);
}
var targetRow = rowId
? document.querySelector('#sidebar-file-tree-root .tree-row[data-shell-mode="filetree"][data-row-id="' + cssEscape(rowId) + '"]')
: null;
if (!(targetRow instanceof HTMLElement) && relativePath) {
targetRow = fileTreeRowByRelativePath(relativePath);
}
if (!(targetRow instanceof HTMLElement)) return false;
var targetRowId = String(targetRow.getAttribute('data-row-id') || rowId || '').trim();
if (targetRowId) {
fileTreeViewState.selectedRowIds = new Set([targetRowId]);
fileTreeViewState.focusedRowId = targetRowId;
fileTreeViewState.activeRowId = targetRowId;
}
reprojectFileTreeSelectionState();
try { targetRow.scrollIntoView({ block: 'nearest' }); } catch (_) {}
return true;
var requestKey = [rootUri, currentFileTreeScope(), relativePath, rowId].join('\n');
if (fileTreeRevealRequests.has(requestKey)) return fileTreeRevealRequests.get(requestKey);
var request = (async function() {
var parentChain = fileTreeParentChainForRelativePath(relativePath);
for (var index = 0; index < parentChain.length; index += 1) {
var parentRelativePath = parentChain[index];
var parentRow = fileTreeRowByRelativePath(parentRelativePath);
if (!(parentRow instanceof HTMLElement)) continue;
var button = parentRow.querySelector('[data-rust-action="toggle"]');
var childrenLoaded = parentRow.getAttribute('data-filetree-children-loaded') === 'true';
var expanded = parentRow.getAttribute('aria-expanded') === 'true';
if (!childrenLoaded) {
await getFileTreeChildren(parentRelativePath);
renderCachedFileTreeChildren(parentRow, button, parentRelativePath);
}
if (!expanded) {
setTreeRowExpanded(parentRow, button, true);
}
}
var targetRow = rowId
? document.querySelector('#sidebar-file-tree-root .tree-row[data-shell-mode="filetree"][data-row-id="' + cssEscape(rowId) + '"]')
: null;
if (!(targetRow instanceof HTMLElement) && relativePath) {
targetRow = fileTreeRowByRelativePath(relativePath);
}
if (!(targetRow instanceof HTMLElement)) return false;
var targetRowId = String(targetRow.getAttribute('data-row-id') || rowId || '').trim();
if (targetRowId) {
fileTreeViewState.selectedRowIds = new Set([targetRowId]);
fileTreeViewState.focusedRowId = targetRowId;
fileTreeViewState.activeRowId = targetRowId;
}
reprojectFileTreeSelectionState();
try { targetRow.scrollIntoView({ block: 'nearest' }); } catch (_) {}
return true;
})().finally(function() {
fileTreeRevealRequests.delete(requestKey);
});
fileTreeRevealRequests.set(requestKey, request);
return request;
}
function toggleChildren(row, button) {