Skip to content

Commit 841acd9

Browse files
committed
feat: add --tags filter to skills search
Parity with plugins explore. Filters skills by tag (comma-separated). Tags are auto-generated from provider paths (e.g. owner names). Usage: supercli skills search --tags docker supercli skills search --query docker --tags runeweaverstudios supercli skills search --tags owner1,owner2 --limit 10
1 parent bfeb486 commit 841acd9

2 files changed

Lines changed: 16 additions & 8 deletions

File tree

cli/skills-catalog.js

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,12 +341,19 @@ function listCatalogSkills(options = {}) {
341341
const idx = readIndex()
342342
let items = idx.skills || []
343343
if (options.provider) items = items.filter(s => s.provider === options.provider)
344-
return items.map(s => ({ id: s.id, name: s.name, description: s.description, provider: s.provider }))
344+
return items.map(s => ({ id: s.id, name: s.name, description: s.description, provider: s.provider, tags: Array.isArray(s.tags) ? s.tags : [] }))
345345
}
346346

347347
function searchCatalog(query, options = {}) {
348348
const q = String(query || "").trim().toLowerCase()
349-
const items = listCatalogSkills(options)
349+
const tags = Array.isArray(options.tags) ? options.tags.map(t => t.toLowerCase()) : []
350+
let items = listCatalogSkills(options)
351+
if (tags.length) {
352+
items = items.filter(s => {
353+
const skillTags = (s.tags || []).map(t => t.toLowerCase())
354+
return tags.some(t => skillTags.includes(t))
355+
})
356+
}
350357
if (!q) return items
351358
return items.filter(s =>
352359
s.id.toLowerCase().includes(q) ||

cli/skills.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -414,8 +414,9 @@ function handleSkillsCommand(options) {
414414

415415
if (subcommand === "search") {
416416
const query = flags.query || positional.slice(2).join(" ")
417-
if (!query) {
418-
outputError({ code: 85, type: "invalid_argument", message: "Usage: supercli skills search --query <text> [--provider <provider>] [--limit <n>] [--offset <n>]", recoverable: false })
417+
const tags = flags.tags ? String(flags.tags).split(",").map(t => t.trim()).filter(Boolean) : []
418+
if (!query && !tags.length) {
419+
outputError({ code: 85, type: "invalid_argument", message: "Usage: supercli skills search --query <text> [--tags <tag1,tag2>] [--provider <provider>] [--limit <n>] [--offset <n>]", recoverable: false })
419420
return true
420421
}
421422
const limitExplicit = flags.limit !== undefined
@@ -431,7 +432,7 @@ function handleSkillsCommand(options) {
431432
outputError({ code: 85, type: "invalid_argument", message: "Invalid --offset. Use a non-negative integer", recoverable: false })
432433
return true
433434
}
434-
const allSkills = searchCatalog(query, { provider: flags.provider })
435+
const allSkills = searchCatalog(query, { provider: flags.provider, tags })
435436
const total = allSkills.length
436437
const start = Math.min(offset, total)
437438
const end = limit !== null ? Math.min(start + limit, total) : total
@@ -564,7 +565,7 @@ function handleSkillsCommand(options) {
564565
console.log(" get <id> Get skill documentation");
565566
console.log(" teach Get the skills usage guide");
566567
console.log(" sync Sync skills catalog");
567-
console.log(" search Search skills catalog (--limit, --offset)");
568+
console.log(" search Search skills catalog (--query, --tags, --provider, --limit, --offset)");
568569
console.log(" providers Manage skill providers\n");
569570
console.log(" Usage:");
570571
console.log(" supercli skills list [--catalog] [--limit <n>] [--offset <n>]");
@@ -601,8 +602,8 @@ function handleSkillsCommand(options) {
601602
},
602603
search: {
603604
description: "Search skills catalog for matching skills",
604-
usage: "supercli skills search --query <text> [--provider <name>] [--limit <n>] [--offset <n>]",
605-
examples: ["supercli skills search --query email --json", "supercli skills search --query email --limit 10 --json", "supercli skills search --query email --limit 10 --offset 20 --json"]
605+
usage: "supercli skills search --query <text> [--tags <tag1,tag2>] [--provider <name>] [--limit <n>] [--offset <n>]",
606+
examples: ["supercli skills search --query email --json", "supercli skills search --tags skills --json", "supercli skills search --query email --tags docker --limit 10 --json", "supercli skills search --query email --limit 10 --offset 20 --json"]
606607
},
607608
providers: {
608609
description: "Manage skill providers (list, add, remove, show)",

0 commit comments

Comments
 (0)