@agents-inc/cli 0.74.12 → 0.75.1

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.
Files changed (155) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{chunk-6W4H2K3Z.js → chunk-5BGBH3KD.js} +34 -20
  3. package/dist/chunk-5BGBH3KD.js.map +1 -0
  4. package/dist/{chunk-4CRWKTNQ.js → chunk-6C66NL4X.js} +2 -8
  5. package/dist/chunk-6C66NL4X.js.map +1 -0
  6. package/dist/{chunk-JBQRRJRY.js → chunk-7QAVO7VN.js} +43 -14
  7. package/dist/{chunk-JBQRRJRY.js.map → chunk-7QAVO7VN.js.map} +1 -1
  8. package/dist/{chunk-HT5KOOUQ.js → chunk-AOZBHMYL.js} +1 -2
  9. package/dist/chunk-AOZBHMYL.js.map +1 -0
  10. package/dist/{chunk-EWGFIBBU.js → chunk-BVSWWBPE.js} +4 -4
  11. package/dist/{chunk-62FBXUNR.js → chunk-CBXMOWQY.js} +2 -2
  12. package/dist/{chunk-NO2XIAJC.js → chunk-CUCF5LM4.js} +5 -5
  13. package/dist/{chunk-6RGNXTTG.js → chunk-DFKNFZI2.js} +16 -23
  14. package/dist/chunk-DFKNFZI2.js.map +1 -0
  15. package/dist/{chunk-MZQKSK3J.js → chunk-FHHTDPMW.js} +20 -11
  16. package/dist/{chunk-MZQKSK3J.js.map → chunk-FHHTDPMW.js.map} +1 -1
  17. package/dist/{chunk-DZUZVT5X.js → chunk-FYYIRFYT.js} +4 -4
  18. package/dist/{chunk-2YFC7IJ6.js → chunk-GCT7LSYW.js} +3 -3
  19. package/dist/{chunk-YUSLPHXO.js → chunk-GMUOEQOY.js} +5 -5
  20. package/dist/{chunk-NG2GGK6P.js → chunk-HKIQA4F6.js} +3813 -2751
  21. package/dist/chunk-HKIQA4F6.js.map +1 -0
  22. package/dist/{chunk-ZU7AOE3X.js → chunk-JGSPESM3.js} +2 -6
  23. package/dist/chunk-JGSPESM3.js.map +1 -0
  24. package/dist/{chunk-7M4INWUR.js → chunk-JNQKCZA3.js} +4 -7
  25. package/dist/chunk-JNQKCZA3.js.map +1 -0
  26. package/dist/{chunk-PJUC2WCA.js → chunk-JOTAIMTC.js} +27 -11
  27. package/dist/chunk-JOTAIMTC.js.map +1 -0
  28. package/dist/{chunk-IJLAVOKZ.js → chunk-KDYE3AGL.js} +2 -2
  29. package/dist/{chunk-NKKYTCBH.js → chunk-PSU42CXK.js} +609 -118
  30. package/dist/chunk-PSU42CXK.js.map +1 -0
  31. package/dist/{chunk-AKW425U6.js → chunk-Q3F36QZZ.js} +2 -2
  32. package/dist/{chunk-BM5Y6LIC.js → chunk-Q72ZBA4X.js} +2 -2
  33. package/dist/{chunk-DG2T7KYG.js → chunk-QN3V3ES7.js} +6 -6
  34. package/dist/{chunk-I7WXUAWA.js → chunk-SPATQKH6.js} +3 -3
  35. package/dist/{chunk-SRIH4U5Y.js → chunk-SYGXJBG6.js} +14 -3
  36. package/dist/chunk-SYGXJBG6.js.map +1 -0
  37. package/dist/{chunk-IJNNVCS4.js → chunk-TYM4D3OF.js} +2 -2
  38. package/dist/{chunk-ARGCINJC.js → chunk-U5R4M7MA.js} +6 -8
  39. package/dist/chunk-U5R4M7MA.js.map +1 -0
  40. package/dist/{chunk-LVNNP7T4.js → chunk-U6A4YFOF.js} +3 -3
  41. package/dist/{chunk-ICJV3JJF.js → chunk-UQKCYLOA.js} +26 -67
  42. package/dist/chunk-UQKCYLOA.js.map +1 -0
  43. package/dist/{chunk-HGTC76BX.js → chunk-V36FRPAU.js} +4 -2
  44. package/dist/chunk-V36FRPAU.js.map +1 -0
  45. package/dist/{chunk-NPMGVQM4.js → chunk-VU4ZCRZS.js} +5 -5
  46. package/dist/{chunk-TDHEAHXD.js → chunk-W22IYRZV.js} +3 -3
  47. package/dist/chunk-W22IYRZV.js.map +1 -0
  48. package/dist/{chunk-GJWHA6P4.js → chunk-WXC2Y5TF.js} +23 -17
  49. package/dist/chunk-WXC2Y5TF.js.map +1 -0
  50. package/dist/{chunk-RRBWNEG3.js → chunk-XHTN56UT.js} +2 -2
  51. package/dist/{chunk-W6NWOYMS.js → chunk-XZ57QYVI.js} +3 -3
  52. package/dist/{chunk-2DKJM7RO.js → chunk-ZZJ6H6VB.js} +23 -8
  53. package/dist/chunk-ZZJ6H6VB.js.map +1 -0
  54. package/dist/commands/build/marketplace.js +4 -4
  55. package/dist/commands/build/plugins.js +8 -8
  56. package/dist/commands/build/stack.js +8 -8
  57. package/dist/commands/compile.js +8 -8
  58. package/dist/commands/config/index.js +8 -8
  59. package/dist/commands/config/path.js +7 -7
  60. package/dist/commands/config/show.js +8 -8
  61. package/dist/commands/diff.js +7 -7
  62. package/dist/commands/doctor.js +7 -7
  63. package/dist/commands/edit.js +25 -25
  64. package/dist/commands/eject.js +7 -7
  65. package/dist/commands/import/skill.js +7 -7
  66. package/dist/commands/info.js +7 -15
  67. package/dist/commands/info.js.map +1 -1
  68. package/dist/commands/init.js +25 -25
  69. package/dist/commands/list.js +7 -7
  70. package/dist/commands/new/agent.js +8 -8
  71. package/dist/commands/new/marketplace.js +9 -9
  72. package/dist/commands/new/skill.js +8 -8
  73. package/dist/commands/outdated.js +7 -7
  74. package/dist/commands/search.js +11 -12
  75. package/dist/commands/search.js.map +1 -1
  76. package/dist/commands/uninstall.js +7 -7
  77. package/dist/commands/update.js +8 -8
  78. package/dist/commands/validate.js +7 -7
  79. package/dist/components/skill-search/skill-search.js +1 -1
  80. package/dist/components/wizard/category-grid.js +2 -2
  81. package/dist/components/wizard/category-grid.test.js +16 -17
  82. package/dist/components/wizard/category-grid.test.js.map +1 -1
  83. package/dist/components/wizard/checkbox-grid.js +2 -2
  84. package/dist/components/wizard/checkbox-grid.test.js +2 -2
  85. package/dist/components/wizard/domain-selection.js +11 -11
  86. package/dist/components/wizard/source-grid.js +2 -2
  87. package/dist/components/wizard/source-grid.test.js +11 -11
  88. package/dist/components/wizard/stack-selection.js +8 -8
  89. package/dist/components/wizard/step-agents.js +10 -10
  90. package/dist/components/wizard/step-agents.test.js +14 -14
  91. package/dist/components/wizard/step-agents.test.js.map +1 -1
  92. package/dist/components/wizard/step-build.js +11 -11
  93. package/dist/components/wizard/step-build.test.js +13 -13
  94. package/dist/components/wizard/step-confirm.js +5 -5
  95. package/dist/components/wizard/step-confirm.test.js +11 -11
  96. package/dist/components/wizard/step-refine.js +2 -2
  97. package/dist/components/wizard/step-refine.test.js +2 -2
  98. package/dist/components/wizard/step-settings.js +8 -8
  99. package/dist/components/wizard/step-settings.test.js +11 -11
  100. package/dist/components/wizard/step-sources.js +11 -11
  101. package/dist/components/wizard/step-sources.test.js +24 -168
  102. package/dist/components/wizard/step-sources.test.js.map +1 -1
  103. package/dist/components/wizard/step-stack.js +13 -13
  104. package/dist/components/wizard/step-stack.test.js +14 -14
  105. package/dist/components/wizard/view-title.js +1 -2
  106. package/dist/components/wizard/wizard-layout.js +9 -9
  107. package/dist/components/wizard/wizard.js +23 -23
  108. package/dist/config-exports.js +1 -1
  109. package/dist/hooks/init.js +25 -25
  110. package/dist/{loader-NHUCFMFQ.js → loader-TK7YS2I5.js} +4 -4
  111. package/dist/plugins/dummy-skill/.claude-plugin/.content-hash +1 -0
  112. package/dist/plugins/dummy-skill/.claude-plugin/plugin.json +13 -0
  113. package/dist/{source-loader-42GVUFZA.js → source-loader-UQXJVVSO.js} +7 -7
  114. package/dist/source-manager-HS2ZT4XE.js +19 -0
  115. package/dist/stores/wizard-store.js +7 -7
  116. package/dist/stores/wizard-store.test.js +10 -10
  117. package/package.json +1 -1
  118. package/src/schemas/custom-metadata.schema.json +0 -7
  119. package/src/schemas/metadata.schema.json +0 -7
  120. package/dist/chunk-2DKJM7RO.js.map +0 -1
  121. package/dist/chunk-4CRWKTNQ.js.map +0 -1
  122. package/dist/chunk-6RGNXTTG.js.map +0 -1
  123. package/dist/chunk-6W4H2K3Z.js.map +0 -1
  124. package/dist/chunk-7M4INWUR.js.map +0 -1
  125. package/dist/chunk-ARGCINJC.js.map +0 -1
  126. package/dist/chunk-GJWHA6P4.js.map +0 -1
  127. package/dist/chunk-HGTC76BX.js.map +0 -1
  128. package/dist/chunk-HT5KOOUQ.js.map +0 -1
  129. package/dist/chunk-ICJV3JJF.js.map +0 -1
  130. package/dist/chunk-NG2GGK6P.js.map +0 -1
  131. package/dist/chunk-NKKYTCBH.js.map +0 -1
  132. package/dist/chunk-PJUC2WCA.js.map +0 -1
  133. package/dist/chunk-SRIH4U5Y.js.map +0 -1
  134. package/dist/chunk-TDHEAHXD.js.map +0 -1
  135. package/dist/chunk-ZU7AOE3X.js.map +0 -1
  136. package/dist/source-manager-WRZBOTEH.js +0 -19
  137. /package/dist/{chunk-EWGFIBBU.js.map → chunk-BVSWWBPE.js.map} +0 -0
  138. /package/dist/{chunk-62FBXUNR.js.map → chunk-CBXMOWQY.js.map} +0 -0
  139. /package/dist/{chunk-NO2XIAJC.js.map → chunk-CUCF5LM4.js.map} +0 -0
  140. /package/dist/{chunk-DZUZVT5X.js.map → chunk-FYYIRFYT.js.map} +0 -0
  141. /package/dist/{chunk-2YFC7IJ6.js.map → chunk-GCT7LSYW.js.map} +0 -0
  142. /package/dist/{chunk-YUSLPHXO.js.map → chunk-GMUOEQOY.js.map} +0 -0
  143. /package/dist/{chunk-IJLAVOKZ.js.map → chunk-KDYE3AGL.js.map} +0 -0
  144. /package/dist/{chunk-AKW425U6.js.map → chunk-Q3F36QZZ.js.map} +0 -0
  145. /package/dist/{chunk-BM5Y6LIC.js.map → chunk-Q72ZBA4X.js.map} +0 -0
  146. /package/dist/{chunk-DG2T7KYG.js.map → chunk-QN3V3ES7.js.map} +0 -0
  147. /package/dist/{chunk-I7WXUAWA.js.map → chunk-SPATQKH6.js.map} +0 -0
  148. /package/dist/{chunk-IJNNVCS4.js.map → chunk-TYM4D3OF.js.map} +0 -0
  149. /package/dist/{chunk-LVNNP7T4.js.map → chunk-U6A4YFOF.js.map} +0 -0
  150. /package/dist/{chunk-NPMGVQM4.js.map → chunk-VU4ZCRZS.js.map} +0 -0
  151. /package/dist/{chunk-RRBWNEG3.js.map → chunk-XHTN56UT.js.map} +0 -0
  152. /package/dist/{chunk-W6NWOYMS.js.map → chunk-XZ57QYVI.js.map} +0 -0
  153. /package/dist/{loader-NHUCFMFQ.js.map → loader-TK7YS2I5.js.map} +0 -0
  154. /package/dist/{source-loader-42GVUFZA.js.map → source-loader-UQXJVVSO.js.map} +0 -0
  155. /package/dist/{source-manager-WRZBOTEH.js.map → source-manager-HS2ZT4XE.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/commands/search.tsx","../../src/cli/components/skill-search/index.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport { printTable } from \"@oclif/table\";\nimport { render } from \"ink\";\nimport path from \"path\";\nimport { sortBy } from \"remeda\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { SkillSearch, type SkillSearchResult } from \"../components/skill-search/index.js\";\nimport type { SourcedSkill } from \"../components/skill-search/skill-search.js\";\nimport { DEFAULT_SKILLS_SUBDIR, LOCAL_SKILLS_PATH, STANDARD_FILES } from \"../consts.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { resolveAllSources, type SourceEntry } from \"../lib/configuration/index.js\";\nimport {\n loadSkillsMatrixFromSource,\n fetchFromSource,\n parseFrontmatter,\n} from \"../lib/loading/index.js\";\nimport type { CategoryPath, ResolvedSkill, SkillSlug } from \"../types/index.js\";\nimport { listDirectories, fileExists, readFile, copy, ensureDir } from \"../utils/fs.js\";\nimport { SUCCESS_MESSAGES, STATUS_MESSAGES, INFO_MESSAGES } from \"../utils/messages.js\";\n\nconst MAX_DESCRIPTION_WIDTH = 50;\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return `${str.slice(0, maxLength - 3)}...`;\n}\n\nfunction matchesQuery(skill: ResolvedSkill, query: string): boolean {\n const lowerQuery = query.toLowerCase();\n\n if (skill.id.toLowerCase().includes(lowerQuery)) return true;\n if (skill.displayName.toLowerCase().includes(lowerQuery)) return true;\n if (skill.slug.toLowerCase().includes(lowerQuery)) return true;\n if (skill.description.toLowerCase().includes(lowerQuery)) return true;\n if (skill.category.toLowerCase().includes(lowerQuery)) return true;\n\n return skill.tags.some((tag) => tag.toLowerCase().includes(lowerQuery));\n}\n\nfunction matchesCategory(skill: ResolvedSkill, category: string): boolean {\n const lowerCategory = category.toLowerCase();\n return skill.category.toLowerCase().includes(lowerCategory);\n}\n\nfunction toSourcedSkill(\n skill: ResolvedSkill,\n sourceName: string,\n sourceUrl?: string,\n): SourcedSkill {\n return {\n ...skill,\n sourceName,\n sourceUrl,\n };\n}\n\nasync function fetchSkillsFromSource(\n source: SourceEntry,\n forceRefresh: boolean,\n): Promise<SourcedSkill[]> {\n try {\n const result = await fetchFromSource(source.url, { forceRefresh });\n const skillsDir = path.join(result.path, DEFAULT_SKILLS_SUBDIR);\n\n if (!(await fileExists(skillsDir))) {\n return [];\n }\n\n const skillDirs = await listDirectories(skillsDir);\n const skills: SourcedSkill[] = [];\n\n for (const skillDir of skillDirs) {\n const skillMdPath = path.join(skillsDir, skillDir, STANDARD_FILES.SKILL_MD);\n if (!(await fileExists(skillMdPath))) continue;\n\n const content = await readFile(skillMdPath);\n const frontmatter = parseFrontmatter(content, skillMdPath);\n if (!frontmatter) continue;\n\n skills.push({\n id: frontmatter.name,\n description: frontmatter.description,\n // Boundary cast: directory name used as slug for third-party source skill\n slug: skillDir as SkillSlug,\n displayName: skillDir,\n // Boundary cast: external source skills have no real category; \"imported\" is a display-only placeholder\n category: \"imported\" as CategoryPath,\n tags: [],\n author: `@${source.name}`,\n conflictsWith: [],\n isRecommended: false,\n requires: [],\n alternatives: [],\n discourages: [],\n compatibleWith: [],\n sourceName: source.name,\n sourceUrl: source.url,\n path: path.join(skillsDir, skillDir),\n });\n }\n\n return skills;\n } catch {\n // Source unavailable, return empty\n return [];\n }\n}\n\nexport default class Search extends BaseCommand {\n static summary = \"Search available skills\";\n static description =\n \"Search skills by ID, alias, description, category, or tags. \" +\n \"Run without arguments or with -i for interactive mode with multi-select.\";\n\n static examples = [\n {\n description: \"Search for React skills\",\n command: \"<%= config.bin %> search react\",\n },\n {\n description: \"Interactive search mode\",\n command: \"<%= config.bin %> search\",\n },\n {\n description: \"Interactive with pre-filled query\",\n command: \"<%= config.bin %> search -i react\",\n },\n {\n description: \"Search with category filter\",\n command: \"<%= config.bin %> search state -c frontend\",\n },\n ];\n\n static args = {\n query: Args.string({\n description: \"Search query (matches name, description, category, tags)\",\n required: false,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n interactive: Flags.boolean({\n char: \"i\",\n description: \"Launch interactive search with multi-select\",\n default: false,\n }),\n category: Flags.string({\n char: \"c\",\n description: \"Filter by category\",\n required: false,\n }),\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Search);\n const projectDir = process.cwd();\n\n const isInteractive = flags.interactive || !args.query;\n\n if (isInteractive) {\n await this.runInteractive(args.query, flags.refresh, projectDir);\n } else {\n await this.runStatic(args.query!, flags);\n }\n }\n\n private async runInteractive(\n initialQuery: string | undefined,\n forceRefresh: boolean,\n projectDir: string,\n ): Promise<void> {\n this.log(\"Loading skills from all sources...\");\n\n try {\n const { matrix, sourcePath } = await loadSkillsMatrixFromSource({\n sourceFlag: undefined,\n projectDir,\n forceRefresh,\n });\n\n const primarySkills = Object.values(matrix.skills)\n .filter((skill): skill is ResolvedSkill => skill !== undefined)\n .map((skill) => toSourcedSkill(skill, \"marketplace\", sourcePath));\n\n const { extras } = await resolveAllSources(projectDir);\n\n const extraSkillArrays = await Promise.all(\n extras.map((source) => fetchSkillsFromSource(source, forceRefresh)),\n );\n\n const allSkills: SourcedSkill[] = [...primarySkills, ...extraSkillArrays.flat()];\n const sourceCount = 1 + extras.length;\n\n this.log(`Loaded ${allSkills.length} skills from ${sourceCount} source(s)`);\n this.log(\"\");\n\n const searchResultPromise = new Promise<SkillSearchResult>((resolve) => {\n const { waitUntilExit } = render(\n <SkillSearch\n skills={allSkills}\n sourceCount={sourceCount}\n initialQuery={initialQuery}\n onComplete={(result) => {\n resolve(result);\n }}\n onCancel={() => {\n resolve({ selectedSkills: [], cancelled: true });\n }}\n />,\n );\n\n waitUntilExit().then(() => {\n resolve({ selectedSkills: [], cancelled: true });\n });\n });\n\n const searchResult = await searchResultPromise;\n\n if (searchResult.cancelled) {\n this.log(\"Search cancelled\");\n this.exit(EXIT_CODES.CANCELLED);\n }\n\n if (searchResult.selectedSkills.length === 0) {\n this.log(\"No skills selected\");\n return;\n }\n\n this.log(\"\");\n this.log(`Importing ${searchResult.selectedSkills.length} skill(s)...`);\n\n const destDir = path.join(projectDir, LOCAL_SKILLS_PATH);\n\n for (const skill of searchResult.selectedSkills) {\n if (skill.path) {\n const destPath = path.join(destDir, skill.id);\n await ensureDir(path.dirname(destPath));\n await copy(skill.path, destPath);\n this.logSuccess(`Imported: ${skill.id}`);\n } else {\n this.warn(`Skipping ${skill.id}: No source path available`);\n }\n }\n\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.IMPORT_COMPLETE);\n this.log(`Skills location: ${destDir}`);\n this.log(INFO_MESSAGES.RUN_COMPILE);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async runStatic(\n query: string,\n flags: { source?: string; category?: string },\n ): Promise<void> {\n try {\n this.log(STATUS_MESSAGES.LOADING_SKILLS);\n\n const { matrix, sourcePath, isLocal } = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n });\n\n this.log(`Loaded from ${isLocal ? \"local\" : \"remote\"}: ${sourcePath}`);\n\n const allSkills = Object.values(matrix.skills).filter(\n (skill): skill is ResolvedSkill => skill !== undefined,\n );\n\n let results = allSkills.filter((skill) => matchesQuery(skill, query));\n\n if (flags.category) {\n results = results.filter((skill) => matchesCategory(skill, flags.category!));\n }\n\n results = sortBy(results, (r) => r.displayName.toLowerCase());\n\n this.log(\"\");\n if (results.length === 0) {\n this.warn(`No skills found matching \"${query}\"`);\n if (flags.category) {\n this.logInfo(`Category filter: ${flags.category}`);\n }\n } else {\n this.logInfo(\n `Found ${results.length} skill${results.length === 1 ? \"\" : \"s\"} matching \"${query}\"`,\n );\n if (flags.category) {\n this.logInfo(`Category filter: ${flags.category}`);\n }\n this.log(\"\");\n\n printTable({\n data: results.map((skill) => ({\n id: skill.displayName,\n category: skill.category,\n description: truncate(skill.description, MAX_DESCRIPTION_WIDTH),\n })),\n columns: [\n { key: \"id\", name: \"ID\" },\n { key: \"category\", name: \"Category\" },\n { key: \"description\", name: \"Description\" },\n ],\n headerOptions: { bold: true },\n });\n }\n this.log(\"\");\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n","export { SkillSearch, type SkillSearchResult } from \"./skill-search.js\";\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/cli/commands/search.tsx","../../src/cli/components/skill-search/index.ts"],"sourcesContent":["import { Args, Flags } from \"@oclif/core\";\nimport { printTable } from \"@oclif/table\";\nimport { render } from \"ink\";\nimport path from \"path\";\nimport { sortBy } from \"remeda\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { SkillSearch, type SkillSearchResult } from \"../components/skill-search/index.js\";\nimport type { SourcedSkill } from \"../components/skill-search/skill-search.js\";\nimport { DEFAULT_SKILLS_SUBDIR, LOCAL_SKILLS_PATH, STANDARD_FILES } from \"../consts.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { resolveAllSources, type SourceEntry } from \"../lib/configuration/index.js\";\nimport {\n loadSkillsMatrixFromSource,\n fetchFromSource,\n parseFrontmatter,\n} from \"../lib/loading/index.js\";\nimport type { CategoryPath, ResolvedSkill, SkillSlug } from \"../types/index.js\";\nimport { listDirectories, fileExists, readFile, copy, ensureDir } from \"../utils/fs.js\";\nimport { SUCCESS_MESSAGES, STATUS_MESSAGES, INFO_MESSAGES } from \"../utils/messages.js\";\n\nconst MAX_DESCRIPTION_WIDTH = 50;\n\nfunction truncate(str: string, maxLength: number): string {\n if (str.length <= maxLength) return str;\n return `${str.slice(0, maxLength - 3)}...`;\n}\n\nfunction matchesQuery(skill: ResolvedSkill, query: string): boolean {\n const lowerQuery = query.toLowerCase();\n\n if (skill.id.toLowerCase().includes(lowerQuery)) return true;\n if (skill.displayName.toLowerCase().includes(lowerQuery)) return true;\n if (skill.slug.toLowerCase().includes(lowerQuery)) return true;\n if (skill.description.toLowerCase().includes(lowerQuery)) return true;\n if (skill.category.toLowerCase().includes(lowerQuery)) return true;\n\n return false;\n}\n\nfunction matchesCategory(skill: ResolvedSkill, category: string): boolean {\n const lowerCategory = category.toLowerCase();\n return skill.category.toLowerCase().includes(lowerCategory);\n}\n\nfunction toSourcedSkill(\n skill: ResolvedSkill,\n sourceName: string,\n sourceUrl?: string,\n): SourcedSkill {\n return {\n ...skill,\n sourceName,\n sourceUrl,\n };\n}\n\nasync function fetchSkillsFromSource(\n source: SourceEntry,\n forceRefresh: boolean,\n): Promise<SourcedSkill[]> {\n try {\n const result = await fetchFromSource(source.url, { forceRefresh });\n const skillsDir = path.join(result.path, DEFAULT_SKILLS_SUBDIR);\n\n if (!(await fileExists(skillsDir))) {\n return [];\n }\n\n const skillDirs = await listDirectories(skillsDir);\n const skills: SourcedSkill[] = [];\n\n for (const skillDir of skillDirs) {\n const skillMdPath = path.join(skillsDir, skillDir, STANDARD_FILES.SKILL_MD);\n if (!(await fileExists(skillMdPath))) continue;\n\n const content = await readFile(skillMdPath);\n const frontmatter = parseFrontmatter(content, skillMdPath);\n if (!frontmatter) continue;\n\n skills.push({\n id: frontmatter.name,\n description: frontmatter.description,\n // Boundary cast: directory name used as slug for third-party source skill\n slug: skillDir as SkillSlug,\n displayName: skillDir,\n // Boundary cast: external source skills have no real category; \"imported\" is a display-only placeholder\n category: \"imported\" as CategoryPath,\n author: `@${source.name}`,\n conflictsWith: [],\n isRecommended: false,\n requires: [],\n alternatives: [],\n discourages: [],\n compatibleWith: [],\n sourceName: source.name,\n sourceUrl: source.url,\n path: path.join(skillsDir, skillDir),\n });\n }\n\n return skills;\n } catch {\n // Source unavailable, return empty\n return [];\n }\n}\n\nexport default class Search extends BaseCommand {\n static summary = \"Search available skills\";\n static description =\n \"Search skills by ID, alias, description, or category. \" +\n \"Run without arguments or with -i for interactive mode with multi-select.\";\n\n static examples = [\n {\n description: \"Search for React skills\",\n command: \"<%= config.bin %> search react\",\n },\n {\n description: \"Interactive search mode\",\n command: \"<%= config.bin %> search\",\n },\n {\n description: \"Interactive with pre-filled query\",\n command: \"<%= config.bin %> search -i react\",\n },\n {\n description: \"Search with category filter\",\n command: \"<%= config.bin %> search state -c frontend\",\n },\n ];\n\n static args = {\n query: Args.string({\n description: \"Search query (matches name, description, category)\",\n required: false,\n }),\n };\n\n static flags = {\n ...BaseCommand.baseFlags,\n interactive: Flags.boolean({\n char: \"i\",\n description: \"Launch interactive search with multi-select\",\n default: false,\n }),\n category: Flags.string({\n char: \"c\",\n description: \"Filter by category\",\n required: false,\n }),\n refresh: Flags.boolean({\n description: \"Force refresh from remote sources\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { args, flags } = await this.parse(Search);\n const projectDir = process.cwd();\n\n const isInteractive = flags.interactive || !args.query;\n\n if (isInteractive) {\n await this.runInteractive(args.query, flags.refresh, projectDir);\n } else {\n await this.runStatic(args.query!, flags);\n }\n }\n\n private async runInteractive(\n initialQuery: string | undefined,\n forceRefresh: boolean,\n projectDir: string,\n ): Promise<void> {\n this.log(\"Loading skills from all sources...\");\n\n try {\n const { matrix, sourcePath } = await loadSkillsMatrixFromSource({\n sourceFlag: undefined,\n projectDir,\n forceRefresh,\n });\n\n const primarySkills = Object.values(matrix.skills)\n .filter((skill): skill is ResolvedSkill => skill !== undefined)\n .map((skill) => toSourcedSkill(skill, \"marketplace\", sourcePath));\n\n const { extras } = await resolveAllSources(projectDir);\n\n const extraSkillArrays = await Promise.all(\n extras.map((source) => fetchSkillsFromSource(source, forceRefresh)),\n );\n\n const allSkills: SourcedSkill[] = [...primarySkills, ...extraSkillArrays.flat()];\n const sourceCount = 1 + extras.length;\n\n this.log(`Loaded ${allSkills.length} skills from ${sourceCount} source(s)`);\n this.log(\"\");\n\n const searchResultPromise = new Promise<SkillSearchResult>((resolve) => {\n const { waitUntilExit } = render(\n <SkillSearch\n skills={allSkills}\n sourceCount={sourceCount}\n initialQuery={initialQuery}\n onComplete={(result) => {\n resolve(result);\n }}\n onCancel={() => {\n resolve({ selectedSkills: [], cancelled: true });\n }}\n />,\n );\n\n waitUntilExit().then(() => {\n resolve({ selectedSkills: [], cancelled: true });\n });\n });\n\n const searchResult = await searchResultPromise;\n\n if (searchResult.cancelled) {\n this.log(\"Search cancelled\");\n this.exit(EXIT_CODES.CANCELLED);\n }\n\n if (searchResult.selectedSkills.length === 0) {\n this.log(\"No skills selected\");\n return;\n }\n\n this.log(\"\");\n this.log(`Importing ${searchResult.selectedSkills.length} skill(s)...`);\n\n const destDir = path.join(projectDir, LOCAL_SKILLS_PATH);\n\n for (const skill of searchResult.selectedSkills) {\n if (skill.path) {\n const destPath = path.join(destDir, skill.id);\n await ensureDir(path.dirname(destPath));\n await copy(skill.path, destPath);\n this.logSuccess(`Imported: ${skill.id}`);\n } else {\n this.warn(`Skipping ${skill.id}: No source path available`);\n }\n }\n\n this.log(\"\");\n this.logSuccess(SUCCESS_MESSAGES.IMPORT_COMPLETE);\n this.log(`Skills location: ${destDir}`);\n this.log(INFO_MESSAGES.RUN_COMPILE);\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async runStatic(\n query: string,\n flags: { source?: string; category?: string },\n ): Promise<void> {\n try {\n this.log(STATUS_MESSAGES.LOADING_SKILLS);\n\n const { matrix, sourcePath, isLocal } = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n });\n\n this.log(`Loaded from ${isLocal ? \"local\" : \"remote\"}: ${sourcePath}`);\n\n const allSkills = Object.values(matrix.skills).filter(\n (skill): skill is ResolvedSkill => skill !== undefined,\n );\n\n let results = allSkills.filter((skill) => matchesQuery(skill, query));\n\n if (flags.category) {\n results = results.filter((skill) => matchesCategory(skill, flags.category!));\n }\n\n results = sortBy(results, (r) => r.displayName.toLowerCase());\n\n this.log(\"\");\n if (results.length === 0) {\n this.warn(`No skills found matching \"${query}\"`);\n if (flags.category) {\n this.logInfo(`Category filter: ${flags.category}`);\n }\n } else {\n this.logInfo(\n `Found ${results.length} skill${results.length === 1 ? \"\" : \"s\"} matching \"${query}\"`,\n );\n if (flags.category) {\n this.logInfo(`Category filter: ${flags.category}`);\n }\n this.log(\"\");\n\n printTable({\n data: results.map((skill) => ({\n id: skill.displayName,\n category: skill.category,\n description: truncate(skill.description, MAX_DESCRIPTION_WIDTH),\n })),\n columns: [\n { key: \"id\", name: \"ID\" },\n { key: \"category\", name: \"Category\" },\n { key: \"description\", name: \"Description\" },\n ],\n headerOptions: { bold: true },\n });\n }\n this.log(\"\");\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n","export { SkillSearch, type SkillSearchResult } from \"./skill-search.js\";\n"],"mappings":"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","names":[]}
