@@ -21,6 +21,7 @@ import { runWizard } from './commands/wizard.ts'
2121import { timedSpinner } from './core/formatting.ts'
2222import { getProjectState , hasCompletedWizard , isOutdated , readConfig , semverGt } from './core/index.ts'
2323import { readPackageJsonSafe } from './core/package-json.ts'
24+ import { parseNpmPackageInputs } from './core/prefix.ts'
2425import { COMMA_OR_WHITESPACE_RE , VERSION_RANGE_PREFIX_RE } from './core/regex.ts'
2526import { iterateSkills } from './core/skills.ts'
2627import { fetchLatestVersion , fetchNpmRegistryMeta } from './sources/index.ts'
@@ -277,7 +278,7 @@ const main = defineCommand({
277278 if ( source === 'manual' ) {
278279 const input = await p . text ( {
279280 message : 'Enter package names (space or comma-separated)' ,
280- placeholder : 'vue nuxt pinia' ,
281+ placeholder : 'vue npm: nuxt pinia' ,
281282 } )
282283 if ( p . isCancel ( input ) ) {
283284 if ( ! hasPkgJson ) {
@@ -290,7 +291,12 @@ const main = defineCommand({
290291 p . log . warn ( 'No packages entered' )
291292 continue
292293 }
293- selected = input . split ( COMMA_OR_WHITESPACE_RE ) . map ( s => s . trim ( ) ) . filter ( Boolean )
294+ const parsed = parseNpmPackageInputs ( input . split ( COMMA_OR_WHITESPACE_RE ) . map ( s => s . trim ( ) ) . filter ( Boolean ) )
295+ if ( parsed . _tag === 'Err' ) {
296+ p . log . error ( `${ parsed . input } is not an npm package. Install it with \`skilld add ${ parsed . input } \`.` )
297+ continue
298+ }
299+ selected = parsed . packageSpecs
294300 if ( selected . length === 0 ) {
295301 p . log . warn ( 'No valid packages entered' )
296302 continue
@@ -534,11 +540,16 @@ const main = defineCommand({
534540 if ( source === 'manual' ) {
535541 const input = guard ( await p . text ( {
536542 message : 'Enter package names (space or comma-separated)' ,
537- placeholder : 'vue nuxt pinia' ,
543+ placeholder : 'vue npm: nuxt pinia' ,
538544 } ) )
539545 if ( ! input )
540546 return
541- selected = input . split ( COMMA_OR_WHITESPACE_RE ) . map ( s => s . trim ( ) ) . filter ( Boolean )
547+ const parsed = parseNpmPackageInputs ( input . split ( COMMA_OR_WHITESPACE_RE ) . map ( s => s . trim ( ) ) . filter ( Boolean ) )
548+ if ( parsed . _tag === 'Err' ) {
549+ p . log . error ( `${ parsed . input } is not an npm package. Install it with \`skilld add ${ parsed . input } \`.` )
550+ return
551+ }
552+ selected = parsed . packageSpecs
542553 if ( selected . length === 0 )
543554 return
544555 }
0 commit comments