@claude-collective/cli 0.26.0 → 0.29.4

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 (233) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/README.md +47 -13
  3. package/config/stacks.yaml +330 -93
  4. package/dist/chunk-56ERY7H7.js +29 -0
  5. package/dist/chunk-56ERY7H7.js.map +1 -0
  6. package/dist/{chunk-OBXAY23Y.js → chunk-5I6VY2E7.js} +5 -5
  7. package/dist/chunk-5I6VY2E7.js.map +1 -0
  8. package/dist/{chunk-ZDREFYD2.js → chunk-5WIHSJRO.js} +234 -59
  9. package/dist/chunk-5WIHSJRO.js.map +1 -0
  10. package/dist/{chunk-GGFOD5PK.js → chunk-6F3ZKDVE.js} +122 -66
  11. package/dist/chunk-6F3ZKDVE.js.map +1 -0
  12. package/dist/{chunk-DBRUQQUF.js → chunk-7GHTQSWI.js} +5 -1
  13. package/dist/{chunk-DBRUQQUF.js.map → chunk-7GHTQSWI.js.map} +1 -1
  14. package/dist/chunk-7ICBJZV2.js +63 -0
  15. package/dist/chunk-7ICBJZV2.js.map +1 -0
  16. package/dist/{chunk-3X5D7RM5.js → chunk-7UKQZSWT.js} +15 -4
  17. package/dist/chunk-7UKQZSWT.js.map +1 -0
  18. package/dist/{chunk-F4RD5FYM.js → chunk-A4T4YSV4.js} +5 -2
  19. package/dist/chunk-A4T4YSV4.js.map +1 -0
  20. package/dist/{chunk-VVYNZZUX.js → chunk-AG5YGYJT.js} +9 -5
  21. package/dist/chunk-AG5YGYJT.js.map +1 -0
  22. package/dist/chunk-AJFSCLJ7.js +81 -0
  23. package/dist/chunk-AJFSCLJ7.js.map +1 -0
  24. package/dist/{chunk-NQJ47R4N.js → chunk-CQZAKMPJ.js} +66 -14
  25. package/dist/chunk-CQZAKMPJ.js.map +1 -0
  26. package/dist/chunk-DIRH4PDF.js +24 -0
  27. package/dist/chunk-DIRH4PDF.js.map +1 -0
  28. package/dist/{chunk-R7B63JAP.js → chunk-DUIYVKFK.js} +123 -86
  29. package/dist/chunk-DUIYVKFK.js.map +1 -0
  30. package/dist/chunk-EP6J44I4.js +142 -0
  31. package/dist/chunk-EP6J44I4.js.map +1 -0
  32. package/dist/{chunk-TDZE4TDG.js → chunk-EUPMWSM3.js} +92 -29
  33. package/dist/chunk-EUPMWSM3.js.map +1 -0
  34. package/dist/chunk-FUPBGSRA.js +66 -0
  35. package/dist/chunk-FUPBGSRA.js.map +1 -0
  36. package/dist/{chunk-U7HFKR74.js → chunk-FY5D4KIC.js} +5 -2
  37. package/dist/chunk-FY5D4KIC.js.map +1 -0
  38. package/dist/chunk-G5WXKKQM.js +233 -0
  39. package/dist/chunk-G5WXKKQM.js.map +1 -0
  40. package/dist/{chunk-KWYO3M5Q.js → chunk-GVVEPVR7.js} +25 -24
  41. package/dist/chunk-GVVEPVR7.js.map +1 -0
  42. package/dist/chunk-IFODQTCX.js +162 -0
  43. package/dist/chunk-IFODQTCX.js.map +1 -0
  44. package/dist/chunk-IQUBOWWU.js +366 -0
  45. package/dist/chunk-IQUBOWWU.js.map +1 -0
  46. package/dist/{chunk-ETCVEV3S.js → chunk-IRG52AN5.js} +242 -155
  47. package/dist/chunk-IRG52AN5.js.map +1 -0
  48. package/dist/chunk-MQAYAISQ.js +88 -0
  49. package/dist/chunk-MQAYAISQ.js.map +1 -0
  50. package/dist/{chunk-4357L7VK.js → chunk-N73GQTCK.js} +37 -104
  51. package/dist/chunk-N73GQTCK.js.map +1 -0
  52. package/dist/{chunk-H7SSBSPR.js → chunk-OA5RCL2L.js} +8 -5
  53. package/dist/chunk-OA5RCL2L.js.map +1 -0
  54. package/dist/{chunk-I3YYG5IO.js → chunk-PNXFJPXF.js} +3 -3
  55. package/dist/{chunk-MCTSHLAF.js → chunk-RI5QEK5W.js} +41 -14
  56. package/dist/chunk-RI5QEK5W.js.map +1 -0
  57. package/dist/chunk-RXC7AF7N.js +31 -0
  58. package/dist/chunk-RXC7AF7N.js.map +1 -0
  59. package/dist/{chunk-ETQ3BPGU.js → chunk-SSHG7MEE.js} +1252 -728
  60. package/dist/chunk-SSHG7MEE.js.map +1 -0
  61. package/dist/{chunk-4S4FCAA2.js → chunk-VTUPUKFD.js} +26 -31
  62. package/dist/chunk-VTUPUKFD.js.map +1 -0
  63. package/dist/{chunk-XENOESJZ.js → chunk-WLQUQXWO.js} +10 -67
  64. package/dist/chunk-WLQUQXWO.js.map +1 -0
  65. package/dist/chunk-WPED6CL3.js +105 -0
  66. package/dist/chunk-WPED6CL3.js.map +1 -0
  67. package/dist/{chunk-R5KJVI54.js → chunk-XPMEGGJK.js} +97 -76
  68. package/dist/chunk-XPMEGGJK.js.map +1 -0
  69. package/dist/chunk-XZKVOPCR.js +75 -0
  70. package/dist/chunk-XZKVOPCR.js.map +1 -0
  71. package/dist/{chunk-ZW2PELOH.js → chunk-ZX5DM4D5.js} +106 -69
  72. package/dist/chunk-ZX5DM4D5.js.map +1 -0
  73. package/dist/commands/build/marketplace.js +21 -20
  74. package/dist/commands/build/marketplace.js.map +1 -1
  75. package/dist/commands/build/plugins.js +7 -11
  76. package/dist/commands/build/plugins.js.map +1 -1
  77. package/dist/commands/build/stack.js +8 -13
  78. package/dist/commands/build/stack.js.map +1 -1
  79. package/dist/commands/compile.js +109 -135
  80. package/dist/commands/compile.js.map +1 -1
  81. package/dist/commands/config/get.js +4 -5
  82. package/dist/commands/config/get.js.map +1 -1
  83. package/dist/commands/config/index.js +5 -6
  84. package/dist/commands/config/index.js.map +1 -1
  85. package/dist/commands/config/path.js +4 -5
  86. package/dist/commands/config/path.js.map +1 -1
  87. package/dist/commands/config/set-project.js +4 -5
  88. package/dist/commands/config/set-project.js.map +1 -1
  89. package/dist/commands/config/show.js +5 -6
  90. package/dist/commands/config/unset-project.js +4 -5
  91. package/dist/commands/config/unset-project.js.map +1 -1
  92. package/dist/commands/diff.js +26 -11
  93. package/dist/commands/diff.js.map +1 -1
  94. package/dist/commands/doctor.js +13 -16
  95. package/dist/commands/doctor.js.map +1 -1
  96. package/dist/commands/edit.js +71 -42
  97. package/dist/commands/edit.js.map +1 -1
  98. package/dist/commands/eject.js +34 -14
  99. package/dist/commands/eject.js.map +1 -1
  100. package/dist/commands/import/skill.js +93 -52
  101. package/dist/commands/import/skill.js.map +1 -1
  102. package/dist/commands/info.js +27 -9
  103. package/dist/commands/info.js.map +1 -1
  104. package/dist/commands/init.js +98 -48
  105. package/dist/commands/init.js.map +1 -1
  106. package/dist/commands/list.js +10 -5
  107. package/dist/commands/list.js.map +1 -1
  108. package/dist/commands/new/agent.js +8 -11
  109. package/dist/commands/new/agent.js.map +1 -1
  110. package/dist/commands/new/skill.js +17 -18
  111. package/dist/commands/new/skill.js.map +1 -1
  112. package/dist/commands/outdated.js +23 -9
  113. package/dist/commands/outdated.js.map +1 -1
  114. package/dist/commands/search.js +23 -20
  115. package/dist/commands/search.js.map +1 -1
  116. package/dist/commands/uninstall.js +28 -21
  117. package/dist/commands/uninstall.js.map +1 -1
  118. package/dist/commands/update.js +30 -22
  119. package/dist/commands/update.js.map +1 -1
  120. package/dist/commands/validate.js +103 -39
  121. package/dist/commands/validate.js.map +1 -1
  122. package/dist/commands/version/bump.js +4 -5
  123. package/dist/commands/version/bump.js.map +1 -1
  124. package/dist/commands/version/index.js +4 -5
  125. package/dist/commands/version/index.js.map +1 -1
  126. package/dist/commands/version/set.js +4 -5
  127. package/dist/commands/version/set.js.map +1 -1
  128. package/dist/commands/version/show.js +4 -5
  129. package/dist/commands/version/show.js.map +1 -1
  130. package/dist/components/common/confirm.test.js +2 -2
  131. package/dist/components/common/confirm.test.js.map +1 -1
  132. package/dist/components/skill-search/skill-search.js +4 -2
  133. package/dist/components/wizard/category-grid.js +3 -1
  134. package/dist/components/wizard/category-grid.test.js +63 -64
  135. package/dist/components/wizard/category-grid.test.js.map +1 -1
  136. package/dist/components/wizard/domain-selection.js +13 -0
  137. package/dist/components/wizard/help-modal.js +10 -0
  138. package/dist/components/wizard/help-modal.js.map +1 -0
  139. package/dist/components/wizard/menu-item.js +2 -1
  140. package/dist/components/wizard/search-modal.js +3 -1
  141. package/dist/components/wizard/search-modal.test.js +4 -2
  142. package/dist/components/wizard/search-modal.test.js.map +1 -1
  143. package/dist/components/wizard/section-progress.js +2 -1
  144. package/dist/components/wizard/section-progress.test.js +2 -1
  145. package/dist/components/wizard/section-progress.test.js.map +1 -1
  146. package/dist/components/wizard/source-grid.js +6 -2
  147. package/dist/components/wizard/source-grid.test.js +49 -45
  148. package/dist/components/wizard/source-grid.test.js.map +1 -1
  149. package/dist/components/wizard/stack-selection.js +15 -0
  150. package/dist/components/wizard/stack-selection.js.map +1 -0
  151. package/dist/components/wizard/step-approach.js +8 -6
  152. package/dist/components/wizard/step-approach.test.js +11 -9
  153. package/dist/components/wizard/step-approach.test.js.map +1 -1
  154. package/dist/components/wizard/step-build.js +9 -13
  155. package/dist/components/wizard/step-build.test.js +27 -45
  156. package/dist/components/wizard/step-build.test.js.map +1 -1
  157. package/dist/components/wizard/step-confirm.js +2 -1
  158. package/dist/components/wizard/step-confirm.test.js +6 -5
  159. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  160. package/dist/components/wizard/step-refine.js +2 -1
  161. package/dist/components/wizard/step-refine.test.js +3 -2
  162. package/dist/components/wizard/step-refine.test.js.map +1 -1
  163. package/dist/components/wizard/step-settings.js +8 -6
  164. package/dist/components/wizard/step-settings.test.js +12 -10
  165. package/dist/components/wizard/step-settings.test.js.map +1 -1
  166. package/dist/components/wizard/step-sources.js +11 -9
  167. package/dist/components/wizard/step-sources.test.js +16 -15
  168. package/dist/components/wizard/step-sources.test.js.map +1 -1
  169. package/dist/components/wizard/step-stack.js +9 -6
  170. package/dist/components/wizard/step-stack.test.js +15 -12
  171. package/dist/components/wizard/step-stack.test.js.map +1 -1
  172. package/dist/components/wizard/view-title.js +2 -1
  173. package/dist/components/wizard/wizard-layout.js +7 -9
  174. package/dist/components/wizard/wizard-tabs.js +2 -1
  175. package/dist/components/wizard/wizard-tabs.test.js +2 -1
  176. package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
  177. package/dist/components/wizard/wizard.js +26 -20
  178. package/dist/config/stacks.yaml +330 -93
  179. package/dist/hooks/init.js +3 -4
  180. package/dist/hooks/init.js.map +1 -1
  181. package/dist/source-manager-TV2YGPAN.js +15 -0
  182. package/dist/source-manager-TV2YGPAN.js.map +1 -0
  183. package/dist/stores/wizard-store.js +4 -3
  184. package/dist/stores/wizard-store.test.js +272 -25
  185. package/dist/stores/wizard-store.test.js.map +1 -1
  186. package/package.json +2 -1
  187. package/src/schemas/agent-frontmatter.schema.json +84 -0
  188. package/src/schemas/agent.schema.json +93 -0
  189. package/src/schemas/hooks.schema.json +47 -0
  190. package/src/schemas/marketplace.schema.json +119 -0
  191. package/src/schemas/metadata.schema.json +113 -0
  192. package/src/schemas/plugin.schema.json +130 -0
  193. package/src/schemas/project-config.schema.json +125 -0
  194. package/src/schemas/project-source-config.schema.json +81 -0
  195. package/src/schemas/skill-frontmatter.schema.json +42 -0
  196. package/src/schemas/skills-matrix.schema.json +467 -0
  197. package/src/schemas/stack.schema.json +191 -0
  198. package/src/schemas/stacks.schema.json +111 -0
  199. package/dist/chunk-3X5D7RM5.js.map +0 -1
  200. package/dist/chunk-4357L7VK.js.map +0 -1
  201. package/dist/chunk-4S4FCAA2.js.map +0 -1
  202. package/dist/chunk-7UPXT32F.js +0 -197
  203. package/dist/chunk-7UPXT32F.js.map +0 -1
  204. package/dist/chunk-ETCVEV3S.js.map +0 -1
  205. package/dist/chunk-ETQ3BPGU.js.map +0 -1
  206. package/dist/chunk-F4RD5FYM.js.map +0 -1
  207. package/dist/chunk-GGFOD5PK.js.map +0 -1
  208. package/dist/chunk-H7SSBSPR.js.map +0 -1
  209. package/dist/chunk-HWD32NP7.js +0 -19
  210. package/dist/chunk-HWD32NP7.js.map +0 -1
  211. package/dist/chunk-KWYO3M5Q.js.map +0 -1
  212. package/dist/chunk-MCTSHLAF.js.map +0 -1
  213. package/dist/chunk-NQJ47R4N.js.map +0 -1
  214. package/dist/chunk-O6ZTD7ZI.js +0 -70
  215. package/dist/chunk-O6ZTD7ZI.js.map +0 -1
  216. package/dist/chunk-OBXAY23Y.js.map +0 -1
  217. package/dist/chunk-R5KJVI54.js.map +0 -1
  218. package/dist/chunk-R7B63JAP.js.map +0 -1
  219. package/dist/chunk-TDZE4TDG.js.map +0 -1
  220. package/dist/chunk-TMED5DQ2.js +0 -210
  221. package/dist/chunk-TMED5DQ2.js.map +0 -1
  222. package/dist/chunk-U7HFKR74.js.map +0 -1
  223. package/dist/chunk-UEMRJI2K.js +0 -146
  224. package/dist/chunk-UEMRJI2K.js.map +0 -1
  225. package/dist/chunk-UNN7523L.js +0 -78
  226. package/dist/chunk-UNN7523L.js.map +0 -1
  227. package/dist/chunk-VVYNZZUX.js.map +0 -1
  228. package/dist/chunk-XENOESJZ.js.map +0 -1
  229. package/dist/chunk-ZDREFYD2.js.map +0 -1
  230. package/dist/chunk-ZW2PELOH.js.map +0 -1
  231. package/dist/source-manager-EYO3F2DV.js +0 -16
  232. /package/dist/{chunk-I3YYG5IO.js.map → chunk-PNXFJPXF.js.map} +0 -0
  233. /package/dist/{source-manager-EYO3F2DV.js.map → components/wizard/domain-selection.js.map} +0 -0
