@agents-inc/cli 0.74.13 → 0.76.0

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 (195) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{chunk-SXGBPQY6.js → chunk-2I5SXGXR.js} +2 -2
  3. package/dist/{chunk-MYSIW4HY.js → chunk-36YW5E7G.js} +5 -5
  4. package/dist/{chunk-T5DJCIUP.js → chunk-3REKTRAN.js} +2 -2
  5. package/dist/{chunk-ICJV3JJF.js → chunk-6F3CZLD6.js} +32 -73
  6. package/dist/chunk-6F3CZLD6.js.map +1 -0
  7. package/dist/{chunk-GHBZ7NUI.js → chunk-7NACNRFG.js} +21 -9
  8. package/dist/chunk-7NACNRFG.js.map +1 -0
  9. package/dist/{chunk-RKZFLLER.js → chunk-7PMFIL5L.js} +3 -3
  10. package/dist/{chunk-TKNPMYKJ.js → chunk-7PZFDI46.js} +4 -4
  11. package/dist/{chunk-NKKYTCBH.js → chunk-7XUKTYVD.js} +706 -327
  12. package/dist/chunk-7XUKTYVD.js.map +1 -0
  13. package/dist/{chunk-4EPFKZB5.js → chunk-AE2QHAFO.js} +23 -17
  14. package/dist/chunk-AE2QHAFO.js.map +1 -0
  15. package/dist/{chunk-OZ4DXMRF.js → chunk-CBJTSEI2.js} +5 -5
  16. package/dist/{chunk-HT5KOOUQ.js → chunk-CCSU4R65.js} +3 -4
  17. package/dist/chunk-CCSU4R65.js.map +1 -0
  18. package/dist/{chunk-W6NWOYMS.js → chunk-CKU7FJNV.js} +4 -4
  19. package/dist/{chunk-SASGCSBZ.js → chunk-EEZSCHS2.js} +9 -9
  20. package/dist/{chunk-CBXMOWQY.js → chunk-ERHTXNIF.js} +3 -3
  21. package/dist/{chunk-2YFC7IJ6.js → chunk-EWBNSS5Y.js} +6 -6
  22. package/dist/{chunk-TQLDQ3XZ.js → chunk-EYFBODHL.js} +2 -2
  23. package/dist/{chunk-AUNBGZS4.js → chunk-FFMWFEUH.js} +2 -2
  24. package/dist/{chunk-EGMQ3SXN.js → chunk-FMYAYX6W.js} +1 -1
  25. package/dist/chunk-FMYAYX6W.js.map +1 -0
  26. package/dist/{chunk-7Q6RMYR3.js → chunk-I2SUTL7S.js} +5 -5
  27. package/dist/{chunk-RRBWNEG3.js → chunk-I534EWJQ.js} +3 -3
  28. package/dist/{chunk-2PZ7LBFT.js → chunk-IDN2OZJY.js} +2 -2
  29. package/dist/{chunk-NG2GGK6P.js → chunk-JWMYAJHD.js} +2974 -3454
  30. package/dist/chunk-JWMYAJHD.js.map +1 -0
  31. package/dist/{chunk-MWGDG4QN.js → chunk-K63OEZW7.js} +2 -2
  32. package/dist/{chunk-BM5Y6LIC.js → chunk-KPRCP3MZ.js} +3 -3
  33. package/dist/{chunk-746DCNGM.js → chunk-LO5QGAP2.js} +5 -5
  34. package/dist/{chunk-IJNNVCS4.js → chunk-M4ZDKHJV.js} +3 -3
  35. package/dist/{chunk-IJNNVCS4.js.map → chunk-M4ZDKHJV.js.map} +1 -1
  36. package/dist/{chunk-CXRVM7BA.js → chunk-M76LNKMY.js} +2 -2
  37. package/dist/{chunk-WF5PMBIR.js → chunk-MLXAZODL.js} +2 -2
  38. package/dist/{chunk-UFKDY45I.js → chunk-NWW3OJH5.js} +3 -3
  39. package/dist/{chunk-ARGCINJC.js → chunk-O5CPXIC4.js} +7 -9
  40. package/dist/chunk-O5CPXIC4.js.map +1 -0
  41. package/dist/{chunk-A5TTDOP4.js → chunk-ODVQXXEO.js} +45 -16
  42. package/dist/{chunk-A5TTDOP4.js.map → chunk-ODVQXXEO.js.map} +1 -1
  43. package/dist/{chunk-EWGFIBBU.js → chunk-PRG7PKZM.js} +5 -5
  44. package/dist/{chunk-SRIH4U5Y.js → chunk-Q4PJSAMP.js} +33 -13
  45. package/dist/chunk-Q4PJSAMP.js.map +1 -0
  46. package/dist/{chunk-Q3F36QZZ.js → chunk-R7F5YQMI.js} +2 -2
  47. package/dist/{chunk-JQSJH72Q.js → chunk-S6DKM6MJ.js} +6 -6
  48. package/dist/{chunk-XMLCXRTS.js → chunk-SQ7WINEU.js} +3 -3
  49. package/dist/{chunk-LVNNP7T4.js → chunk-UBNHVBSV.js} +4 -4
  50. package/dist/{chunk-NPMGVQM4.js → chunk-VQV3DSHD.js} +6 -6
  51. package/dist/{chunk-ZU7AOE3X.js → chunk-WMMU5FOO.js} +15 -16
  52. package/dist/chunk-WMMU5FOO.js.map +1 -0
  53. package/dist/{chunk-4CRWKTNQ.js → chunk-WN2TUP4M.js} +4 -10
  54. package/dist/chunk-WN2TUP4M.js.map +1 -0
  55. package/dist/{chunk-6W4H2K3Z.js → chunk-WS3TL2AO.js} +35 -21
  56. package/dist/chunk-WS3TL2AO.js.map +1 -0
  57. package/dist/{chunk-7X4F4HCO.js → chunk-WZ5S4LGX.js} +6 -6
  58. package/dist/{chunk-IJLAVOKZ.js → chunk-XYZ7B5BY.js} +2 -2
  59. package/dist/commands/build/marketplace.js +5 -5
  60. package/dist/commands/build/plugins.js +9 -9
  61. package/dist/commands/build/stack.js +9 -9
  62. package/dist/commands/compile.js +10 -10
  63. package/dist/commands/config/index.js +9 -9
  64. package/dist/commands/config/path.js +8 -8
  65. package/dist/commands/config/show.js +9 -9
  66. package/dist/commands/diff.js +8 -8
  67. package/dist/commands/doctor.js +8 -8
  68. package/dist/commands/edit.js +33 -33
  69. package/dist/commands/eject.js +8 -8
  70. package/dist/commands/import/skill.js +9 -9
  71. package/dist/commands/info.js +9 -17
  72. package/dist/commands/info.js.map +1 -1
  73. package/dist/commands/init.js +33 -33
  74. package/dist/commands/list.js +8 -8
  75. package/dist/commands/new/agent.js +9 -9
  76. package/dist/commands/new/marketplace.js +10 -10
  77. package/dist/commands/new/skill.js +9 -9
  78. package/dist/commands/outdated.js +8 -8
  79. package/dist/commands/search.js +14 -15
  80. package/dist/commands/search.js.map +1 -1
  81. package/dist/commands/uninstall.js +9 -9
  82. package/dist/commands/update.js +10 -10
  83. package/dist/commands/validate.js +9 -9
  84. package/dist/components/common/select-list.js +2 -2
  85. package/dist/components/skill-search/skill-search.js +3 -3
  86. package/dist/components/wizard/category-grid.js +4 -4
  87. package/dist/components/wizard/category-grid.test.js +18 -19
  88. package/dist/components/wizard/category-grid.test.js.map +1 -1
  89. package/dist/components/wizard/checkbox-grid.js +4 -4
  90. package/dist/components/wizard/checkbox-grid.test.js +4 -4
  91. package/dist/components/wizard/domain-selection.js +13 -13
  92. package/dist/components/wizard/help-modal.js +2 -2
  93. package/dist/components/wizard/menu-item.js +1 -1
  94. package/dist/components/wizard/search-modal.js +3 -3
  95. package/dist/components/wizard/search-modal.test.js +3 -3
  96. package/dist/components/wizard/section-progress.js +2 -2
  97. package/dist/components/wizard/section-progress.test.js +2 -2
  98. package/dist/components/wizard/selection-card.js +2 -2
  99. package/dist/components/wizard/source-grid.js +6 -6
  100. package/dist/components/wizard/source-grid.test.js +15 -15
  101. package/dist/components/wizard/stack-selection.js +11 -11
  102. package/dist/components/wizard/step-agents.js +12 -12
  103. package/dist/components/wizard/step-agents.test.js +15 -15
  104. package/dist/components/wizard/step-build.js +12 -12
  105. package/dist/components/wizard/step-build.test.js +14 -14
  106. package/dist/components/wizard/step-confirm.js +5 -5
  107. package/dist/components/wizard/step-confirm.test.js +11 -11
  108. package/dist/components/wizard/step-refine.js +2 -2
  109. package/dist/components/wizard/step-refine.test.js +2 -2
  110. package/dist/components/wizard/step-settings.js +10 -10
  111. package/dist/components/wizard/step-settings.test.js +13 -13
  112. package/dist/components/wizard/step-sources.js +14 -14
  113. package/dist/components/wizard/step-sources.test.js +17 -17
  114. package/dist/components/wizard/step-stack.js +16 -16
  115. package/dist/components/wizard/step-stack.test.js +17 -17
  116. package/dist/components/wizard/wizard-layout.js +11 -11
  117. package/dist/components/wizard/wizard-tabs.js +2 -2
  118. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  119. package/dist/components/wizard/wizard.js +30 -30
  120. package/dist/config-exports.js +1 -1
  121. package/dist/hooks/init.js +33 -33
  122. package/dist/{loader-NHUCFMFQ.js → loader-7RQ4G4TH.js} +5 -5
  123. package/dist/plugins/dummy-skill/.claude-plugin/.content-hash +1 -0
  124. package/dist/plugins/dummy-skill/.claude-plugin/plugin.json +13 -0
  125. package/dist/{source-loader-42GVUFZA.js → source-loader-CXCIDGWV.js} +8 -8
  126. package/dist/source-manager-TPLO2DVS.js +19 -0
  127. package/dist/src/agents/_templates/agent.liquid +24 -0
  128. package/dist/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
  129. package/dist/src/agents/_templates/methodologies/context-management.liquid +162 -0
  130. package/dist/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
  131. package/dist/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
  132. package/dist/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
  133. package/dist/src/agents/_templates/methodologies/write-verification.liquid +43 -0
  134. package/dist/src/agents/meta/agent-summoner/workflow.md +2 -2
  135. package/dist/src/agents/meta/skill-summoner/workflow.md +48 -3
  136. package/dist/stores/wizard-store.js +8 -8
  137. package/dist/stores/wizard-store.test.js +36 -36
  138. package/dist/stores/wizard-store.test.js.map +1 -1
  139. package/package.json +1 -1
  140. package/src/agents/_templates/agent.liquid +24 -0
  141. package/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
  142. package/src/agents/_templates/methodologies/context-management.liquid +162 -0
  143. package/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
  144. package/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
  145. package/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
  146. package/src/agents/_templates/methodologies/write-verification.liquid +43 -0
  147. package/src/agents/meta/agent-summoner/workflow.md +2 -2
  148. package/src/agents/meta/skill-summoner/workflow.md +48 -3
  149. package/src/schemas/custom-metadata.schema.json +0 -7
  150. package/src/schemas/metadata.schema.json +0 -7
  151. package/dist/chunk-4CRWKTNQ.js.map +0 -1
  152. package/dist/chunk-4EPFKZB5.js.map +0 -1
  153. package/dist/chunk-6W4H2K3Z.js.map +0 -1
  154. package/dist/chunk-ARGCINJC.js.map +0 -1
  155. package/dist/chunk-EGMQ3SXN.js.map +0 -1
  156. package/dist/chunk-GHBZ7NUI.js.map +0 -1
  157. package/dist/chunk-HT5KOOUQ.js.map +0 -1
  158. package/dist/chunk-ICJV3JJF.js.map +0 -1
  159. package/dist/chunk-NG2GGK6P.js.map +0 -1
  160. package/dist/chunk-NKKYTCBH.js.map +0 -1
  161. package/dist/chunk-SRIH4U5Y.js.map +0 -1
  162. package/dist/chunk-ZU7AOE3X.js.map +0 -1
  163. package/dist/source-manager-WRZBOTEH.js +0 -19
  164. /package/dist/{chunk-SXGBPQY6.js.map → chunk-2I5SXGXR.js.map} +0 -0
  165. /package/dist/{chunk-MYSIW4HY.js.map → chunk-36YW5E7G.js.map} +0 -0
  166. /package/dist/{chunk-T5DJCIUP.js.map → chunk-3REKTRAN.js.map} +0 -0
  167. /package/dist/{chunk-RKZFLLER.js.map → chunk-7PMFIL5L.js.map} +0 -0
  168. /package/dist/{chunk-TKNPMYKJ.js.map → chunk-7PZFDI46.js.map} +0 -0
  169. /package/dist/{chunk-OZ4DXMRF.js.map → chunk-CBJTSEI2.js.map} +0 -0
  170. /package/dist/{chunk-W6NWOYMS.js.map → chunk-CKU7FJNV.js.map} +0 -0
  171. /package/dist/{chunk-SASGCSBZ.js.map → chunk-EEZSCHS2.js.map} +0 -0
  172. /package/dist/{chunk-CBXMOWQY.js.map → chunk-ERHTXNIF.js.map} +0 -0
  173. /package/dist/{chunk-2YFC7IJ6.js.map → chunk-EWBNSS5Y.js.map} +0 -0
  174. /package/dist/{chunk-TQLDQ3XZ.js.map → chunk-EYFBODHL.js.map} +0 -0
  175. /package/dist/{chunk-AUNBGZS4.js.map → chunk-FFMWFEUH.js.map} +0 -0
  176. /package/dist/{chunk-7Q6RMYR3.js.map → chunk-I2SUTL7S.js.map} +0 -0
  177. /package/dist/{chunk-RRBWNEG3.js.map → chunk-I534EWJQ.js.map} +0 -0
  178. /package/dist/{chunk-2PZ7LBFT.js.map → chunk-IDN2OZJY.js.map} +0 -0
  179. /package/dist/{chunk-MWGDG4QN.js.map → chunk-K63OEZW7.js.map} +0 -0
  180. /package/dist/{chunk-BM5Y6LIC.js.map → chunk-KPRCP3MZ.js.map} +0 -0
  181. /package/dist/{chunk-746DCNGM.js.map → chunk-LO5QGAP2.js.map} +0 -0
  182. /package/dist/{chunk-CXRVM7BA.js.map → chunk-M76LNKMY.js.map} +0 -0
  183. /package/dist/{chunk-WF5PMBIR.js.map → chunk-MLXAZODL.js.map} +0 -0
  184. /package/dist/{chunk-UFKDY45I.js.map → chunk-NWW3OJH5.js.map} +0 -0
  185. /package/dist/{chunk-EWGFIBBU.js.map → chunk-PRG7PKZM.js.map} +0 -0
  186. /package/dist/{chunk-Q3F36QZZ.js.map → chunk-R7F5YQMI.js.map} +0 -0
  187. /package/dist/{chunk-JQSJH72Q.js.map → chunk-S6DKM6MJ.js.map} +0 -0
  188. /package/dist/{chunk-XMLCXRTS.js.map → chunk-SQ7WINEU.js.map} +0 -0
  189. /package/dist/{chunk-LVNNP7T4.js.map → chunk-UBNHVBSV.js.map} +0 -0
  190. /package/dist/{chunk-NPMGVQM4.js.map → chunk-VQV3DSHD.js.map} +0 -0
  191. /package/dist/{chunk-7X4F4HCO.js.map → chunk-WZ5S4LGX.js.map} +0 -0
  192. /package/dist/{chunk-IJLAVOKZ.js.map → chunk-XYZ7B5BY.js.map} +0 -0
  193. /package/dist/{loader-NHUCFMFQ.js.map → loader-7RQ4G4TH.js.map} +0 -0
  194. /package/dist/{source-loader-42GVUFZA.js.map → source-loader-CXCIDGWV.js.map} +0 -0
  195. /package/dist/{source-manager-WRZBOTEH.js.map → source-manager-TPLO2DVS.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/skill-search/skill-search.tsx","../src/cli/components/hooks/use-filtered-results.ts"],"sourcesContent":["import React, { useState, useCallback } from \"react\";\nimport { Box, Text, useApp, useInput } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { cliTheme } from \"../themes/default.js\";\nimport type { ResolvedSkill, SkillId } from \"../../types/index.js\";\nimport { CLI_COLORS, UI_SYMBOLS, UI_LAYOUT } from \"../../consts.js\";\nimport {\n HOTKEY_COPY_LINK,\n KEY_LABEL_ENTER,\n KEY_LABEL_ESC,\n KEY_LABEL_SPACE,\n KEY_LABEL_VIM_VERT,\n isHotkey,\n} from \"../wizard/hotkeys.js\";\nimport { useTextInput } from \"../hooks/use-text-input.js\";\nimport { useFilteredResults } from \"../hooks/use-filtered-results.js\";\n\nexport type SourcedSkill = ResolvedSkill & {\n sourceName: string;\n sourceUrl?: string;\n};\n\nexport type SkillSearchResult = {\n selectedSkills: SourcedSkill[];\n cancelled: boolean;\n};\n\nexport type SkillSearchProps = {\n skills: SourcedSkill[];\n sourceCount: number;\n initialQuery?: string;\n onComplete: (result: SkillSearchResult) => void;\n onCancel: () => void;\n};\n\nconst {\n MAX_VISIBLE_RESULTS,\n DESCRIPTION_WIDTH,\n COPIED_MESSAGE_TIMEOUT_MS,\n FALLBACK_MESSAGE_TIMEOUT_MS,\n} = UI_LAYOUT;\nconst { CHECKBOX_CHECKED, CHECKBOX_UNCHECKED } = UI_SYMBOLS;\n\nfunction matchesQuery(skill: SourcedSkill, query: string): boolean {\n if (!query.trim()) return true;\n\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 return skill.sourceName.toLowerCase().includes(lowerQuery);\n}\n\nfunction truncate(text: string, maxLength: number): string {\n if (text.length <= maxLength) return text;\n return `${text.slice(0, maxLength - 3)}...`;\n}\n\ntype HeaderProps = {\n sourceCount: number;\n};\n\nconst Header: React.FC<HeaderProps> = ({ sourceCount }) => {\n return (\n <Box\n flexDirection=\"row\"\n justifyContent=\"space-between\"\n borderStyle=\"single\"\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n paddingX={1}\n >\n <Text bold color={CLI_COLORS.PRIMARY}>\n Search Skills\n </Text>\n <Text dimColor>\n {sourceCount} source{sourceCount !== 1 ? \"s\" : \"\"}\n </Text>\n </Box>\n );\n};\n\ntype SearchInputProps = {\n value: string;\n};\n\nconst SearchInput: React.FC<SearchInputProps> = ({ value }) => {\n return (\n <Box paddingX={1} paddingY={1}>\n <Text color={CLI_COLORS.FOCUS}>{\">\"} </Text>\n <Text>{value}</Text>\n <Text color={CLI_COLORS.FOCUS}>_</Text>\n </Box>\n );\n};\n\ntype ResultItemProps = {\n skill: SourcedSkill;\n isSelected: boolean;\n isFocused: boolean;\n};\n\nconst ResultItem: React.FC<ResultItemProps> = ({ skill, isSelected, isFocused }) => {\n const checkbox = isSelected ? CHECKBOX_CHECKED : CHECKBOX_UNCHECKED;\n const displayName = skill.displayName;\n return (\n <Box flexDirection=\"row\" gap={1}>\n <Text\n color={isFocused ? CLI_COLORS.FOCUS : isSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={isFocused}\n backgroundColor={isFocused ? \"#333333\" : undefined}\n >\n {\" \"}\n {checkbox}{\" \"}\n </Text>\n <Box width={14}>\n <Text dimColor>{truncate(skill.sourceName, 12)}</Text>\n </Box>\n <Box width={24}>\n <Text color={isFocused ? CLI_COLORS.FOCUS : undefined} bold={isFocused || isSelected}>\n {truncate(displayName, 22)}\n </Text>\n </Box>\n <Text dimColor>{truncate(skill.description, DESCRIPTION_WIDTH)}</Text>\n </Box>\n );\n};\n\ntype ResultsListProps = {\n results: SourcedSkill[];\n selectedIds: Set<SkillId>;\n focusedIndex: number;\n scrollOffset: number;\n};\n\nconst ResultsList: React.FC<ResultsListProps> = ({\n results,\n selectedIds,\n focusedIndex,\n scrollOffset,\n}) => {\n const visibleResults = results.slice(scrollOffset, scrollOffset + MAX_VISIBLE_RESULTS);\n\n if (results.length === 0) {\n return (\n <Box paddingX={1} paddingY={1}>\n <Text dimColor>No skills found matching your search.</Text>\n </Box>\n );\n }\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderTop={false}\n borderBottom={false}\n paddingX={1}\n >\n {visibleResults.map((skill, index) => {\n const actualIndex = scrollOffset + index;\n return (\n <ResultItem\n key={skill.id}\n skill={skill}\n isSelected={selectedIds.has(skill.id)}\n isFocused={actualIndex === focusedIndex}\n />\n );\n })}\n </Box>\n );\n};\n\ntype StatusBarProps = {\n resultCount: number;\n selectedCount: number;\n};\n\nconst StatusBar: React.FC<StatusBarProps> = ({ resultCount, selectedCount }) => {\n return (\n <Box paddingX={1}>\n <Text dimColor>\n {resultCount} result{resultCount !== 1 ? \"s\" : \"\"}\n {selectedCount > 0 && <Text color={CLI_COLORS.SUCCESS}> | {selectedCount} selected</Text>}\n </Text>\n </Box>\n );\n};\n\ntype FooterProps = {\n hasSelection: boolean;\n};\n\nconst Footer: React.FC<FooterProps> = ({ hasSelection }) => {\n return (\n <Box\n flexDirection=\"row\"\n justifyContent=\"center\"\n gap={2}\n borderStyle=\"single\"\n borderTop={false}\n borderLeft={false}\n borderRight={false}\n paddingX={1}\n marginTop={1}\n >\n <Text dimColor>\n <Text color={CLI_COLORS.UNFOCUSED}>{KEY_LABEL_VIM_VERT}</Text> navigate\n </Text>\n <Text dimColor>\n <Text color={CLI_COLORS.UNFOCUSED}>{KEY_LABEL_SPACE}</Text> select\n </Text>\n {hasSelection && (\n <Text dimColor>\n <Text color={CLI_COLORS.SUCCESS}>{KEY_LABEL_ENTER}</Text> import\n </Text>\n )}\n <Text dimColor>\n <Text color={CLI_COLORS.UNFOCUSED}>{HOTKEY_COPY_LINK.label}</Text> copy link\n </Text>\n <Text dimColor>\n <Text color={CLI_COLORS.WARNING}>{KEY_LABEL_ESC}</Text> cancel\n </Text>\n </Box>\n );\n};\n\nexport const SkillSearch: React.FC<SkillSearchProps> = ({\n skills,\n sourceCount,\n initialQuery = \"\",\n onComplete,\n onCancel,\n}) => {\n const { exit } = useApp();\n\n const { value: query, handleInput: handleTextInput } = useTextInput(initialQuery);\n const [selectedIds, setSelectedIds] = useState<Set<SkillId>>(new Set());\n const [copiedMessage, setCopiedMessage] = useState<string | null>(null);\n\n const {\n filteredResults,\n safeFocusedIndex,\n focusedItem: focusedSkill,\n scrollOffset,\n moveUp,\n moveDown,\n } = useFilteredResults({\n items: skills,\n query,\n filterFn: matchesQuery,\n maxVisible: MAX_VISIBLE_RESULTS,\n });\n\n const toggleSelection = useCallback((skillId: SkillId) => {\n setSelectedIds((prev) => {\n const next = new Set(prev);\n if (next.has(skillId)) {\n next.delete(skillId);\n } else {\n next.add(skillId);\n }\n return next;\n });\n }, []);\n\n const copySkillLink = useCallback(async (skill: SourcedSkill) => {\n const link = skill.sourceUrl ? `${skill.sourceUrl}/${skill.id}` : skill.id;\n\n try {\n // OSC 52 terminal clipboard escape sequence\n const encoded = Buffer.from(link).toString(\"base64\");\n process.stdout.write(`\\x1b]52;c;${encoded}\\x07`);\n setCopiedMessage(`Copied: ${link}`);\n setTimeout(() => setCopiedMessage(null), COPIED_MESSAGE_TIMEOUT_MS);\n } catch {\n setCopiedMessage(`Link: ${link}`);\n setTimeout(() => setCopiedMessage(null), FALLBACK_MESSAGE_TIMEOUT_MS);\n }\n }, []);\n\n useInput((input, key) => {\n if (key.escape) {\n onCancel();\n exit();\n return;\n }\n\n if (key.return) {\n if (selectedIds.size > 0) {\n const selectedSkills = filteredResults.filter((s) => selectedIds.has(s.id));\n onComplete({\n selectedSkills,\n cancelled: false,\n });\n exit();\n }\n return;\n }\n\n if (input === \" \" && focusedSkill) {\n toggleSelection(focusedSkill.id);\n return;\n }\n\n if (isHotkey(input, HOTKEY_COPY_LINK) && focusedSkill) {\n void copySkillLink(focusedSkill);\n return;\n }\n\n const isUp = key.upArrow || input === \"k\";\n const isDown = key.downArrow || input === \"j\";\n\n if (isUp) {\n moveUp();\n }\n\n if (isDown) {\n moveDown();\n }\n\n handleTextInput(input, key);\n });\n\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\">\n <Header sourceCount={sourceCount} />\n <SearchInput value={query} />\n <ResultsList\n results={filteredResults}\n selectedIds={selectedIds}\n focusedIndex={safeFocusedIndex}\n scrollOffset={scrollOffset}\n />\n <StatusBar resultCount={filteredResults.length} selectedCount={selectedIds.size} />\n {copiedMessage && (\n <Box paddingX={1}>\n <Text color={CLI_COLORS.SUCCESS}>{copiedMessage}</Text>\n </Box>\n )}\n <Footer hasSelection={selectedIds.size > 0} />\n </Box>\n </ThemeProvider>\n );\n};\n","import { useState, useMemo, useEffect, useCallback, useRef } from \"react\";\n\ntype UseFilteredResultsOptions<T> = {\n /** Items to filter */\n items: T[];\n /** Current search query */\n query: string;\n /** Filter predicate — returns true if item matches the query */\n filterFn: (item: T, query: string) => boolean;\n /** Number of visible rows in the scrollable viewport */\n maxVisible: number;\n};\n\ntype UseFilteredResultsResult<T> = {\n /** Items that pass the filter */\n filteredResults: T[];\n /** Index clamped to valid range */\n safeFocusedIndex: number;\n /** The item at safeFocusedIndex, or undefined when empty */\n focusedItem: T | undefined;\n /** First visible row offset for windowed rendering */\n scrollOffset: number;\n /** Move focus up one row (clamped, adjusts scroll) */\n moveUp: () => void;\n /** Move focus down one row (clamped, adjusts scroll) */\n moveDown: () => void;\n};\n\n/**\n * Manages filtered list state: query-based filtering, focus tracking,\n * and scroll-offset synchronisation for windowed rendering.\n * Focus and scroll reset automatically when the query changes.\n */\nexport function useFilteredResults<T>({\n items,\n query,\n filterFn,\n maxVisible,\n}: UseFilteredResultsOptions<T>): UseFilteredResultsResult<T> {\n const [focusedIndex, setFocusedIndex] = useState(0);\n const [scrollOffset, setScrollOffset] = useState(0);\n\n useEffect(() => {\n setFocusedIndex(0);\n setScrollOffset(0);\n }, [query]);\n\n const filteredResults = useMemo(() => {\n return items.filter((item) => filterFn(item, query));\n }, [items, query, filterFn]);\n\n const safeFocusedIndex = Math.min(focusedIndex, Math.max(0, filteredResults.length - 1));\n const focusedItem = filteredResults[safeFocusedIndex] as T | undefined;\n\n // Refs for stable callback access (matches use-keyboard-navigation pattern)\n const safeFocusedIndexRef = useRef(safeFocusedIndex);\n const scrollOffsetRef = useRef(scrollOffset);\n const resultCountRef = useRef(filteredResults.length);\n\n useEffect(() => {\n safeFocusedIndexRef.current = safeFocusedIndex;\n }, [safeFocusedIndex]);\n\n useEffect(() => {\n scrollOffsetRef.current = scrollOffset;\n }, [scrollOffset]);\n\n useEffect(() => {\n resultCountRef.current = filteredResults.length;\n }, [filteredResults.length]);\n\n const moveUp = useCallback(() => {\n const current = safeFocusedIndexRef.current;\n if (current <= 0) return;\n const newIndex = current - 1;\n setFocusedIndex(newIndex);\n if (newIndex < scrollOffsetRef.current) {\n setScrollOffset(newIndex);\n }\n }, []);\n\n const moveDown = useCallback(() => {\n const current = safeFocusedIndexRef.current;\n if (current >= resultCountRef.current - 1) return;\n const newIndex = current + 1;\n setFocusedIndex(newIndex);\n if (newIndex >= scrollOffsetRef.current + maxVisible) {\n setScrollOffset(newIndex - maxVisible + 1);\n }\n }, [maxVisible]);\n\n return {\n filteredResults,\n safeFocusedIndex,\n focusedItem,\n scrollOffset,\n moveUp,\n moveDown,\n };\n}\n"],"mappings":"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","names":["useState","useCallback","useState","useCallback"]}