@@ -13,27 +13,27 @@ import {
13
13
  listPluginNames,
14
14
  loadProjectSourceConfig,
15
15
  readForkedFromMetadata
16
- } from "../chunk-6W4H2K3Z.js";
17
- import "../chunk-RRBWNEG3.js";
18
- import "../chunk-NG2GGK6P.js";
16
+ } from "../chunk-5BGBH3KD.js";
17
+ import "../chunk-XHTN56UT.js";
18
+ import "../chunk-HKIQA4F6.js";
19
19
  import {
20
20
  BaseCommand,
21
21
  EXIT_CODES
22
- } from "../chunk-IJLAVOKZ.js";
22
+ } from "../chunk-KDYE3AGL.js";
23
23
  import {
24
24
  directoryExists,
25
25
  getErrorMessage,
26
26
  listDirectories,
27
27
  remove
28
- } from "../chunk-4CRWKTNQ.js";
29
- import "../chunk-SRIH4U5Y.js";
28
+ } from "../chunk-6C66NL4X.js";
29
+ import "../chunk-SYGXJBG6.js";
30
30
  import {
31
31
  CLAUDE_DIR,
32
32
  CLAUDE_SRC_DIR,
33
33
  CLI_COLORS,
34
34
  DEFAULT_BRANDING
35
35
  } from "../chunk-EGMQ3SXN.js";
