@@ -401,7 +401,7 @@ async function syncBaseSkill(
401401 const localDeps = await readLocalDependencies ( cwd ) . catch ( ( ) => [ ] )
402402 const localVersion = localDeps . find ( d => d . name === packageName ) ?. version
403403
404- const { package : resolvedPkg , attempts } = await resolvePackageDocsWithAttempts ( requestedTag ? packageSpec : packageName , {
404+ const { package : resolvedPkg , attempts, registryVersion } = await resolvePackageDocsWithAttempts ( requestedTag ? packageSpec : packageName , {
405405 version : localVersion ,
406406 cwd,
407407 onProgress : step => update ( packageName , 'resolving' , RESOLVE_STEP_LABELS [ step ] ) ,
@@ -414,6 +414,19 @@ async function syncBaseSkill(
414414 }
415415
416416 if ( ! resolved ) {
417+ // Even without docs, the package may ship its own skills (skills-npm convention)
418+ const shippedVersion = localVersion || registryVersion || 'latest'
419+ const earlyShipped = handleShippedSkills ( packageName , shippedVersion , cwd , config . agent , config . global )
420+ if ( earlyShipped ) {
421+ const shared = ! config . global && getSharedSkillsDir ( cwd )
422+ if ( shared ) {
423+ for ( const shipped of earlyShipped . shipped )
424+ linkSkillToAgents ( shipped . skillName , shared , cwd , config . agent )
425+ }
426+ update ( packageName , 'done' , 'Published SKILL.md' , getVersionKey ( shippedVersion ) )
427+ return 'shipped'
428+ }
429+
417430 const npmAttempt = attempts . find ( a => a . source === 'npm' )
418431 let reason : string
419432 if ( npmAttempt ?. status === 'not-found' ) {
0 commit comments