skilld 0.15.1 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.mjs CHANGED
@@ -3428,35 +3428,46 @@ const removeCommandDef = defineCommand({
3428
3428
  });
3429
3429
  var search_exports = /* @__PURE__ */ __exportAll({
3430
3430
  findPackageDbs: () => findPackageDbs,
3431
+ listLockPackages: () => listLockPackages,
3431
3432
  parseFilterPrefix: () => parseFilterPrefix,
3432
3433
  searchCommand: () => searchCommand,
3433
3434
  searchCommandDef: () => searchCommandDef
3434
3435
  });
3435
3436
  function findPackageDbs(packageFilter) {
3436
- const cwd = process.cwd();
3437
+ const lock = readProjectLock(process.cwd());
3438
+ if (!lock) return [];
3439
+ return filterLockDbs(lock, packageFilter);
3440
+ }
3441
+ function readProjectLock(cwd) {
3437
3442
  const shared = getSharedSkillsDir(cwd);
3438
3443
  if (shared) {
3439
3444
  const lock = readLock(shared);
3440
- if (lock) return filterLockDbs(lock, packageFilter);
3445
+ if (lock) return lock;
3441
3446
  }
3442
3447
  const agent = detectTargetAgent();
3443
- if (!agent) return [];
3444
- const lock = readLock(`${cwd}/${targets[agent].skillsDir}`);
3448
+ if (!agent) return null;
3449
+ return readLock(`${cwd}/${targets[agent].skillsDir}`);
3450
+ }
3451
+ function listLockPackages(cwd = process.cwd()) {
3452
+ const lock = readProjectLock(cwd);
3445
3453
  if (!lock) return [];
3446
- return filterLockDbs(lock, packageFilter);
3454
+ return [...new Set(Object.values(lock.skills).map((s) => s.packageName).filter(Boolean))];
3447
3455
  }
3448
3456
  function filterLockDbs(lock, packageFilter) {
3449
3457
  if (!lock) return [];
3450
- const normalize = (s) => s.toLowerCase().replace(/[-_@/]/g, "");
3458
+ const tokenize = (s) => s.toLowerCase().replace(/@/g, "").split(/[-_/]+/).filter(Boolean);
3451
3459
  return Object.values(lock.skills).filter((info) => {
3452
3460
  if (!info.packageName || !info.version) return false;
3453
3461
  if (!packageFilter) return true;
3454
- const f = normalize(packageFilter);
3455
- return normalize(info.packageName).includes(f) || normalize(info.packageName) === f;
3462
+ const filterTokens = tokenize(packageFilter);
3463
+ const nameTokens = tokenize(info.packageName);
3464
+ return filterTokens.every((ft) => nameTokens.some((nt) => nt.includes(ft) || ft.includes(nt)));
3456
3465
  }).map((info) => {
3457
3466
  const exact = getPackageDbPath(info.packageName, info.version);
3458
3467
  if (existsSync(exact)) return exact;
3459
- return findAnyPackageDb(info.packageName);
3468
+ const fallback = findAnyPackageDb(info.packageName);
3469
+ if (fallback) p.log.warn(`Using cached search index for ${info.packageName} (v${info.version} not indexed). Run \`skilld update ${info.packageName}\` to re-index.`);
3470
+ return fallback;
3460
3471
  }).filter((db) => !!db);
3461
3472
  }
3462
3473
  function findAnyPackageDb(name) {
@@ -3500,8 +3511,11 @@ function parseFilterPrefix(rawQuery) {
3500
3511
  async function searchCommand(rawQuery, packageFilter) {
3501
3512
  const dbs = findPackageDbs(packageFilter);
3502
3513
  if (dbs.length === 0) {
3503
- if (packageFilter) p.log.warn(`No docs indexed for "${packageFilter}". Run \`skilld add ${packageFilter}\` first.`);
3504
- else p.log.warn("No docs indexed yet. Run `skilld add <package>` first.");
3514
+ if (packageFilter) {
3515
+ const available = listLockPackages();
3516
+ if (available.length > 0) p.log.warn(`No docs indexed for "${packageFilter}". Available: ${available.join(", ")}`);
3517
+ else p.log.warn(`No docs indexed for "${packageFilter}". Run \`skilld add ${packageFilter}\` first.`);
3518
+ } else p.log.warn("No docs indexed yet. Run `skilld add <package>` first.");
3505
3519
  return;
3506
3520
  }
3507
3521
  const { query, filter } = parseFilterPrefix(rawQuery);
@@ -3577,7 +3591,11 @@ const SPINNER_FRAMES = [
3577
3591
  async function interactiveSearch(packageFilter) {
3578
3592
  const dbs = findPackageDbs(packageFilter);
3579
3593
  if (dbs.length === 0) {
3580
- const msg = packageFilter ? `No docs indexed for "${packageFilter}". Run \`skilld add ${packageFilter}\` first.` : "No docs indexed yet. Run `skilld add <package>` first.";
3594
+ let msg;
3595
+ if (packageFilter) {
3596
+ const available = listLockPackages();
3597
+ msg = available.length > 0 ? `No docs indexed for "${packageFilter}". Available: ${available.join(", ")}` : `No docs indexed for "${packageFilter}". Run \`skilld add ${packageFilter}\` first.`;
3598
+ } else msg = "No docs indexed yet. Run `skilld add <package>` first.";
3581
3599
  process.stderr.write(`\x1B[33m${msg}\x1B[0m\n`);
3582
3600
  return;
3583
3601
  }