36
- import "../chunk-NKKYTCBH.js";
36
+ import "../chunk-PSU42CXK.js";
37
37
  import {
38
38
  init_esm_shims
39
39
  } from "../chunk-DHET7RCE.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "../chunk-N6S7ZRIL.js";
5
5
  import {
6
6
  recompileAgents
7
- } from "../chunk-NPMGVQM4.js";
7
+ } from "../chunk-VU4ZCRZS.js";
8
8
  import {
9
9
  ERROR_MESSAGES,
10
10
  INFO_MESSAGES,
@@ -15,26 +15,26 @@ import {
15
15
  compareLocalSkillsWithSource,
16
16
  injectForkedFromMetadata,
17
17
  loadSkillsMatrixFromSource
18
- } from "../chunk-6W4H2K3Z.js";
19
- import "../chunk-RRBWNEG3.js";
18
+ } from "../chunk-5BGBH3KD.js";
19
+ import "../chunk-XHTN56UT.js";
20
20
  import {
21
21
  matrix
22
- } from "../chunk-NG2GGK6P.js";
22
+ } from "../chunk-HKIQA4F6.js";
23
23
  import {
24
24
  BaseCommand,
25
25
  EXIT_CODES
26
- } from "../chunk-IJLAVOKZ.js";
26
+ } from "../chunk-KDYE3AGL.js";
27
27
  import {
28
28
  copy,
29
29
  fileExists,
30
30
  getErrorMessage
31
- } from "../chunk-4CRWKTNQ.js";
32
- import "../chunk-SRIH4U5Y.js";
31
+ } from "../chunk-6C66NL4X.js";
32
+ import "../chunk-SYGXJBG6.js";
33
33
  import {
34
34
  CLI_BIN_NAME,
35
35
  LOCAL_SKILLS_PATH
36
36
  } from "../chunk-EGMQ3SXN.js";