@@ -7,13 +7,13 @@ import {
7
7
  loadProjectSourceConfig,
8
8
  resolveAgentsSource,
9
9
  resolveSource
10
- } from "./chunk-6W4H2K3Z.js";
10
+ } from "./chunk-WS3TL2AO.js";
11
11
  import {
12
12
  BaseCommand
13
- } from "./chunk-IJLAVOKZ.js";
13
+ } from "./chunk-XYZ7B5BY.js";
14
14
  import {
15
15
  DEFAULT_BRANDING
16
- } from "./chunk-EGMQ3SXN.js";
16
+ } from "./chunk-FMYAYX6W.js";
17
17
  import {
18
18
  init_esm_shims
19
19
  } from "./chunk-DHET7RCE.js";
@@ -90,4 +90,4 @@ ${DEFAULT_BRANDING.NAME} Configuration
90
90
  export {
91
91
  ConfigShow
92
92
  };
93
- //# sourceMappingURL=chunk-W6NWOYMS.js.map
93
+ //# sourceMappingURL=chunk-CKU7FJNV.js.map
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Wizard
4
- } from "./chunk-A5TTDOP4.js";
4
+ } from "./chunk-ODVQXXEO.js";
5
5
  import {
6
6
  SelectList
7
- } from "./chunk-WF5PMBIR.js";
7
+ } from "./chunk-MLXAZODL.js";
8
8
  import {
9
9
  KEY_LABEL_ARROWS_VERT,
10
10
  KEY_LABEL_ENTER,
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  STATUS_MESSAGES,
15
15
  SUCCESS_MESSAGES
16
- } from "./chunk-CXRVM7BA.js";
16
+ } from "./chunk-M76LNKMY.js";
17
17
  import {
18
18
  claudePluginInstall,
19
19
  claudePluginMarketplaceAdd,
@@ -27,14 +27,14 @@ import {
27
27
  installPluginConfig,
28
28
  loadProjectConfig,
29
29
  loadSkillsMatrixFromSource
30
- } from "./chunk-6W4H2K3Z.js";
30
+ } from "./chunk-WS3TL2AO.js";
31
31
  import {
32
32
  getSkillById
33
- } from "./chunk-NG2GGK6P.js";
33
+ } from "./chunk-JWMYAJHD.js";
34
34
  import {
35
35
  BaseCommand,
36
36
  EXIT_CODES
37
- } from "./chunk-IJLAVOKZ.js";
37
+ } from "./chunk-XYZ7B5BY.js";
38
38
  import {
39
39
  disableBuffering,
40
40
  drainBuffer,
@@ -45,7 +45,7 @@ import {
45
45
  settingsFileSchema,
46
46
  warn,
47
47
  warnUnknownFields
48
- } from "./chunk-4CRWKTNQ.js";
48
+ } from "./chunk-WN2TUP4M.js";
49
49
  import {
50
50
  ASCII_LOGO,
51
51
  CLAUDE_DIR,
@@ -55,7 +55,7 @@ import {
55
55
  DEFAULT_BRANDING,
56
56
  GLOBAL_INSTALL_ROOT,
57
57
  MAX_CONFIG_FILE_SIZE
58
- } from "./chunk-EGMQ3SXN.js";
58
+ } from "./chunk-FMYAYX6W.js";
59
59
  import {
60
60
  init_esm_shims
61
61
  } from "./chunk-DHET7RCE.js";