@@ -0,0 +1,88 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ CLI_COLORS
4
+ } from "./chunk-IFODQTCX.js";
5
+ import {
6
+ init_esm_shims
7
+ } from "./chunk-AWKZ5BDL.js";
8
+
9
+ // src/cli/components/wizard/help-modal.tsx
10
+ init_esm_shims();
11
+ import { Box, Text, useInput } from "ink";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ var GLOBAL_KEYS = {
14
+ title: "Navigation",
15
+ keys: [
16
+ { key: "Arrow keys", description: "Move focus" },
17
+ { key: "SPACE", description: "Toggle selection" },
18
+ { key: "ENTER", description: "Confirm / continue" },
19
+ { key: "ESC", description: "Go back" },
20
+ { key: "TAB", description: "Jump to next section" }
21
+ ]
22
+ };
23
+ var GLOBAL_TOGGLES = {
24
+ title: "Global Toggles",
25
+ keys: [
26
+ { key: "E", description: "Toggle expert mode" },
27
+ { key: "P", description: "Toggle plugin/local install mode" },
28
+ { key: "?", description: "Show this help" }
29
+ ]
30
+ };
31
+ var BUILD_KEYS = {
32
+ title: "Build Step",
33
+ keys: [
34
+ { key: "D", description: "Toggle skill descriptions" },
35
+ { key: "A", description: "Accept stack defaults (stack path only)" },
36
+ { key: "h/j/k/l", description: "Vim-style navigation" }
37
+ ]
38
+ };
39
+ var SOURCES_KEYS = {
40
+ title: "Sources Step",
41
+ keys: [{ key: "G", description: "Open source settings" }]
42
+ };
43
+ var STEP_SECTIONS = {
44
+ build: BUILD_KEYS,
45
+ sources: SOURCES_KEYS
46
+ };
47
+ var KEY_COLUMN_WIDTH = 14;
48
+ var HelpSectionView = ({ section }) => /* @__PURE__ */ jsxs(Box, { flexDirection: "column", marginBottom: 1, children: [
49
+ /* @__PURE__ */ jsx(Text, { bold: true, underline: true, children: section.title }),
50
+ section.keys.map(({ key, description }) => /* @__PURE__ */ jsxs(Box, { children: [
51
+ /* @__PURE__ */ jsx(Box, { width: KEY_COLUMN_WIDTH, children: /* @__PURE__ */ jsxs(Text, { backgroundColor: "black", color: CLI_COLORS.UNFOCUSED, children: [
52
+ " ",
53
+ key,
54
+ " "
55
+ ] }) }),
56
+ /* @__PURE__ */ jsx(Text, { children: description })
57
+ ] }, key))
58
+ ] });
59
+ var HelpModal = ({ currentStep, onClose }) => {
60
+ useInput(() => {
61
+ onClose();
62
+ });
63
+ const stepSection = STEP_SECTIONS[currentStep];
64
+ return /* @__PURE__ */ jsxs(
65
+ Box,
66
+ {
67
+ flexDirection: "column",
68
+ borderStyle: "single",
69
+ borderColor: CLI_COLORS.PRIMARY,
70
+ paddingX: 2,
71
+ paddingY: 1,
72
+ marginTop: 1,
73
+ children: [
74
+ /* @__PURE__ */ jsx(Text, { bold: true, color: CLI_COLORS.PRIMARY, children: "Keyboard Shortcuts" }),
75
+ /* @__PURE__ */ jsx(Text, { children: " " }),
76
+ /* @__PURE__ */ jsx(HelpSectionView, { section: GLOBAL_KEYS }),
77
+ /* @__PURE__ */ jsx(HelpSectionView, { section: GLOBAL_TOGGLES }),
78
+ stepSection && /* @__PURE__ */ jsx(HelpSectionView, { section: stepSection }),
79
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Press any key to close" })
80
+ ]
81
+ }
82
+ );
83
+ };
84
+
85
+ export {
86
+ HelpModal
87
+ };
88
+ //# sourceMappingURL=chunk-MQAYAISQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/help-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport type { WizardStep } from \"../../stores/wizard-store.js\";\n\ntype HelpSection = {\n title: string;\n keys: { key: string; description: string }[];\n};\n\nconst GLOBAL_KEYS: HelpSection = {\n title: \"Navigation\",\n keys: [\n { key: \"Arrow keys\", description: \"Move focus\" },\n { key: \"SPACE\", description: \"Toggle selection\" },\n { key: \"ENTER\", description: \"Confirm / continue\" },\n { key: \"ESC\", description: \"Go back\" },\n { key: \"TAB\", description: \"Jump to next section\" },\n ],\n};\n\nconst GLOBAL_TOGGLES: HelpSection = {\n title: \"Global Toggles\",\n keys: [\n { key: \"E\", description: \"Toggle expert mode\" },\n { key: \"P\", description: \"Toggle plugin/local install mode\" },\n { key: \"?\", description: \"Show this help\" },\n ],\n};\n\nconst BUILD_KEYS: HelpSection = {\n title: \"Build Step\",\n keys: [\n { key: \"D\", description: \"Toggle skill descriptions\" },\n { key: \"A\", description: \"Accept stack defaults (stack path only)\" },\n { key: \"h/j/k/l\", description: \"Vim-style navigation\" },\n ],\n};\n\nconst SOURCES_KEYS: HelpSection = {\n title: \"Sources Step\",\n keys: [{ key: \"G\", description: \"Open source settings\" }],\n};\n\nconst STEP_SECTIONS: Partial<Record<WizardStep, HelpSection>> = {\n build: BUILD_KEYS,\n sources: SOURCES_KEYS,\n};\n\nconst KEY_COLUMN_WIDTH = 14;\n\ntype HelpSectionViewProps = {\n section: HelpSection;\n};\n\nconst HelpSectionView: React.FC<HelpSectionViewProps> = ({ section }) => (\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold underline>\n {section.title}\n </Text>\n {section.keys.map(({ key, description }) => (\n <Box key={key}>\n <Box width={KEY_COLUMN_WIDTH}>\n <Text backgroundColor=\"black\" color={CLI_COLORS.UNFOCUSED}>\n {\" \"}\n {key}{\" \"}\n </Text>\n </Box>\n <Text>{description}</Text>\n </Box>\n ))}\n </Box>\n);\n\nexport type HelpModalProps = {\n currentStep: WizardStep;\n onClose: () => void;\n};\n\nexport const HelpModal: React.FC<HelpModalProps> = ({ currentStep, onClose }) => {\n useInput(() => {\n onClose();\n });\n\n const stepSection = STEP_SECTIONS[currentStep];\n\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={CLI_COLORS.PRIMARY}\n paddingX={2}\n paddingY={1}\n marginTop={1}\n >\n <Text bold color={CLI_COLORS.PRIMARY}>\n Keyboard Shortcuts\n </Text>\n <Text> </Text>\n\n <HelpSectionView section={GLOBAL_KEYS} />\n <HelpSectionView section={GLOBAL_TOGGLES} />\n {stepSection && <HelpSectionView section={stepSection} />}\n\n <Text dimColor>Press any key to close</Text>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA,SAAS,KAAK,MAAM,gBAAgB;AAwDhC,cAMM,YANN;AA/CJ,IAAM,cAA2B;AAAA,EAC/B,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,cAAc,aAAa,aAAa;AAAA,IAC/C,EAAE,KAAK,SAAS,aAAa,mBAAmB;AAAA,IAChD,EAAE,KAAK,SAAS,aAAa,qBAAqB;AAAA,IAClD,EAAE,KAAK,OAAO,aAAa,UAAU;AAAA,IACrC,EAAE,KAAK,OAAO,aAAa,uBAAuB;AAAA,EACpD;AACF;AAEA,IAAM,iBAA8B;AAAA,EAClC,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,KAAK,aAAa,qBAAqB;AAAA,IAC9C,EAAE,KAAK,KAAK,aAAa,mCAAmC;AAAA,IAC5D,EAAE,KAAK,KAAK,aAAa,iBAAiB;AAAA,EAC5C;AACF;AAEA,IAAM,aAA0B;AAAA,EAC9B,OAAO;AAAA,EACP,MAAM;AAAA,IACJ,EAAE,KAAK,KAAK,aAAa,4BAA4B;AAAA,IACrD,EAAE,KAAK,KAAK,aAAa,0CAA0C;AAAA,IACnE,EAAE,KAAK,WAAW,aAAa,uBAAuB;AAAA,EACxD;AACF;AAEA,IAAM,eAA4B;AAAA,EAChC,OAAO;AAAA,EACP,MAAM,CAAC,EAAE,KAAK,KAAK,aAAa,uBAAuB,CAAC;AAC1D;AAEA,IAAM,gBAA0D;AAAA,EAC9D,OAAO;AAAA,EACP,SAAS;AACX;AAEA,IAAM,mBAAmB;AAMzB,IAAM,kBAAkD,CAAC,EAAE,QAAQ,MACjE,qBAAC,OAAI,eAAc,UAAS,cAAc,GACxC;AAAA,sBAAC,QAAK,MAAI,MAAC,WAAS,MACjB,kBAAQ,OACX;AAAA,EACC,QAAQ,KAAK,IAAI,CAAC,EAAE,KAAK,YAAY,MACpC,qBAAC,OACC;AAAA,wBAAC,OAAI,OAAO,kBACV,+BAAC,QAAK,iBAAgB,SAAQ,OAAO,WAAW,WAC7C;AAAA;AAAA,MACA;AAAA,MAAK;AAAA,OACR,GACF;AAAA,IACA,oBAAC,QAAM,uBAAY;AAAA,OAPX,GAQV,CACD;AAAA,GACH;AAQK,IAAM,YAAsC,CAAC,EAAE,aAAa,QAAQ,MAAM;AAC/E,WAAS,MAAM;AACb,YAAQ;AAAA,EACV,CAAC;AAED,QAAM,cAAc,cAAc,WAAW;AAE7C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAa,WAAW;AAAA,MACxB,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MAEX;AAAA,4BAAC,QAAK,MAAI,MAAC,OAAO,WAAW,SAAS,gCAEtC;AAAA,QACA,oBAAC,QAAK,eAAC;AAAA,QAEP,oBAAC,mBAAgB,SAAS,aAAa;AAAA,QACvC,oBAAC,mBAAgB,SAAS,gBAAgB;AAAA,QACzC,eAAe,oBAAC,mBAAgB,SAAS,aAAa;AAAA,QAEvD,oBAAC,QAAK,UAAQ,MAAC,oCAAsB;AAAA;AAAA;AAAA,EACvC;AAEJ;","names":[]}
@@ -1,21 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import {
3
- SourceGrid
4
- } from "./chunk-ZW2PELOH.js";
5
2
  import {
6
3
  ViewTitle
7
- } from "./chunk-U7HFKR74.js";
4
+ } from "./chunk-FY5D4KIC.js";
5
+ import {
6
+ SourceGrid
7
+ } from "./chunk-ZX5DM4D5.js";
8
8
  import {
9
9
  useWizardStore
10
- } from "./chunk-TMED5DQ2.js";
10
+ } from "./chunk-IQUBOWWU.js";
11
11
  import {
12
- resolveAlias,
13
12
  resolveAllSources,
14
13
  searchExtraSources
15
- } from "./chunk-ETQ3BPGU.js";
14
+ } from "./chunk-SSHG7MEE.js";
16
15
  import {
17
- warn
18
- } from "./chunk-ZDREFYD2.js";
16
+ CLI_COLORS
17
+ } from "./chunk-IFODQTCX.js";
19
18
  import {
20
19
  init_esm_shims
21
20
  } from "./chunk-AWKZ5BDL.js";