37
- import "../chunk-NKKYTCBH.js";
37
+ import "../chunk-PSU42CXK.js";
38
38
  import {
39
39
  init_esm_shims
40
40
  } from "../chunk-DHET7RCE.js";
@@ -11,17 +11,17 @@ import {
11
11
  validateAllPlugins,
12
12
  validateAllSchemas,
13
13
  validatePlugin
14
- } from "../chunk-6W4H2K3Z.js";
14
+ } from "../chunk-5BGBH3KD.js";
15
15
  import {
16
16
  parseFrontmatter
17
- } from "../chunk-RRBWNEG3.js";
17
+ } from "../chunk-XHTN56UT.js";
18
18
  import {
19
19
  matrix
20
- } from "../chunk-NG2GGK6P.js";
20
+ } from "../chunk-HKIQA4F6.js";
21
21
  import {
22
22
  BaseCommand,
23
23
  EXIT_CODES
24
- } from "../chunk-IJLAVOKZ.js";
24
+ } from "../chunk-KDYE3AGL.js";
25
25
  import {
26
26
  SKILL_ID_PATTERN,
27
27
  directoryExists,
@@ -31,14 +31,14 @@ import {
31
31
  metadataValidationSchema,
32
32
  readFile,
33
33
  setVerbose
34
- } from "../chunk-4CRWKTNQ.js";
35
- import "../chunk-SRIH4U5Y.js";
34
+ } from "../chunk-6C66NL4X.js";
35
+ import "../chunk-SYGXJBG6.js";
36
36
  import {
37
37
  SKILLS_DIR_PATH,
38
38
  SKILL_CATEGORIES_PATH,
39
39
  STANDARD_FILES
40
40
  } from "../chunk-EGMQ3SXN.js";