@@ -473,4 +473,4 @@ export {
473
473
  showDashboard,
474
474
  Init
475
475
  };
476
- //# sourceMappingURL=chunk-SASGCSBZ.js.map
476
+ //# sourceMappingURL=chunk-EEZSCHS2.js.map
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useRowScroll
4
- } from "./chunk-XMLCXRTS.js";
4
+ } from "./chunk-SQ7WINEU.js";
5
5
  import {
6
6
  ViewTitle
7
7
  } from "./chunk-JNQKCZA3.js";
8
8
  import {
9
9
  CLI_COLORS,
10
10
  UI_SYMBOLS
11
- } from "./chunk-EGMQ3SXN.js";
11
+ } from "./chunk-FMYAYX6W.js";
12
12
  import {
13
13
  init_esm_shims
14
14
  } from "./chunk-DHET7RCE.js";
@@ -115,4 +115,4 @@ var CheckboxGrid = ({
115
115
  export {
116
116
  CheckboxGrid
117
117
  };
118
- //# sourceMappingURL=chunk-CBXMOWQY.js.map
118
+ //# sourceMappingURL=chunk-ERHTXNIF.js.map
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SelectionCard
4
- } from "./chunk-MWGDG4QN.js";
4
+ } from "./chunk-K63OEZW7.js";
5
5
  import {
6
6
  useSectionScroll
7
- } from "./chunk-AUNBGZS4.js";
7
+ } from "./chunk-FFMWFEUH.js";
8
8
  import {
9
9
  useWizardStore
10
- } from "./chunk-EWGFIBBU.js";
10
+ } from "./chunk-PRG7PKZM.js";
11
11
  import {
12
12
  matrix
13
- } from "./chunk-NG2GGK6P.js";
13
+ } from "./chunk-JWMYAJHD.js";
14
14
  import {
15
15
  DEFAULT_SCRATCH_DOMAINS
16
- } from "./chunk-EGMQ3SXN.js";
16
+ } from "./chunk-FMYAYX6W.js";
17
17
  import {
18
18
  init_esm_shims
19
19
  } from "./chunk-DHET7RCE.js";
