From b9b51cd3fe9722ac8bd88d96b69debbf0db2a7ba Mon Sep 17 00:00:00 2001 From: Jonah Schulte Date: Wed, 11 Feb 2026 10:17:20 -0500 Subject: [PATCH] fix: address PR review feedback for CLI --custom-content config - Use module display name in sources (name: moduleMeta.name || code) - Add null guard for empty module.yaml (yaml.parse returns null) - Remove unused paths property to match promptCustomContentSource shape --- tools/cli/lib/ui.js | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/tools/cli/lib/ui.js b/tools/cli/lib/ui.js index 4c191b9b2..48de61146 100644 --- a/tools/cli/lib/ui.js +++ b/tools/cli/lib/ui.js @@ -305,6 +305,7 @@ class UI { // Build custom content config similar to promptCustomContentSource const customPaths = []; const selectedModuleIds = []; + const selectedModuleMetas = []; for (const customPath of paths) { const expandedPath = this.expandUserPath(customPath); @@ -326,6 +327,11 @@ class UI { continue; } + if (!moduleMeta) { + await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml is empty`); + continue; + } + if (!moduleMeta.code) { await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml missing 'code' field`); continue; @@ -333,16 +339,20 @@ class UI { customPaths.push(expandedPath); selectedModuleIds.push(moduleMeta.code); + selectedModuleMetas.push(moduleMeta); } if (customPaths.length > 0) { - const sources = customPaths.map((p, i) => ({ path: p, id: selectedModuleIds[i], name: selectedModuleIds[i] })); + const sources = customPaths.map((p, i) => ({ + path: p, + id: selectedModuleIds[i], + name: selectedModuleMetas[i].name || selectedModuleIds[i], + })); customModuleResult = { selectedCustomModules: selectedModuleIds, customContentConfig: { hasCustomContent: true, selected: true, - paths: customPaths, sources: sources, selectedFiles: customPaths.map((p) => path.join(p, 'module.yaml')), selectedModuleIds: selectedModuleIds, @@ -450,6 +460,7 @@ class UI { // Build custom content config similar to promptCustomContentSource const customPaths = []; const selectedModuleIds = []; + const selectedModuleMetas = []; for (const customPath of paths) { const expandedPath = this.expandUserPath(customPath); @@ -471,6 +482,11 @@ class UI { continue; } + if (!moduleMeta) { + await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml is empty`); + continue; + } + if (!moduleMeta.code) { await prompts.log.warn(`Skipping custom content path: ${customPath} - module.yaml missing 'code' field`); continue; @@ -478,14 +494,18 @@ class UI { customPaths.push(expandedPath); selectedModuleIds.push(moduleMeta.code); + selectedModuleMetas.push(moduleMeta); } if (customPaths.length > 0) { - const sources = customPaths.map((p, i) => ({ path: p, id: selectedModuleIds[i], name: selectedModuleIds[i] })); + const sources = customPaths.map((p, i) => ({ + path: p, + id: selectedModuleIds[i], + name: selectedModuleMetas[i].name || selectedModuleIds[i], + })); customContentConfig = { hasCustomContent: true, selected: true, - paths: customPaths, sources: sources, selectedFiles: customPaths.map((p) => path.join(p, 'module.yaml')), selectedModuleIds: selectedModuleIds,