41
- import "../chunk-NKKYTCBH.js";
41
+ import "../chunk-PSU42CXK.js";
42
42
  import {
43
43
  init_esm_shims
44
44
  } from "../chunk-DHET7RCE.js";
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SkillSearch
4
- } from "../../chunk-HT5KOOUQ.js";
4
+ } from "../../chunk-AOZBHMYL.js";
5
5
  import "../../chunk-T5DJCIUP.js";
6
6
  import "../../chunk-U3IGFMCY.js";
7
7
  import "../../chunk-CBYRFAUN.js";
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CategoryGrid
4
- } from "../../chunk-PJUC2WCA.js";
4
+ } from "../../chunk-JOTAIMTC.js";
5
5
  import "../../chunk-P2FHS5IS.js";
6
6
  import "../../chunk-AUNBGZS4.js";
7
7
  import "../../chunk-CBYRFAUN.js";
8
- import "../../chunk-NG2GGK6P.js";
8
+ import "../../chunk-HKIQA4F6.js";
9
9
  import "../../chunk-EGMQ3SXN.js";
10
10
  import "../../chunk-DHET7RCE.js";
11
11
  export {
@@ -14,9 +14,9 @@ import {
14
14
  } from "../../chunk-66UDJBF6.js";
15
15
  import {
16
16
  CATEGORY_GRID_MATRIX
17
- } from "../../chunk-ICJV3JJF.js";
18
- import "../../chunk-IJNNVCS4.js";
19
- import "../../chunk-ZU7AOE3X.js";
17
+ } from "../../chunk-UQKCYLOA.js";
18
+ import "../../chunk-TYM4D3OF.js";
19
+ import "../../chunk-JGSPESM3.js";
20
20
  import {
21
21
  afterEach,
22
22
  beforeEach,
@@ -27,21 +27,21 @@ import {
27
27
  } from "../../chunk-XY3XDVMI.js";
28
28
  import {
29
29
  CategoryGrid
30
- } from "../../chunk-PJUC2WCA.js";
30
+ } from "../../chunk-JOTAIMTC.js";
31
31
  import "../../chunk-P2FHS5IS.js";