@@ -110,4 +110,4 @@ var StackSelection = ({
110
110
  export {
111
111
  StackSelection
112
112
  };
113
- //# sourceMappingURL=chunk-2YFC7IJ6.js.map
113
+ //# sourceMappingURL=chunk-EWBNSS5Y.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CLI_COLORS
4
- } from "./chunk-EGMQ3SXN.js";
4
+ } from "./chunk-FMYAYX6W.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -45,4 +45,4 @@ var SectionProgress = ({
45
45
  export {
46
46
  SectionProgress
47
47
  };
48
- //# sourceMappingURL=chunk-TQLDQ3XZ.js.map
48
+ //# sourceMappingURL=chunk-EYFBODHL.js.map
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SCROLL_VIEWPORT
4
- } from "./chunk-EGMQ3SXN.js";
4
+ } from "./chunk-FMYAYX6W.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -71,4 +71,4 @@ export {
71
71
  useSectionScroll,
72
72
  computeRowScrollTop
73
73
  };
74
- //# sourceMappingURL=chunk-AUNBGZS4.js.map
74
+ //# sourceMappingURL=chunk-FFMWFEUH.js.map
@@ -203,4 +203,4 @@ export {
203
203
  DEFAULT_SCRATCH_DOMAINS,
204
204
  ASCII_LOGO
205
205
  };