@@ -25,72 +24,6 @@ init_esm_shims();
25
24
  import { useState, useCallback } from "react";
26
25
  import { Box, Text, useInput } from "ink";
27
26
  import { jsx, jsxs } from "react/jsx-runtime";
28
- var DEFAULT_SOURCE_ID = "public";
29
- var DEFAULT_SOURCE_LABEL = "Public";
30
- var SOURCE_SORT_ORDER = {
31
- local: 0,
32
- public: 1,
33
- private: 2
34
- };
35
- var SOURCE_DISPLAY_NAMES = {
36
- public: "Public",
37
- local: "Local"
38
- };
39
- function formatSourceLabel(source) {
40
- const displayName = SOURCE_DISPLAY_NAMES[source.name] ?? source.name;
41
- const prefix = source.installed ? "\u2713 " : "";
42
- const versionSuffix = source.version ? ` \xB7 v${source.version}` : "";
43
- return `${prefix}${displayName}${versionSuffix}`;
44
- }
45
- function getSkillAlias(skillId, matrix) {
46
- const displayName = matrix.displayNames?.[skillId];
47
- if (displayName) return displayName;
48
- const segments = skillId.split("-");
49
- const fallback = segments[segments.length - 1] || skillId;
50
- warn(`No display name found for skill "${skillId}", using fallback alias "${fallback}"`);
51
- return fallback;
52
- }
53
- function buildSourceRows(selectedTechnologies, matrix, sourceSelections, boundSkills) {
54
- return selectedTechnologies.map((tech) => {
55
- const skillId = resolveAlias(tech, matrix);
56
- const skill = matrix.skills[skillId];
57
- const selectedSource = sourceSelections[skillId] || skill?.activeSource?.name || DEFAULT_SOURCE_ID;
58
- const alias = getSkillAlias(skillId, matrix);
59
- const sortedSources = [...skill?.availableSources || []].sort(
60
- (a, b) => (SOURCE_SORT_ORDER[a.type] ?? 3) - (SOURCE_SORT_ORDER[b.type] ?? 3)
61
- );
62
- const options = sortedSources.length > 0 ? sortedSources.map((source) => ({
63
- id: source.name,
64
- label: formatSourceLabel({
65
- name: source.name,
66
- version: source.version,
67
- installed: source.installed
68
- }),
69
- selected: selectedSource === source.name,
70
- installed: source.installed
71
- })) : [
72
- {
73
- id: DEFAULT_SOURCE_ID,
74
- label: DEFAULT_SOURCE_LABEL,
75
- selected: selectedSource === DEFAULT_SOURCE_ID,
76
- installed: false
77
- }
78
- ];
79
- const boundForAlias = boundSkills.filter((b) => b.boundTo === alias);
80
- for (const bound of boundForAlias) {
81
- options.push({
82
- id: bound.sourceName,
83
- label: formatSourceLabel({
84
- name: bound.sourceName,
85
- installed: false
86
- }),
87
- selected: selectedSource === bound.sourceName,
88
- installed: false
89
- });
90
- }
91
- return { skillId, displayName: alias, alias, options };
92
- });
93
- }
94
27
  var StepSources = ({
95
28
  matrix,
96
29
  projectDir,
@@ -100,26 +33,15 @@ var StepSources = ({
100
33
  const store = useWizardStore();
101
34
  const [view, setView] = useState("choice");
102
35
  const [choiceIndex, setChoiceIndex] = useState(0);
103
- const [gridFocusedRow, setGridFocusedRow] = useState(0);
104
- const [gridFocusedCol, setGridFocusedCol] = useState(0);
105
36
  const [isGridSearching, setIsGridSearching] = useState(false);
106
37
  const selectedTechnologies = store.getAllSelectedTechnologies();
107
- const rows = buildSourceRows(
108
- selectedTechnologies,
109
- matrix,
110
- store.sourceSelections,
111
- store.boundSkills
112
- );
38
+ const rows = store.buildSourceRows(matrix);
113
39
  const handleGridSelect = useCallback(
114
40
  (skillId, sourceId) => {
115
41
  store.setSourceSelection(skillId, sourceId);
116
42
  },
117
43
  [store]
118
44
  );
119
- const handleGridFocusChange = useCallback((row, col) => {
120
- setGridFocusedRow(row);
121
- setGridFocusedCol(col);
122
- }, []);
123
45
  const handleSearch = useCallback(
124
46
  async (alias) => {
125
47
  if (!projectDir) return [];
@@ -147,7 +69,7 @@ var StepSources = ({
147
69
  const handleSearchStateChange = useCallback((active) => {
148
70
  setIsGridSearching(active);
149
71
  }, []);
150
- useInput((input, key) => {
72
+ useInput((_input, key) => {
151
73
  if (view === "choice") {
152
74
  if (key.return) {
153
75
  if (choiceIndex === 0) {
@@ -181,10 +103,7 @@ var StepSources = ({
181
103
  SourceGrid,
182
104
  {
183
105
  rows,
184
- focusedRow: gridFocusedRow,
185
- focusedCol: gridFocusedCol,
186
106
  onSelect: handleGridSelect,
187
- onFocusChange: handleGridFocusChange,
188
107
  onSearch: handleSearch,
189
108
  onBind: handleBind,
190
109
  onSearchStateChange: handleSearchStateChange
@@ -200,7 +119,7 @@ var StepSources = ({
200
119
  /* @__PURE__ */ jsxs(Text, { children: [
201
120
  "Your stack includes",
202
121
  " ",
203
- /* @__PURE__ */ jsx(Text, { color: "cyan", bold: true, children: selectedTechnologies.length }),
122
+ /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, bold: true, children: selectedTechnologies.length }),
204
123
  " ",
205
124
  "technologies."
206
125
  ] }),
@@ -209,16 +128,23 @@ var StepSources = ({
209
128
  Box,
210
129
  {
211
130
  borderStyle: "round",
212
- borderColor: isRecommendedSelected ? "green" : "gray",
131
+ borderColor: isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
213
132
  paddingX: 2,
214
133
  paddingY: 1,
215
134
  marginBottom: 1,
216
135
  children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
217
- /* @__PURE__ */ jsxs(Text, { color: isRecommendedSelected ? "green" : void 0, bold: isRecommendedSelected, children: [
218
- isRecommendedSelected ? ">" : "\u25CB",
219
- " ",
220
- hasLocalSkills ? "Use installed skill sources" : "Use all recommended skills (verified)"
221
- ] }),
136
+ /* @__PURE__ */ jsxs(
137
+ Text,
138
+ {
139
+ color: isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
140
+ bold: isRecommendedSelected,
141
+ children: [
142
+ isRecommendedSelected ? ">" : "\u25CB",
143
+ " ",
144
+ hasLocalSkills ? "Use installed skill sources" : "Use all recommended skills (verified)"
145
+ ]
146
+ }
147
+ ),
222
148
  /* @__PURE__ */ jsx(Text, { children: " " }),
223
149
  /* @__PURE__ */ jsx(Text, { dimColor: true, children: hasLocalSkills ? "Keep your current local and public skill selections." : "This is the fastest option. All skills are verified and" }),
224
150
  !hasLocalSkills && /* @__PURE__ */ jsx(Text, { dimColor: true, children: "maintained by Claude Collective." })
@@ -229,14 +155,21 @@ var StepSources = ({
229
155
  Box,
230
156
  {
231
157
  borderStyle: "round",
232
- borderColor: !isRecommendedSelected ? "green" : "gray",
158
+ borderColor: !isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
233
159
  paddingX: 2,
234
160
  paddingY: 1,
235
161
  children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
236
- /* @__PURE__ */ jsxs(Text, { color: !isRecommendedSelected ? "green" : void 0, bold: !isRecommendedSelected, children: [
237
- !isRecommendedSelected ? ">" : "\u25CB",
238
- " Customize skill sources"
239
- ] }),
162
+ /* @__PURE__ */ jsxs(
163
+ Text,
164
+ {
165
+ color: !isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
166
+ bold: !isRecommendedSelected,
167
+ children: [
168
+ !isRecommendedSelected ? ">" : "\u25CB",
169
+ " Customize skill sources"
170
+ ]
171
+ }
172
+ ),
240
173
  /* @__PURE__ */ jsx(Text, { children: " " }),
241
174
  /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Choose alternative skills for each technology" })
242
175
  ] })
@@ -248,4 +181,4 @@ var StepSources = ({
248
181
  export {
249
182
  StepSources
250
183
  };
251
- //# sourceMappingURL=chunk-4357L7VK.js.map
184
+ //# sourceMappingURL=chunk-N73GQTCK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/step-sources.tsx"],"sourcesContent":["import React, { useState, useCallback } from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type {\n BoundSkillCandidate,\n MergedSkillsMatrix,\n SkillAlias,\n SkillId,\n} from \"../../types/index.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { SourceGrid } from \"./source-grid.js\";\nimport { ViewTitle } from \"./view-title.js\";\nimport { searchExtraSources } from \"../../lib/loading/multi-source-loader.js\";\nimport { resolveAllSources } from \"../../lib/configuration/index.js\";\n\nexport type StepSourcesProps = {\n matrix: MergedSkillsMatrix;\n projectDir?: string;\n onContinue: () => void;\n onBack: () => void;\n};\n\ntype SourcesView = \"choice\" | \"customize\";\n\nexport const StepSources: React.FC<StepSourcesProps> = ({\n matrix,\n projectDir,\n onContinue,\n onBack,\n}) => {\n const store = useWizardStore();\n const [view, setView] = useState<SourcesView>(\"choice\");\n const [choiceIndex, setChoiceIndex] = useState(0);\n const [isGridSearching, setIsGridSearching] = useState(false);\n\n const selectedTechnologies = store.getAllSelectedTechnologies();\n const rows = store.buildSourceRows(matrix);\n\n const handleGridSelect = useCallback(\n (skillId: SkillId, sourceId: string) => {\n store.setSourceSelection(skillId, sourceId);\n },\n [store],\n );\n\n const handleSearch = useCallback(\n async (alias: SkillAlias): Promise<BoundSkillCandidate[]> => {\n if (!projectDir) return [];\n try {\n const sources = await resolveAllSources(projectDir);\n return await searchExtraSources(alias, sources.extras);\n } catch {\n return [];\n }\n },\n [projectDir],\n );\n\n const handleBind = useCallback(\n (candidate: BoundSkillCandidate) => {\n store.bindSkill({\n id: candidate.id,\n sourceUrl: candidate.sourceUrl,\n sourceName: candidate.sourceName,\n boundTo: candidate.alias,\n description: candidate.description,\n });\n },\n [store],\n );\n\n const handleSearchStateChange = useCallback((active: boolean) => {\n setIsGridSearching(active);\n }, []);\n\n useInput((_input, key) => {\n if (view === \"choice\") {\n if (key.return) {\n if (choiceIndex === 0) {\n // \"Use all recommended\" -> continue\n onContinue();\n } else {\n // \"Customize skill sources\" -> switch to grid view\n store.setCustomizeSources(true);\n setView(\"customize\");\n }\n }\n if (key.escape) {\n onBack();\n }\n if (key.upArrow || key.downArrow) {\n setChoiceIndex((prev) => (prev === 0 ? 1 : 0));\n }\n } else if (view === \"customize\") {\n // Don't handle Enter/Escape while search modal is open\n if (isGridSearching) return;\n\n if (key.return) {\n onContinue();\n }\n if (key.escape) {\n store.setCustomizeSources(false);\n setView(\"choice\");\n }\n }\n });\n\n if (view === \"customize\") {\n return (\n <Box flexDirection=\"column\" width=\"100%\">\n <ViewTitle>Customize skill sources</ViewTitle>\n <SourceGrid\n rows={rows}\n onSelect={handleGridSelect}\n onSearch={handleSearch}\n onBind={handleBind}\n onSearchStateChange={handleSearchStateChange}\n />\n </Box>\n );\n }\n\n const isRecommendedSelected = choiceIndex === 0;\n const hasLocalSkills = rows.some((row) =>\n row.options.some((o) => o.installed && o.id === \"local\"),\n );\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Text>\n Your stack includes{\" \"}\n <Text color={CLI_COLORS.PRIMARY} bold>\n {selectedTechnologies.length}\n </Text>{\" \"}\n technologies.\n </Text>\n <Text> </Text>\n\n <Box\n borderStyle=\"round\"\n borderColor={isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n marginBottom={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={isRecommendedSelected}\n >\n {isRecommendedSelected ? \">\" : \"\\u25CB\"}{\" \"}\n {hasLocalSkills\n ? \"Use installed skill sources\"\n : \"Use all recommended skills (verified)\"}\n </Text>\n <Text> </Text>\n <Text dimColor>\n {hasLocalSkills\n ? \"Keep your current local and public skill selections.\"\n : \"This is the fastest option. All skills are verified and\"}\n </Text>\n {!hasLocalSkills && <Text dimColor>maintained by Claude Collective.</Text>}\n </Box>\n </Box>\n\n <Box\n borderStyle=\"round\"\n borderColor={!isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={!isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={!isRecommendedSelected}\n >\n {!isRecommendedSelected ? \">\" : \"\\u25CB\"} Customize skill sources\n </Text>\n <Text> </Text>\n <Text dimColor>Choose alternative skills for each technology</Text>\n </Box>\n </Box>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1,4 +1,8 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ CLI_COLORS,
4
+ UI_SYMBOLS
5
+ } from "./chunk-IFODQTCX.js";
2
6
  import {
3
7
  init_esm_shims
4
8
  } from "./chunk-AWKZ5BDL.js";
@@ -7,8 +11,7 @@ import {
7
11
  init_esm_shims();
8
12
  import { Box, Text } from "ink";
9
13
  import { jsx, jsxs } from "react/jsx-runtime";
10
- var CHEVRON = "\u276F";
11
- var CHEVRON_SPACER = " ";
14
+ var { CHEVRON, CHEVRON_SPACER } = UI_SYMBOLS;
12
15
  var MenuItem = ({
13
16
  label,
14
17
  description,
@@ -17,8 +20,8 @@ var MenuItem = ({
17
20
  }) => {
18
21
  const showCyan = isFocused || isActive;
19
22
  return /* @__PURE__ */ jsxs(Box, { columnGap: 1, children: [
20
- /* @__PURE__ */ jsx(Text, { color: isFocused ? "cyan" : void 0, children: isFocused ? CHEVRON : CHEVRON_SPACER }),
21
- /* @__PURE__ */ jsx(Text, { bold: isFocused, color: showCyan ? "cyan" : void 0, children: label }),
23
+ /* @__PURE__ */ jsx(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: isFocused ? CHEVRON : CHEVRON_SPACER }),
24
+ /* @__PURE__ */ jsx(Text, { bold: isFocused, color: showCyan ? CLI_COLORS.PRIMARY : void 0, children: label }),
22
25
  isFocused && description && /* @__PURE__ */ jsx(Text, { dimColor: true, children: ` ${description}` })
23
26
  ] });
24
27
  };
@@ -26,4 +29,4 @@ var MenuItem = ({
26
29
  export {
27
30
  MenuItem
28
31
  };
29
- //# sourceMappingURL=chunk-H7SSBSPR.js.map
32
+ //# sourceMappingURL=chunk-OA5RCL2L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/menu-item.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text } from \"ink\";\nimport { CLI_COLORS, UI_SYMBOLS } from \"../../consts.js\";\n\nconst { CHEVRON, CHEVRON_SPACER } = UI_SYMBOLS;\n\ntype MenuItemProps = {\n label: string;\n description?: string;\n isFocused?: boolean;\n isActive?: boolean;\n};\n\nexport const MenuItem: React.FC<MenuItemProps> = ({\n label,\n description,\n isFocused = false,\n isActive = false,\n}) => {\n const showCyan = isFocused || isActive;\n\n return (\n <Box columnGap={1}>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>\n {isFocused ? CHEVRON : CHEVRON_SPACER}\n </Text>\n <Text bold={isFocused} color={showCyan ? CLI_COLORS.PRIMARY : undefined}>\n {label}\n </Text>\n {isFocused && description && <Text dimColor>{` ${description}`}</Text>}\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;AAAA;AACA,SAAS,KAAK,YAAY;AAqBtB,SACE,KADF;AAlBJ,IAAM,EAAE,SAAS,eAAe,IAAI;AAS7B,IAAM,WAAoC,CAAC;AAAA,EAChD;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AACb,MAAM;AACJ,QAAM,WAAW,aAAa;AAE9B,SACE,qBAAC,OAAI,WAAW,GACd;AAAA,wBAAC,QAAK,OAAO,YAAY,WAAW,UAAU,QAC3C,sBAAY,UAAU,gBACzB;AAAA,IACA,oBAAC,QAAK,MAAM,WAAW,OAAO,WAAW,WAAW,UAAU,QAC3D,iBACH;AAAA,IACC,aAAa,eAAe,oBAAC,QAAK,UAAQ,MAAE,cAAI,WAAW,IAAG;AAAA,KACjE;AAEJ;","names":[]}
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  BaseCommand
4
- } from "./chunk-OBXAY23Y.js";
4
+ } from "./chunk-5I6VY2E7.js";
5
5
  import {
6
6
  DEFAULT_SOURCE,
7
7
  SOURCE_ENV_VAR,
@@ -10,7 +10,7 @@ import {
10
10
  loadProjectSourceConfig,
11
11
  resolveAgentsSource,
12
12
  resolveSource
13
- } from "./chunk-ETQ3BPGU.js";
13
+ } from "./chunk-SSHG7MEE.js";
14
14
  import {
15
15
  init_esm_shims
16
16
  } from "./chunk-AWKZ5BDL.js";
@@ -85,4 +85,4 @@ var ConfigShow = class _ConfigShow extends BaseCommand {
85
85
  export {
86
86
  ConfigShow
87
87
  };
88
- //# sourceMappingURL=chunk-I3YYG5IO.js.map
88
+ //# sourceMappingURL=chunk-PNXFJPXF.js.map
@@ -1,4 +1,7 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ CLI_COLORS
4
+ } from "./chunk-IFODQTCX.js";
2
5
  import {
3
6
  init_esm_shims
4
7
  } from "./chunk-AWKZ5BDL.js";
@@ -14,7 +17,7 @@ var StepRefine = ({
14
17
  onContinue,
15
18
  onBack
16
19
  }) => {
17
- useInput((input, key) => {
20
+ useInput((_input, key) => {
18
21
  if (key.return) {
19
22
  onContinue();
20
23
  }
@@ -30,7 +33,7 @@ var StepRefine = ({
30
33
  /* @__PURE__ */ jsxs(Text, { children: [
31
34
  "Your stack includes",
32
35
  " ",
33
- /* @__PURE__ */ jsx(Text, { color: "cyan", bold: true, children: technologyCount }),
36
+ /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.PRIMARY, bold: true, children: technologyCount }),
34
37
  " ",
35
38
  "technologies."
36
39
  ] }),
@@ -39,15 +42,24 @@ var StepRefine = ({
39
42
  Box,
40
43
  {
41
44
  borderStyle: "round",
42
- borderColor: isRecommendedSelected ? "green" : "gray",
45
+ borderColor: isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
43
46
  paddingX: 2,
44
47
  paddingY: 1,
45
48
  marginBottom: 1,
46
49
  children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
47
- /* @__PURE__ */ jsxs(Text, { color: isRecommendedSelected ? "green" : void 0, bold: isRecommendedSelected, children: [
48
- isRecommendedSelected ? ">" : "\u25CB",
49
- " Use all recommended skills (verified)"
50
- ] }),
50
+ /* @__PURE__ */ jsxs(
51
+ Text,
52
+ {
53
+ color: isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
54
+ bold: isRecommendedSelected,
55
+ children: [
56
+ isRecommendedSelected ? ">" : "\u25CB",
57
+ " Use all recommended skills (verified)",
58
+ " ",
59
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: isRecommendedSelected ? "(Selected)" : "(Not selected)" })
60
+ ]
61
+ }
62
+ ),
51
63
  /* @__PURE__ */ jsx(Text, { children: " " }),
52
64
  /* @__PURE__ */ jsx(Text, { dimColor: true, children: "This is the fastest option. All skills are verified and" }),
53
65
  /* @__PURE__ */ jsx(Text, { dimColor: true, children: "maintained by Claude Collective." })
@@ -58,23 +70,38 @@ var StepRefine = ({
58
70
  Box,
59
71
  {
60
72
  borderStyle: "round",
61
- borderColor: !isRecommendedSelected ? "green" : "gray",
73
+ borderColor: !isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL,
62
74
  paddingX: 2,
63
75
  paddingY: 1,
64
76
  children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", children: [
65
- /* @__PURE__ */ jsxs(Text, { color: !isRecommendedSelected ? "green" : void 0, bold: !isRecommendedSelected, children: [
66
- !isRecommendedSelected ? ">" : "\u25CB",
67
- " Customize skill sources"
68
- ] }),
77
+ /* @__PURE__ */ jsxs(
78
+ Text,
79
+ {
80
+ color: !isRecommendedSelected ? CLI_COLORS.SUCCESS : void 0,
81
+ bold: !isRecommendedSelected,
82
+ children: [
83
+ !isRecommendedSelected ? ">" : "\u25CB",
84
+ " Customize skill sources",
85
+ " ",
86
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: !isRecommendedSelected ? "(Selected)" : "(Not selected)" })
87
+ ]
88
+ }
89
+ ),
69
90
  /* @__PURE__ */ jsx(Text, { children: " " }),
70
91
  /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Choose alternative skills for each technology" })
71
92
  ] })
72
93
  }
73
- )
94
+ ),
95
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, children: /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
96
+ "\u2191",
97
+ "/",
98
+ "\u2193",
99
+ " navigate ENTER continue ESC back"
100
+ ] }) })
74
101
  ] });
75
102
  };
76
103
 
77
104
  export {
78
105
  StepRefine
79
106
  };
80
- //# sourceMappingURL=chunk-MCTSHLAF.js.map
107
+ //# sourceMappingURL=chunk-RI5QEK5W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/step-refine.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport { CLI_COLORS } from \"../../consts.js\";\n\nexport type RefineAction = \"all-recommended\" | \"customize\" | null;\n\nexport type StepRefineProps = {\n technologyCount: number;\n refineAction: RefineAction;\n onSelectAction: (action: \"all-recommended\" | \"customize\") => void;\n onContinue: () => void;\n onBack: () => void;\n};\n\nexport const StepRefine: React.FC<StepRefineProps> = ({\n technologyCount,\n refineAction,\n onSelectAction,\n onContinue,\n onBack,\n}) => {\n useInput((_input, key) => {\n if (key.return) {\n onContinue();\n }\n if (key.escape) {\n onBack();\n }\n if (key.upArrow || key.downArrow) {\n onSelectAction(refineAction === \"all-recommended\" ? \"customize\" : \"all-recommended\");\n }\n });\n\n const isRecommendedSelected = refineAction === \"all-recommended\" || refineAction === null;\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Text>\n Your stack includes{\" \"}\n <Text color={CLI_COLORS.PRIMARY} bold>\n {technologyCount}\n </Text>{\" \"}\n technologies.\n </Text>\n <Text> </Text>\n\n <Box\n borderStyle=\"round\"\n borderColor={isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n marginBottom={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={isRecommendedSelected}\n >\n {isRecommendedSelected ? \">\" : \"○\"} Use all recommended skills (verified){\" \"}\n <Text dimColor>{isRecommendedSelected ? \"(Selected)\" : \"(Not selected)\"}</Text>\n </Text>\n <Text> </Text>\n <Text dimColor>This is the fastest option. All skills are verified and</Text>\n <Text dimColor>maintained by Claude Collective.</Text>\n </Box>\n </Box>\n\n <Box\n borderStyle=\"round\"\n borderColor={!isRecommendedSelected ? CLI_COLORS.SUCCESS : CLI_COLORS.NEUTRAL}\n paddingX={2}\n paddingY={1}\n >\n <Box flexDirection=\"column\">\n <Text\n color={!isRecommendedSelected ? CLI_COLORS.SUCCESS : undefined}\n bold={!isRecommendedSelected}\n >\n {!isRecommendedSelected ? \">\" : \"○\"} Customize skill sources{\" \"}\n <Text dimColor>{!isRecommendedSelected ? \"(Selected)\" : \"(Not selected)\"}</Text>\n </Text>\n <Text> </Text>\n <Text dimColor>Choose alternative skills for each technology</Text>\n </Box>\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\n {\"\\u2191\"}/{\"\\u2193\"} navigate ENTER continue ESC back\n </Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;AAAA;AACA,SAAS,KAAK,MAAM,gBAAgB;AAoC9B,SAEE,KAFF;AAvBC,IAAM,aAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,WAAS,CAAC,QAAQ,QAAQ;AACxB,QAAI,IAAI,QAAQ;AACd,iBAAW;AAAA,IACb;AACA,QAAI,IAAI,QAAQ;AACd,aAAO;AAAA,IACT;AACA,QAAI,IAAI,WAAW,IAAI,WAAW;AAChC,qBAAe,iBAAiB,oBAAoB,cAAc,iBAAiB;AAAA,IACrF;AAAA,EACF,CAAC;AAED,QAAM,wBAAwB,iBAAiB,qBAAqB,iBAAiB;AAErF,SACE,qBAAC,OAAI,eAAc,UAAS,UAAU,GACpC;AAAA,yBAAC,QAAK;AAAA;AAAA,MACgB;AAAA,MACpB,oBAAC,QAAK,OAAO,WAAW,SAAS,MAAI,MAClC,2BACH;AAAA,MAAQ;AAAA,MAAI;AAAA,OAEd;AAAA,IACA,oBAAC,QAAK,eAAC;AAAA,IAEP;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,aAAa,wBAAwB,WAAW,UAAU,WAAW;AAAA,QACrE,UAAU;AAAA,QACV,UAAU;AAAA,QACV,cAAc;AAAA,QAEd,+BAAC,OAAI,eAAc,UACjB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,wBAAwB,WAAW,UAAU;AAAA,cACpD,MAAM;AAAA,cAEL;AAAA,wCAAwB,MAAM;AAAA,gBAAI;AAAA,gBAAuC;AAAA,gBAC1E,oBAAC,QAAK,UAAQ,MAAE,kCAAwB,eAAe,kBAAiB;AAAA;AAAA;AAAA,UAC1E;AAAA,UACA,oBAAC,QAAK,eAAC;AAAA,UACP,oBAAC,QAAK,UAAQ,MAAC,qEAAuD;AAAA,UACtE,oBAAC,QAAK,UAAQ,MAAC,8CAAgC;AAAA,WACjD;AAAA;AAAA,IACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,aAAY;AAAA,QACZ,aAAa,CAAC,wBAAwB,WAAW,UAAU,WAAW;AAAA,QACtE,UAAU;AAAA,QACV,UAAU;AAAA,QAEV,+BAAC,OAAI,eAAc,UACjB;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,OAAO,CAAC,wBAAwB,WAAW,UAAU;AAAA,cACrD,MAAM,CAAC;AAAA,cAEN;AAAA,iBAAC,wBAAwB,MAAM;AAAA,gBAAI;AAAA,gBAAyB;AAAA,gBAC7D,oBAAC,QAAK,UAAQ,MAAE,WAAC,wBAAwB,eAAe,kBAAiB;AAAA;AAAA;AAAA,UAC3E;AAAA,UACA,oBAAC,QAAK,eAAC;AAAA,UACP,oBAAC,QAAK,UAAQ,MAAC,2DAA6C;AAAA,WAC9D;AAAA;AAAA,IACF;AAAA,IAEA,oBAAC,OAAI,WAAW,GACd,+BAAC,QAAK,UAAQ,MACX;AAAA;AAAA,MAAS;AAAA,MAAE;AAAA,MAAS;AAAA,OACvB,GACF;AAAA,KACF;AAEJ;","names":[]}
@@ -0,0 +1,31 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ init_esm_shims
4
+ } from "./chunk-AWKZ5BDL.js";
5
+
6
+ // src/cli/components/hooks/use-text-input.ts
7
+ init_esm_shims();
8
+ import { useState, useCallback } from "react";
9
+ var MIN_PRINTABLE_CHAR_CODE = 32;
10
+ var MAX_PRINTABLE_CHAR_CODE = 126;
11
+ function useTextInput(initialValue = "") {
12
+ const [value, setValue] = useState(initialValue);
13
+ const handleInput = useCallback((input, key) => {
14
+ if (key.backspace || key.delete) {
15
+ setValue((prev) => prev.slice(0, -1));
16
+ return;
17
+ }
18
+ if (!key.ctrl && !key.meta && input && input.length === 1) {
19
+ const charCode = input.charCodeAt(0);
20
+ if (charCode >= MIN_PRINTABLE_CHAR_CODE && charCode <= MAX_PRINTABLE_CHAR_CODE) {
21
+ setValue((prev) => prev + input);
22
+ }
23
+ }
24
+ }, []);
25
+ return { value, setValue, handleInput };
26
+ }
27
+
28
+ export {
29
+ useTextInput
30
+ };
31
+ //# sourceMappingURL=chunk-RXC7AF7N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/hooks/use-text-input.ts"],"sourcesContent":["import { useState, useCallback } from \"react\";\nimport type { Key } from \"ink\";\n\nconst MIN_PRINTABLE_CHAR_CODE = 32;\nconst MAX_PRINTABLE_CHAR_CODE = 126;\n\ntype UseTextInputResult = {\n value: string;\n setValue: (value: string) => void;\n handleInput: (input: string, key: Key) => void;\n};\n\n/**\n * Encapsulates text input handling for terminal UIs:\n * backspace/delete to remove the last character, and\n * printable ASCII character filtering (codes 32-126).\n */\nexport function useTextInput(initialValue = \"\"): UseTextInputResult {\n const [value, setValue] = useState(initialValue);\n\n const handleInput = useCallback((input: string, key: Key) => {\n if (key.backspace || key.delete) {\n setValue((prev) => prev.slice(0, -1));\n return;\n }\n\n if (!key.ctrl && !key.meta && input && input.length === 1) {\n const charCode = input.charCodeAt(0);\n if (charCode >= MIN_PRINTABLE_CHAR_CODE && charCode <= MAX_PRINTABLE_CHAR_CODE) {\n setValue((prev) => prev + input);\n }\n }\n }, []);\n\n return { value, setValue, handleInput };\n}\n"],"mappings":";;;;;;AAAA;AAAA,SAAS,UAAU,mBAAmB;AAGtC,IAAM,0BAA0B;AAChC,IAAM,0BAA0B;AAazB,SAAS,aAAa,eAAe,IAAwB;AAClE,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAE/C,QAAM,cAAc,YAAY,CAAC,OAAe,QAAa;AAC3D,QAAI,IAAI,aAAa,IAAI,QAAQ;AAC/B,eAAS,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,CAAC;AACpC;AAAA,IACF;AAEA,QAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,QAAQ,SAAS,MAAM,WAAW,GAAG;AACzD,YAAM,WAAW,MAAM,WAAW,CAAC;AACnC,UAAI,YAAY,2BAA2B,YAAY,yBAAyB;AAC9E,iBAAS,CAAC,SAAS,OAAO,KAAK;AAAA,MACjC;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,EAAE,OAAO,UAAU,YAAY;AACxC;","names":[]}