32
32
  import "../../chunk-AUNBGZS4.js";
33
- import "../../chunk-EWGFIBBU.js";
33
+ import "../../chunk-BVSWWBPE.js";
34
34
  import "../../chunk-CBYRFAUN.js";
35
- import "../../chunk-6W4H2K3Z.js";
36
- import "../../chunk-RRBWNEG3.js";
35
+ import "../../chunk-5BGBH3KD.js";
36
+ import "../../chunk-XHTN56UT.js";
37
37
  import {
38
38
  BUILT_IN_MATRIX,
39
39
  initializeMatrix
40
- } from "../../chunk-NG2GGK6P.js";
41
- import "../../chunk-4CRWKTNQ.js";
42
- import "../../chunk-SRIH4U5Y.js";
40
+ } from "../../chunk-HKIQA4F6.js";
41
+ import "../../chunk-6C66NL4X.js";
42
+ import "../../chunk-SYGXJBG6.js";
43
43
  import "../../chunk-EGMQ3SXN.js";
44
- import "../../chunk-NKKYTCBH.js";
44
+ import "../../chunk-PSU42CXK.js";
45
45
  import {
46
46
  init_esm_shims
47
47
  } from "../../chunk-DHET7RCE.js";
@@ -86,7 +86,7 @@ var defaultCategories = [
86
86
  state: { status: "recommended", reason: "Modern utility-first CSS" }
87
87
  }),
88
88
  createOption("web-styling-cva"),
89
- createOption("web-framework-nuxt")
89
+ createOption("web-meta-framework-nuxt")
90
90
  ],
91
91
  { required: true }
92
92
  ),
@@ -132,7 +132,7 @@ var categoriesWithFramework = [
132
132
  state: { status: "recommended", reason: "Modern utility-first CSS" }
133
133
  }),
134
134
  createOption("web-styling-cva"),
135
- createOption("web-framework-nuxt")
135
+ createOption("web-meta-framework-nuxt")
136
136
  ],
137
137
  { required: true }
138
138
  ),
@@ -998,10 +998,9 @@ describe("CategoryGrid component", () => {
998
998
  "web-framework-vue-composition-api",
999
999
  "web-framework-angular-standalone",
1000
1000
  "web-framework-solidjs",
1001
- "web-framework-nuxt",
1002
- "web-framework-remix",
1003
- "web-framework-nextjs-app-router",
1004
- "web-framework-nextjs-server-actions",
1001
+ "web-meta-framework-nuxt",
1002
+ "web-meta-framework-remix",
1003
+ "web-meta-framework-nextjs",
1005
1004
  "web-styling-tailwind",
1006
1005
  "web-styling-scss-modules"
1007
1006
  ];