diff --git a/demo/aiui/index.html b/demo/aiui/index.html index bb1a78b2..241e7854 100644 --- a/demo/aiui/index.html +++ b/demo/aiui/index.html @@ -14,6 +14,31 @@ AIUI + + diff --git a/neode-ui/mock-backend.js b/neode-ui/mock-backend.js index a71b7301..2831631a 100755 --- a/neode-ui/mock-backend.js +++ b/neode-ui/mock-backend.js @@ -3626,11 +3626,21 @@ function loadDemoDiskFiles() { } walk(root, '/') if (!tree['/'].length) return // empty folder → keep the hardcoded seeds - for (const k of Object.keys(SEED_FILES)) delete SEED_FILES[k] - Object.assign(SEED_FILES, tree) - for (const k of Object.keys(SEED_FILE_CONTENTS)) delete SEED_FILE_CONTENTS[k] + // Per-folder MERGE: a top-level folder present in demo/files replaces that + // seed folder; seed folders the curator didn't provide (e.g. sample Documents) + // are kept. So dropping real Music/ doesn't wipe the sample Documents. + const provided = new Set(tree['/'].map(e => e.name)) + for (const k of Object.keys(SEED_FILES)) { + if (k !== '/' && provided.has(k.split('/')[1])) delete SEED_FILES[k] + } + for (const k of Object.keys(SEED_FILE_CONTENTS)) { + if (provided.has(k.split('/')[1])) delete SEED_FILE_CONTENTS[k] + } + const keptRoot = (SEED_FILES['/'] || []).filter(e => !provided.has(e.name)) + for (const [k, v] of Object.entries(tree)) { if (k !== '/') SEED_FILES[k] = v } + SEED_FILES['/'] = [...keptRoot, ...tree['/']] Object.assign(SEED_FILE_CONTENTS, contents) - console.log(`[Demo] Loaded curated files from demo/files (${Object.keys(diskFilePaths).length} binary, ${Object.keys(contents).length} text)`) + console.log(`[Demo] Merged curated files from demo/files (${Object.keys(diskFilePaths).length} binary, ${Object.keys(contents).length} text; folders: ${[...provided].join(', ')})`) } loadDemoDiskFiles()