206
- //# sourceMappingURL=chunk-EGMQ3SXN.js.map
206
+ //# sourceMappingURL=chunk-FMYAYX6W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/consts.ts"],"sourcesContent":["import os from \"os\";\nimport path from \"path\";\nimport { fileURLToPath } from \"url\";\nimport type { Domain } from \"./types/index.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\n// After tsup build, dist/ is flat, so we go up one level from dist/ to get CLI root\n// In development (src/cli/consts.ts), we go up two levels\nconst isInDist = __dirname.includes(\"/dist\");\nconst CLI_ROOT = isInDist ? path.resolve(__dirname, \"..\") : path.resolve(__dirname, \"../..\");\nexport const PROJECT_ROOT = CLI_ROOT;\n\nexport const CLAUDE_DIR = \".claude\";\nexport const CLAUDE_SRC_DIR = \".claude-src\";\nexport const PLUGINS_SUBDIR = \"plugins\";\nexport const PLUGIN_MANIFEST_DIR = \".claude-plugin\";\nexport const PLUGIN_MANIFEST_FILE = \"plugin.json\";\nexport const DEFAULT_PLUGIN_NAME = \"agents-inc\";\n\n/** Home directory used as the root for global installations */\nexport const GLOBAL_INSTALL_ROOT = os.homedir();\n\nexport const CACHE_DIR = path.join(os.homedir(), \".cache\", DEFAULT_PLUGIN_NAME);\n\nexport const CLI_BIN_NAME = \"agentsinc\";\n\nexport const SKILL_CATEGORIES_PATH = \"config/skill-categories.ts\";\nexport const SKILL_RULES_PATH = \"config/skill-rules.ts\";\nexport const STACKS_FILE_PATH = \"config/stacks.ts\";\nexport const SKILLS_DIR_PATH = \"src/skills\";\nexport const LOCAL_SKILLS_PATH = \".claude/skills\";\n\nexport const DIRS = {\n agents: \"src/agents\",\n skills: \"src/skills\",\n stacks: \"src/stacks\",\n templates: \"src/agents/_templates\",\n commands: \"src/commands\",\n} as const;\n\nexport const STANDARD_FILES = {\n SKILL_MD: \"SKILL.md\",\n METADATA_YAML: \"metadata.yaml\",\n METADATA_JSON: \"metadata.json\",\n CONFIG_YAML: \"config.yaml\",\n SKILL_CATEGORIES_TS: \"skill-categories.ts\",\n SKILL_RULES_TS: \"skill-rules.ts\",\n AGENT_METADATA_YAML: \"metadata.yaml\",\n PLUGIN_JSON: \"plugin.json\",\n CONFIG_TS: \"config.ts\",\n CONFIG_TYPES_TS: \"config-types.ts\",\n CLAUDE_MD: \"CLAUDE.md\",\n REFERENCE_MD: \"reference.md\",\n INTRO_MD: \"intro.md\",\n WORKFLOW_MD: \"workflow.md\",\n EXAMPLES_MD: \"examples.md\",\n OUTPUT_FORMAT_MD: \"output-format.md\",\n CRITICAL_REQUIREMENTS_MD: \"critical-requirements.md\",\n CRITICAL_REMINDERS_MD: \"critical-reminders.md\",\n} as const;\n\nexport const STANDARD_DIRS = {\n EXAMPLES: \"examples\",\n SCRIPTS: \"scripts\",\n SKILLS: \"skills\",\n} as const;\n\nexport const DEFAULT_VERSION = \"1.0.0\";\n\n// \"0.0.0\" indicates no version was explicitly set\nexport const DEFAULT_DISPLAY_VERSION = \"0.0.0\";\n\n// JSON Schema URLs for yaml-language-server $schema comments.\n// Uses raw.githubusercontent.com so schemas resolve without requiring the CLI as a dependency.\nconst SCHEMA_PKG_PREFIX = \"https://raw.githubusercontent.com/agents-inc/cli/main/src/schemas\";\n\nexport const SCHEMA_PATHS = {\n agent: `${SCHEMA_PKG_PREFIX}/agent.schema.json`,\n metadata: `${SCHEMA_PKG_PREFIX}/metadata.schema.json`,\n marketplace: `${SCHEMA_PKG_PREFIX}/marketplace.schema.json`,\n projectConfig: `${SCHEMA_PKG_PREFIX}/project-config.schema.json`,\n projectSourceConfig: `${SCHEMA_PKG_PREFIX}/project-source-config.schema.json`,\n stacks: `${SCHEMA_PKG_PREFIX}/stacks.schema.json`,\n} as const;\n\n/** Generates a yaml-language-server schema comment for the top of YAML files. */\nexport function yamlSchemaComment(schemaPath: string): string {\n return `# yaml-language-server: $schema=${schemaPath}`;\n}\n\nexport const YAML_FORMATTING = {\n INDENT: 2,\n LINE_WIDTH: 120,\n /** lineWidth: 0 disables wrapping — used for metadata files */\n LINE_WIDTH_NONE: 0,\n} as const;\n\nexport const UI_SYMBOLS = {\n CHECKBOX_CHECKED: \"[x]\",\n CHECKBOX_UNCHECKED: \"[ ]\",\n CHEVRON: \"\\u276F\",\n CHEVRON_SPACER: \" \",\n SELECTED: \"\\u2713\",\n UNSELECTED: \"\\u25CB\",\n CURRENT: \"\\u25CF\",\n SKIPPED: \"\\u2013\",\n DISCOURAGED: \"!\",\n DISABLED: \"\\u2013\",\n SCROLL_UP: \"\\u25B2\",\n SCROLL_DOWN: \"\\u25BC\",\n} as const;\n\nexport const UI_LAYOUT = {\n MAX_VISIBLE_RESULTS: 10,\n DESCRIPTION_WIDTH: 30,\n COPIED_MESSAGE_TIMEOUT_MS: 2000,\n FALLBACK_MESSAGE_TIMEOUT_MS: 3000,\n} as const;\n\nexport const GITHUB_SOURCE = {\n HTTPS_PREFIX: \"https://github.com/\",\n GITHUB_PREFIX: \"github:\",\n GH_PREFIX: \"gh:\",\n} as const;\n\nexport const DEFAULT_SKILLS_SUBDIR = \"skills\";\n\n/** Strict kebab-case: starts with letter, segments separated by single hyphens, no trailing hyphens */\nexport const KEBAB_CASE_PATTERN = /^[a-z][a-z0-9]*(-[a-z0-9]+)*$/;\n\nexport const HASH_PREFIX_LENGTH = 7;\n\n/** Hex chars from SHA-256 hash used in cache directory names (64 bits of collision resistance) */\nexport const CACHE_HASH_LENGTH = 16;\n\n/** Max chars of human-readable prefix in cache directory names (for debugging) */\nexport const CACHE_READABLE_PREFIX_LENGTH = 32;\n\n// File size limits for parsing boundaries (DoS prevention)\nconst ONE_MB = 1024 * 1024;\nexport const MAX_MARKETPLACE_FILE_SIZE = 10 * ONE_MB;\nexport const MAX_PLUGIN_FILE_SIZE = ONE_MB;\nexport const MAX_CONFIG_FILE_SIZE = ONE_MB;\n\nexport const MAX_JSON_NESTING_DEPTH = 10;\nexport const MAX_MARKETPLACE_PLUGINS = 10_000;\n\nexport const SCROLL_VIEWPORT = {\n /** Height of the \"N more above\" scroll indicator */\n SCROLL_INDICATOR_HEIGHT: 1,\n /** Estimated lines per category name row (including top margin) */\n CATEGORY_NAME_LINES: 2,\n /** Margin between category sections (marginTop on CategorySection) */\n CATEGORY_MARGIN_LINES: 1,\n /** Minimum rows to show at least 1 category before enabling scroll */\n MIN_VIEWPORT_ROWS: 5,\n /** Minimum terminal height to show the wizard at all */\n MIN_TERMINAL_HEIGHT: 15,\n} as const;\n\nexport const DEFAULT_BRANDING = {\n NAME: \"Agents Inc.\",\n TAGLINE: \"AI-powered development tools\",\n} as const;\n\n/** Fallback name for the default public marketplace when marketplace.json is unavailable */\nexport const DEFAULT_PUBLIC_SOURCE_NAME = \"agents-inc\";\n\n/** Human-readable labels for skill source types shown in the wizard and edit command */\nexport const SOURCE_DISPLAY_NAMES: Record<string, string> = {\n public: \"Public\",\n local: \"Local\",\n \"agents-inc\": \"Agents Inc\",\n};\n\nexport const CLI_COLORS = {\n PRIMARY: \"cyan\",\n SUCCESS: \"green\",\n ERROR: \"red\",\n WARNING: \"yellow\",\n INFO: \"blue\",\n NEUTRAL: \"gray\",\n FOCUS: \"cyan\",\n UNFOCUSED: \"white\",\n WHITE: \"white\",\n} as const;\n\n/** Canonical display order for built-in domains. Custom domains appear before these, alphabetically. */\nexport const BUILT_IN_DOMAIN_ORDER: readonly Domain[] = [\"web\", \"api\", \"mobile\", \"cli\", \"shared\"];\n\n/** Default domains pre-selected when \"Start from scratch\" is chosen (all except CLI) */\nexport const DEFAULT_SCRATCH_DOMAINS: readonly Domain[] = [\"web\", \"api\", \"mobile\"];\n\nexport const ASCII_LOGO = ` █████╗ ██████╗ ███████╗███╗ ██╗████████╗███████╗ ██╗███╗ ██╗ ██████╗\n██╔══██╗██╔════╝ ██╔════╝████╗ ██║╚══██╔══╝██╔════╝ ██║████╗ ██║██╔════╝\n███████║██║ ███╗█████╗ ██╔██╗ ██║ ██║ ███████╗ ██║██╔██╗ ██║██║\n██╔══██║██║ ██║██╔══╝ ██║╚██╗██║ ██║ ╚════██║ ██║██║╚██╗██║██║\n██║ ██║╚██████╔╝███████╗██║ ╚████║ ██║ ███████║ ██║██║ ╚████║╚██████╗\n╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═══╝ ╚═╝ ╚══════╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝`;\n"],"mappings":"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","names":[]}
@@ -4,21 +4,21 @@ import {
4
4
  } from "./chunk-7SOPVGDV.js";
5
5
  import {
6
6
  SearchModal
7
- } from "./chunk-UFKDY45I.js";
7
+ } from "./chunk-NWW3OJH5.js";
8
8
  import {
9
9
  useFocusedListItem
10
10
  } from "./chunk-P2FHS5IS.js";
11
11
  import {
12
12
  useSectionScroll
13
- } from "./chunk-AUNBGZS4.js";
13
+ } from "./chunk-FFMWFEUH.js";
14
14
  import {
15
15
  getSkillById,
16
16
  matrix
17
- } from "./chunk-NG2GGK6P.js";
17
+ } from "./chunk-JWMYAJHD.js";
18
18
  import {
19
19
  CLI_COLORS,
20
20
  SOURCE_DISPLAY_NAMES
21
- } from "./chunk-EGMQ3SXN.js";
21
+ } from "./chunk-FMYAYX6W.js";
22
22
  import {
23
23
  init_esm_shims
24
24
  } from "./chunk-DHET7RCE.js";
@@ -260,4 +260,4 @@ var SourceGrid = ({
260
260
  export {
261
261
  SourceGrid
262
262
  };
263
- //# sourceMappingURL=chunk-7Q6RMYR3.js.map
263
+ //# sourceMappingURL=chunk-I2SUTL7S.js.map
@@ -9,12 +9,12 @@ import {
9
9
  skillFrontmatterLoaderSchema,
10
10
  verbose,
11
11
  warn
12
- } from "./chunk-4CRWKTNQ.js";
12
+ } from "./chunk-WN2TUP4M.js";
13
13
  import {
14
14
  CLAUDE_SRC_DIR,
15
15
  DIRS,
16
16
  STANDARD_FILES
17
- } from "./chunk-EGMQ3SXN.js";
17
+ } from "./chunk-FMYAYX6W.js";
18
18
  import {
19
19
  init_esm_shims
20
20
  } from "./chunk-DHET7RCE.js";
@@ -198,4 +198,4 @@ export {
198
198
  loadSkillsByIds,
199
199
  loadPluginSkills
200
200
  };
201
- //# sourceMappingURL=chunk-RRBWNEG3.js.map
201
+ //# sourceMappingURL=chunk-I534EWJQ.js.map
@@ -12,7 +12,7 @@ import {
12
12
  } from "./chunk-CBYRFAUN.js";
13
13
  import {
14
14
  CLI_COLORS
15
- } from "./chunk-EGMQ3SXN.js";
15
+ } from "./chunk-FMYAYX6W.js";
16
16
  import {
17
17
  init_esm_shims
18
18
  } from "./chunk-DHET7RCE.js";
@@ -100,4 +100,4 @@ var HelpModal = ({ currentStep }) => {
100
100
  export {
101
101
  HelpModal
102
102
  };
103
- //# sourceMappingURL=chunk-2PZ7LBFT.js.map
103
+ //# sourceMappingURL=chunk-IDN2OZJY.js.map