@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
@@ -1,59 +1,138 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ WizardLayout
4
+ } from "./chunk-EP6J44I4.js";
5
+ import {
6
+ StepSettings
7
+ } from "./chunk-G5WXKKQM.js";
2
8
  import {
3
9
  StepSources
4
- } from "./chunk-4357L7VK.js";
10
+ } from "./chunk-N73GQTCK.js";
5
11
  import {
6
12
  StepStack
7
- } from "./chunk-XENOESJZ.js";
13
+ } from "./chunk-56ERY7H7.js";
8
14
  import {
9
- WizardLayout
10
- } from "./chunk-UEMRJI2K.js";
15
+ StepApproach
16
+ } from "./chunk-GVVEPVR7.js";
11
17
  import {
12
18
  StepBuild
13
- } from "./chunk-TDZE4TDG.js";
19
+ } from "./chunk-EUPMWSM3.js";
14
20
  import {
15
21
  StepConfirm
16
- } from "./chunk-VVYNZZUX.js";
22
+ } from "./chunk-AG5YGYJT.js";
17
23
  import {
18
24
  getStackName
19
25
  } from "./chunk-V2ZIH7HV.js";
20
- import {
21
- StepSettings
22
- } from "./chunk-7UPXT32F.js";
23
- import {
24
- StepApproach
25
- } from "./chunk-KWYO3M5Q.js";
26
26
  import {
27
27
  cliTheme
28
- } from "./chunk-UNN7523L.js";
28
+ } from "./chunk-AJFSCLJ7.js";
29
29
  import {
30
30
  useWizardStore
31
- } from "./chunk-TMED5DQ2.js";
31
+ } from "./chunk-IQUBOWWU.js";
32
32
  import {
33
33
  resolveAlias,
34
34
  validateSelection
35
- } from "./chunk-ETQ3BPGU.js";
35
+ } from "./chunk-SSHG7MEE.js";
36
+ import {
37
+ warn
38
+ } from "./chunk-5WIHSJRO.js";
39
+ import {
40
+ CLI_COLORS
41
+ } from "./chunk-IFODQTCX.js";
36
42
  import {
37
43
  init_esm_shims
38
44
  } from "./chunk-AWKZ5BDL.js";
39
45
 
40
46
  // src/cli/components/wizard/wizard.tsx
41
47
  init_esm_shims();
42
- import { useCallback, useState } from "react";
48
+ import { useCallback as useCallback2 } from "react";
43
49
  import { Box, Text, useApp, useInput, useStdout } from "ink";
44
50
  import { ThemeProvider } from "@inkjs/ui";
45
- import { jsx, jsxs } from "react/jsx-runtime";
46
- function getParentDomain(domain, matrix) {
47
- const cat = Object.values(matrix.categories).find((c) => c.domain === domain && c.parent_domain);
48
- return cat?.parent_domain;
51
+
52
+ // src/cli/components/hooks/use-wizard-initialization.ts
53
+ init_esm_shims();
54
+ import { useRef } from "react";
55
+ function useWizardInitialization({
56
+ matrix,
57
+ initialStep,
58
+ initialInstallMode,
59
+ installedSkillIds
60
+ }) {
61
+ const initialized = useRef(false);
62
+ if (!initialized.current) {
63
+ initialized.current = true;
64
+ if (initialStep) {
65
+ if (installedSkillIds?.length) {
66
+ useWizardStore.getState().populateFromSkillIds(installedSkillIds, matrix.skills, matrix.categories);
67
+ }
68
+ useWizardStore.setState({ step: initialStep, approach: "scratch" });
69
+ }
70
+ if (initialInstallMode) {
71
+ useWizardStore.setState({ installMode: initialInstallMode });
72
+ }
73
+ }
74
+ }
75
+
76
+ // src/cli/components/hooks/use-build-step-props.ts
77
+ init_esm_shims();
78
+ import { useCallback } from "react";
79
+ function useBuildStepProps({
80
+ store,
81
+ matrix,
82
+ installedSkillIds
83
+ }) {
84
+ const currentDomain = store.getCurrentDomain();
85
+ const defaultDomains = ["web"];
86
+ const effectiveDomains = store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;
87
+ const allSelections = store.getAllSelectedTechnologies();
88
+ const activeDomain = currentDomain || effectiveDomains[0] || "web";
89
+ const parentDomainSelections = store.getParentDomainSelections(activeDomain, matrix);
90
+ const onToggle = useCallback(
91
+ (subcategoryId, techId) => {
92
+ const domain = store.getCurrentDomain() || "web";
93
+ const cat = matrix.categories[subcategoryId];
94
+ store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);
95
+ },
96
+ [store, matrix]
97
+ );
98
+ const onContinue = useCallback(() => {
99
+ if (!store.nextDomain()) {
100
+ store.setStep("sources");
101
+ }
102
+ }, [store]);
103
+ const onBack = useCallback(() => {
104
+ if (!store.prevDomain()) {
105
+ store.goBack();
106
+ }
107
+ }, [store]);
108
+ return {
109
+ matrix,
110
+ domain: activeDomain,
111
+ selectedDomains: effectiveDomains,
112
+ selections: store.domainSelections[activeDomain] || {},
113
+ allSelections,
114
+ showDescriptions: store.showDescriptions,
115
+ expertMode: store.expertMode,
116
+ parentDomainSelections,
117
+ installedSkillIds,
118
+ onToggle,
119
+ onToggleDescriptions: store.toggleShowDescriptions,
120
+ onContinue,
121
+ onBack
122
+ };
49
123
  }
124
+
125
+ // src/cli/components/wizard/wizard.tsx
126
+ import { jsx, jsxs } from "react/jsx-runtime";
50
127
  var MIN_TERMINAL_WIDTH = 80;
51
128
  var Wizard = ({
52
129
  matrix,
53
130
  onComplete,
54
131
  onCancel,
55
132
  version,
133
+ marketplaceLabel,
56
134
  initialStep,
135
+ initialInstallMode,
57
136
  installedSkillIds,
58
137
  projectDir
59
138
  }) => {
@@ -62,17 +141,18 @@ var Wizard = ({
62
141
  const { stdout } = useStdout();
63
142
  const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;
64
143
  const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;
65
- const [initialized] = useState(() => {
66
- if (initialStep) {
67
- if (installedSkillIds?.length) {
68
- useWizardStore.getState().populateFromSkillIds(installedSkillIds, matrix.skills, matrix.categories);
69
- }
70
- useWizardStore.setState({ step: initialStep, approach: "scratch" });
71
- }
72
- return true;
73
- });
144
+ useWizardInitialization({ matrix, initialStep, initialInstallMode, installedSkillIds });
145
+ const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });
74
146
  useInput((input, key) => {
75
147
  if (store.showSettings) return;
148
+ if (store.showHelp) {
149
+ store.toggleHelp();
150
+ return;
151
+ }
152
+ if (input === "?") {
153
+ store.toggleHelp();
154
+ return;
155
+ }
76
156
  if (key.escape) {
77
157
  if (store.step === "approach") {
78
158
  onCancel();
@@ -97,15 +177,14 @@ var Wizard = ({
97
177
  }
98
178
  if (input === "p" || input === "P") {
99
179
  store.toggleInstallMode();
100
- return;
101
180
  }
102
181
  });
103
- const handleComplete = useCallback(() => {
182
+ const handleComplete = useCallback2(() => {
104
183
  let allSkills;
105
184
  if (store.selectedStackId && store.stackAction === "defaults") {
106
185
  const stack = matrix.suggestedStacks.find((s) => s.id === store.selectedStackId);
107
186
  if (!stack) {
108
- console.warn(`Stack not found in matrix: ${store.selectedStackId}`);
187
+ warn(`Stack not found in matrix: '${store.selectedStackId}'`);
109
188
  }
110
189
  allSkills = [...stack?.allSkillIds || []];
111
190
  } else {
@@ -113,14 +192,14 @@ var Wizard = ({
113
192
  allSkills = techNames.map((tech) => {
114
193
  const resolved = resolveAlias(tech, matrix);
115
194
  if (!matrix.skills[resolved]) {
116
- console.warn(
117
- `Warning: Technology '${tech}' could not be resolved to a skill ID \u2014 it may be missing from skill_aliases`
195
+ warn(
196
+ `Technology '${tech}' could not be resolved to a skill ID - it may be missing from skill_aliases`
118
197
  );
119
198
  }
120
199
  return resolved;
121
200
  });
122
201
  }
123
- const methodologySkills = store.getSelectedSkills();
202
+ const methodologySkills = store.getDefaultMethodologySkills();
124
203
  for (const skill of methodologySkills) {
125
204
  if (!allSkills.includes(skill)) {
126
205
  allSkills.push(skill);
@@ -146,48 +225,8 @@ var Wizard = ({
146
225
  return /* @__PURE__ */ jsx(StepApproach, {});
147
226
  case "stack":
148
227
  return /* @__PURE__ */ jsx(StepStack, { matrix });
149
- case "build": {
150
- const currentDomain = store.getCurrentDomain();
151
- const defaultDomains = ["web"];
152
- const effectiveDomains = store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;
153
- const allSelections = store.getAllSelectedTechnologies();
154
- const activeDomain = currentDomain || effectiveDomains[0] || "web";
155
- const parentDomain = getParentDomain(activeDomain, matrix);
156
- const parentDomainSelections = parentDomain ? store.domainSelections[parentDomain] : void 0;
157
- return /* @__PURE__ */ jsx(
158
- StepBuild,
159
- {
160
- matrix,
161
- domain: activeDomain,
162
- selectedDomains: effectiveDomains,
163
- selections: store.domainSelections[activeDomain] || {},
164
- allSelections,
165
- focusedRow: store.focusedRow,
166
- focusedCol: store.focusedCol,
167
- showDescriptions: store.showDescriptions,
168
- expertMode: store.expertMode,
169
- parentDomainSelections,
170
- installedSkillIds,
171
- onToggle: (subcategoryId, techId) => {
172
- const domain = store.getCurrentDomain() || "web";
173
- const cat = matrix.categories[subcategoryId];
174
- store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);
175
- },
176
- onFocusChange: store.setFocus,
177
- onToggleDescriptions: store.toggleShowDescriptions,
178
- onContinue: () => {
179
- if (!store.nextDomain()) {
180
- store.setStep("sources");
181
- }
182
- },
183
- onBack: () => {
184
- if (!store.prevDomain()) {
185
- store.goBack();
186
- }
187
- }
188
- }
189
- );
190
- }
228
+ case "build":
229
+ return /* @__PURE__ */ jsx(StepBuild, { ...buildStepProps });
191
230
  case "sources": {
192
231
  if (store.showSettings) {
193
232
  return /* @__PURE__ */ jsx(
@@ -203,16 +242,14 @@ var Wizard = ({
203
242
  {
204
243
  matrix,
205
244
  projectDir,
206
- onContinue: handleComplete,
245
+ onContinue: () => store.setStep("confirm"),
207
246
  onBack: store.goBack
208
247
  }
209
248
  );
210
249
  }
211
- // NOTE: Currently unreachable — sources step calls handleComplete directly.
212
- // Kept for future use when confirm step is wired back in.
213
250
  case "confirm": {
214
251
  const stackName = getStackName(store.selectedStackId, matrix);
215
- const selectedCount = store.getAllSelectedTechnologies().length;
252
+ const technologyCount = store.getTechnologyCount();
216
253
  return /* @__PURE__ */ jsx(
217
254
  StepConfirm,
218
255
  {
@@ -220,8 +257,8 @@ var Wizard = ({
220
257
  stackName,
221
258
  selectedDomains: store.selectedDomains,
222
259
  domainSelections: store.domainSelections,
223
- technologyCount: selectedCount,
224
- skillCount: selectedCount,
260
+ technologyCount,
261
+ skillCount: technologyCount,
225
262
  installMode: store.installMode,
226
263
  onBack: store.goBack
227
264
  }
@@ -233,7 +270,7 @@ var Wizard = ({
233
270
  };
234
271
  if (isNarrowTerminal) {
235
272
  return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsxs(Box, { flexDirection: "column", padding: 1, children: [
236
- /* @__PURE__ */ jsxs(Text, { color: "yellow", children: [
273
+ /* @__PURE__ */ jsxs(Text, { color: CLI_COLORS.WARNING, children: [
237
274
  "Terminal too narrow (",
238
275
  terminalWidth,
239
276
  " columns). Please resize to at least",
@@ -248,10 +285,10 @@ var Wizard = ({
248
285
  ] }) })
249
286
  ] }) });
250
287
  }
251
- return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsx(WizardLayout, { version, children: renderStep() }) });
288
+ return /* @__PURE__ */ jsx(ThemeProvider, { theme: cliTheme, children: /* @__PURE__ */ jsx(WizardLayout, { version, marketplaceLabel, children: renderStep() }) });
252
289
  };
253
290
 
254
291
  export {
255
292
  Wizard
256
293
  };
257
- //# sourceMappingURL=chunk-R7B63JAP.js.map
294
+ //# sourceMappingURL=chunk-DUIYVKFK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard.tsx","../src/cli/components/hooks/use-wizard-initialization.ts","../src/cli/components/hooks/use-build-step-props.ts"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { Box, Text, useApp, useInput, useStdout } from \"ink\";\nimport { ThemeProvider } from \"@inkjs/ui\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { cliTheme } from \"../themes/default.js\";\nimport { WizardLayout } from \"./wizard-layout.js\";\nimport { StepApproach } from \"./step-approach.js\";\nimport { StepStack } from \"./step-stack.js\";\nimport { StepBuild } from \"./step-build.js\";\nimport { StepConfirm } from \"./step-confirm.js\";\nimport { StepSources } from \"./step-sources.js\";\nimport { StepSettings } from \"./step-settings.js\";\nimport { resolveAlias, validateSelection } from \"../../lib/matrix/index.js\";\nimport type { DomainSelections, MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\nimport { getStackName } from \"./utils.js\";\nimport { warn } from \"../../utils/logger.js\";\nimport { useWizardInitialization } from \"../hooks/use-wizard-initialization.js\";\nimport { useBuildStepProps } from \"../hooks/use-build-step-props.js\";\n\nexport type WizardResultV2 = {\n selectedSkills: SkillId[];\n selectedStackId: string | null;\n domainSelections: DomainSelections;\n sourceSelections: Partial<Record<SkillId, string>>;\n expertMode: boolean;\n installMode: \"plugin\" | \"local\";\n cancelled: boolean;\n validation: {\n valid: boolean;\n errors: Array<{ message: string }>;\n warnings: Array<{ message: string }>;\n };\n};\n\ntype WizardProps = {\n matrix: MergedSkillsMatrix;\n onComplete: (result: WizardResultV2) => void;\n onCancel: () => void;\n version?: string;\n marketplaceLabel?: string;\n initialStep?: WizardStep;\n initialInstallMode?: \"plugin\" | \"local\";\n installedSkillIds?: SkillId[];\n projectDir?: string;\n};\n\nconst MIN_TERMINAL_WIDTH = 80;\n\nexport const Wizard: React.FC<WizardProps> = ({\n matrix,\n onComplete,\n onCancel,\n version,\n marketplaceLabel,\n initialStep,\n initialInstallMode,\n installedSkillIds,\n projectDir,\n}) => {\n const store = useWizardStore();\n const { exit } = useApp();\n const { stdout } = useStdout();\n\n const terminalWidth = stdout.columns || MIN_TERMINAL_WIDTH;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n\n useWizardInitialization({ matrix, initialStep, initialInstallMode, installedSkillIds });\n\n const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });\n\n useInput((input, key) => {\n // Disable global hotkeys when settings or help overlay is active\n if (store.showSettings) return;\n\n if (store.showHelp) {\n // Any key closes the help modal (useInput in HelpModal handles this too)\n store.toggleHelp();\n return;\n }\n\n if (input === \"?\") {\n store.toggleHelp();\n return;\n }\n\n if (key.escape) {\n if (store.step === \"approach\") {\n onCancel();\n exit();\n } else if (store.step !== \"build\" && store.step !== \"confirm\" && store.step !== \"sources\") {\n // Only handle escape globally for steps that don't have their own escape handler.\n store.goBack();\n }\n return;\n }\n\n // Accept defaults shortcut (stack path only, during build step)\n if ((input === \"a\" || input === \"A\") && store.step === \"build\" && store.selectedStackId) {\n store.setStackAction(\"defaults\");\n store.setStep(\"confirm\");\n return;\n }\n\n if ((input === \"g\" || input === \"G\") && store.step === \"sources\") {\n store.toggleSettings();\n return;\n }\n\n if (input === \"e\" || input === \"E\") {\n store.toggleExpertMode();\n return;\n }\n if (input === \"p\" || input === \"P\") {\n store.toggleInstallMode();\n }\n });\n\n const handleComplete = useCallback(() => {\n let allSkills: SkillId[];\n\n if (store.selectedStackId && store.stackAction === \"defaults\") {\n const stack = matrix.suggestedStacks.find((s) => s.id === store.selectedStackId);\n if (!stack) {\n warn(`Stack not found in matrix: '${store.selectedStackId}'`);\n }\n allSkills = [...(stack?.allSkillIds || [])];\n } else {\n const techNames = store.getAllSelectedTechnologies();\n allSkills = techNames.map((tech) => {\n const resolved = resolveAlias(tech, matrix);\n if (!matrix.skills[resolved]) {\n warn(\n `Technology '${tech}' could not be resolved to a skill ID - it may be missing from skill_aliases`,\n );\n }\n return resolved;\n });\n }\n\n const methodologySkills = store.getDefaultMethodologySkills();\n for (const skill of methodologySkills) {\n if (!allSkills.includes(skill)) {\n allSkills.push(skill);\n }\n }\n\n const validation = validateSelection(allSkills, matrix);\n\n const result: WizardResultV2 = {\n selectedSkills: allSkills,\n selectedStackId: store.selectedStackId,\n domainSelections: store.domainSelections,\n sourceSelections: store.sourceSelections,\n expertMode: store.expertMode,\n installMode: store.installMode,\n cancelled: false,\n validation,\n };\n\n onComplete(result);\n exit();\n }, [store, matrix, onComplete, exit]);\n\n const renderStep = () => {\n switch (store.step) {\n case \"approach\":\n return <StepApproach />;\n\n case \"stack\":\n return <StepStack matrix={matrix} />;\n\n case \"build\":\n return <StepBuild {...buildStepProps} />;\n\n case \"sources\": {\n if (store.showSettings) {\n return (\n <StepSettings\n projectDir={projectDir || process.cwd()}\n onClose={() => store.toggleSettings()}\n />\n );\n }\n return (\n <StepSources\n matrix={matrix}\n projectDir={projectDir}\n onContinue={() => store.setStep(\"confirm\")}\n onBack={store.goBack}\n />\n );\n }\n\n case \"confirm\": {\n const stackName = getStackName(store.selectedStackId, matrix);\n const technologyCount = store.getTechnologyCount();\n return (\n <StepConfirm\n onComplete={handleComplete}\n stackName={stackName}\n selectedDomains={store.selectedDomains}\n domainSelections={store.domainSelections}\n technologyCount={technologyCount}\n skillCount={technologyCount}\n installMode={store.installMode}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n if (isNarrowTerminal) {\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color={CLI_COLORS.WARNING}>\n Terminal too narrow ({terminalWidth} columns). Please resize to at least{\" \"}\n {MIN_TERMINAL_WIDTH} columns.\n </Text>\n <Box marginTop={1}>\n <Text dimColor>Current width: {terminalWidth} columns</Text>\n </Box>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout version={version} marketplaceLabel={marketplaceLabel}>\n {renderStep()}\n </WizardLayout>\n </ThemeProvider>\n );\n};\n","import { useRef } from \"react\";\nimport { useWizardStore, type WizardStep } from \"../../stores/wizard-store.js\";\nimport type { MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\n\ntype UseWizardInitializationOptions = {\n matrix: MergedSkillsMatrix;\n initialStep?: WizardStep;\n initialInstallMode?: \"plugin\" | \"local\";\n installedSkillIds?: SkillId[];\n};\n\n/**\n * Runs one-time wizard store initialization before the first render.\n * Populates step, approach, install mode, and skill selections from props.\n */\nexport function useWizardInitialization({\n matrix,\n initialStep,\n initialInstallMode,\n installedSkillIds,\n}: UseWizardInitializationOptions): void {\n const initialized = useRef(false);\n\n if (!initialized.current) {\n initialized.current = true;\n\n if (initialStep) {\n if (installedSkillIds?.length) {\n useWizardStore\n .getState()\n .populateFromSkillIds(installedSkillIds, matrix.skills, matrix.categories);\n }\n useWizardStore.setState({ step: initialStep, approach: \"scratch\" });\n }\n if (initialInstallMode) {\n useWizardStore.setState({ installMode: initialInstallMode });\n }\n }\n}\n","import { useCallback } from \"react\";\nimport type { Domain, MergedSkillsMatrix, SkillId } from \"../../types/index.js\";\nimport type { WizardState } from \"../../stores/wizard-store.js\";\nimport type { StepBuildProps } from \"../wizard/step-build.js\";\n\ntype UseBuildStepPropsOptions = {\n store: WizardState;\n matrix: MergedSkillsMatrix;\n installedSkillIds?: SkillId[];\n};\n\nexport function useBuildStepProps({\n store,\n matrix,\n installedSkillIds,\n}: UseBuildStepPropsOptions): StepBuildProps {\n const currentDomain = store.getCurrentDomain();\n const defaultDomains: Domain[] = [\"web\"];\n const effectiveDomains =\n store.selectedDomains.length > 0 ? store.selectedDomains : defaultDomains;\n\n const allSelections = store.getAllSelectedTechnologies();\n\n const activeDomain: Domain = currentDomain || effectiveDomains[0] || \"web\";\n const parentDomainSelections = store.getParentDomainSelections(activeDomain, matrix);\n\n const onToggle = useCallback(\n (subcategoryId: Parameters<StepBuildProps[\"onToggle\"]>[0], techId: SkillId) => {\n const domain: Domain = store.getCurrentDomain() || \"web\";\n const cat = matrix.categories[subcategoryId];\n store.toggleTechnology(domain, subcategoryId, techId, cat?.exclusive ?? true);\n },\n [store, matrix],\n );\n\n const onContinue = useCallback(() => {\n if (!store.nextDomain()) {\n store.setStep(\"sources\");\n }\n }, [store]);\n\n const onBack = useCallback(() => {\n if (!store.prevDomain()) {\n store.goBack();\n }\n }, [store]);\n\n return {\n matrix,\n domain: activeDomain,\n selectedDomains: effectiveDomains,\n selections: store.domainSelections[activeDomain] || {},\n allSelections,\n showDescriptions: store.showDescriptions,\n expertMode: store.expertMode,\n parentDomainSelections,\n installedSkillIds,\n onToggle,\n onToggleDescriptions: store.toggleShowDescriptions,\n onContinue,\n onBack,\n };\n}\n"],"mappings":"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","names":["useCallback","useCallback"]}
@@ -0,0 +1,142 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ WIZARD_STEPS,
4
+ WizardTabs
5
+ } from "./chunk-7UKQZSWT.js";
6
+ import {
7
+ HelpModal
8
+ } from "./chunk-MQAYAISQ.js";
9
+ import {
10
+ useWizardStore
11
+ } from "./chunk-IQUBOWWU.js";
12
+ import {
13
+ CLI_COLORS
14
+ } from "./chunk-IFODQTCX.js";
15
+ import {
16
+ init_esm_shims
17
+ } from "./chunk-AWKZ5BDL.js";
18
+
19
+ // src/cli/components/wizard/wizard-layout.tsx
20
+ init_esm_shims();
21
+ import { Fragment } from "react";
22
+ import { Box, Text } from "ink";
23
+ import { Fragment as Fragment2, jsx, jsxs } from "react/jsx-runtime";
24
+ import { createElement } from "react";
25
+ var DefinitionItem = ({
26
+ isVisible = true,
27
+ isActive = false,
28
+ label,
29
+ values
30
+ }) => {
31
+ if (!isVisible) {
32
+ return null;
33
+ }
34
+ return /* @__PURE__ */ jsxs(Text, { children: [
35
+ values.map((value) => /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ /* @__PURE__ */ jsxs(Text, { backgroundColor: "black", color: CLI_COLORS.UNFOCUSED, children: [
37
+ " ",
38
+ value,
39
+ " "
40
+ ] }),
41
+ " "
42
+ ] }, value)),
43
+ /* @__PURE__ */ jsx(Text, { color: isActive ? CLI_COLORS.PRIMARY : void 0, children: label })
44
+ ] });
45
+ };
46
+ var HOT_KEYS = [
47
+ { label: "navigate", values: ["\u2190/\u2192", "\u2191/\u2193"] },
48
+ { label: "select", values: ["SPACE"] },
49
+ { label: "continue", values: ["ENTER"] },
50
+ { label: "back", values: ["ESC"] }
51
+ ];
52
+ var WizardFooter = () => {
53
+ const store = useWizardStore();
54
+ return /* @__PURE__ */ jsxs(
55
+ Box,
56
+ {
57
+ columnGap: 2,
58
+ borderTop: true,
59
+ borderRight: false,
60
+ borderBottom: true,
61
+ borderLeft: false,
62
+ borderColor: "blackBright",
63
+ borderStyle: "single",
64
+ paddingLeft: 1,
65
+ paddingRight: 1,
66
+ children: [
67
+ /* @__PURE__ */ jsx(
68
+ DefinitionItem,
69
+ {
70
+ label: "Accept defaults",
71
+ values: ["A"],
72
+ isVisible: store.step === "build" && !!store.selectedStackId
73
+ }
74
+ ),
75
+ HOT_KEYS.map((hotkey) => /* @__PURE__ */ createElement(DefinitionItem, { ...hotkey, key: hotkey.label }))
76
+ ]
77
+ }
78
+ );
79
+ };
80
+ var WizardLayout = ({
81
+ version,
82
+ marketplaceLabel,
83
+ children
84
+ }) => {
85
+ const store = useWizardStore();
86
+ const { completedSteps, skippedSteps } = store.getStepProgress();
87
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", paddingX: 1, children: [
88
+ /* @__PURE__ */ jsx(
89
+ WizardTabs,
90
+ {
91
+ steps: WIZARD_STEPS,
92
+ currentStep: store.step,
93
+ completedSteps,
94
+ skippedSteps,
95
+ version
96
+ }
97
+ ),
98
+ marketplaceLabel && /* @__PURE__ */ jsxs(Box, { paddingLeft: 1, marginTop: 1, children: [
99
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Marketplace: " }),
100
+ /* @__PURE__ */ jsx(Text, { bold: true, children: marketplaceLabel })
101
+ ] }),
102
+ store.showHelp ? /* @__PURE__ */ jsx(HelpModal, { currentStep: store.step, onClose: store.toggleHelp }) : /* @__PURE__ */ jsxs(Fragment2, { children: [
103
+ /* @__PURE__ */ jsx(Box, { marginTop: 1, children }),
104
+ /* @__PURE__ */ jsxs(Box, { paddingX: 1, columnGap: 2, marginTop: 2, children: [
105
+ /* @__PURE__ */ jsx(DefinitionItem, { label: "Expert mode", values: ["E"], isActive: store.expertMode }),
106
+ /* @__PURE__ */ jsx(
107
+ DefinitionItem,
108
+ {
109
+ label: "Descriptions",
110
+ values: ["D"],
111
+ isVisible: store.step === "build",
112
+ isActive: store.showDescriptions
113
+ }
114
+ ),
115
+ /* @__PURE__ */ jsx(
116
+ DefinitionItem,
117
+ {
118
+ label: "Plugin mode",
119
+ values: ["P"],
120
+ isActive: store.installMode === "plugin"
121
+ }
122
+ ),
123
+ /* @__PURE__ */ jsx(
124
+ DefinitionItem,
125
+ {
126
+ label: "Settings",
127
+ values: ["G"],
128
+ isVisible: store.step === "sources",
129
+ isActive: store.showSettings
130
+ }
131
+ ),
132
+ /* @__PURE__ */ jsx(DefinitionItem, { label: "Help", values: ["?"] })
133
+ ] }),
134
+ /* @__PURE__ */ jsx(WizardFooter, {})
135
+ ] })
136
+ ] });
137
+ };
138
+
139
+ export {
140
+ WizardLayout
141
+ };
142
+ //# sourceMappingURL=chunk-EP6J44I4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/wizard-layout.tsx"],"sourcesContent":["import React, { Fragment } from \"react\";\nimport { Box, Text } from \"ink\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { WizardTabs, WIZARD_STEPS } from \"./wizard-tabs.js\";\nimport { HelpModal } from \"./help-modal.js\";\n\ntype KeyHintProps = {\n isVisible?: boolean;\n isActive?: boolean;\n label: string;\n values: string[];\n};\n\nconst DefinitionItem: React.FC<KeyHintProps> = ({\n isVisible = true,\n isActive = false,\n label,\n values,\n}) => {\n if (!isVisible) {\n return null;\n }\n\n return (\n <Text>\n {values.map((value) => (\n <Fragment key={value}>\n <Text backgroundColor=\"black\" color={CLI_COLORS.UNFOCUSED}>\n {\" \"}\n {value}{\" \"}\n </Text>{\" \"}\n </Fragment>\n ))}\n <Text color={isActive ? CLI_COLORS.PRIMARY : undefined}>{label}</Text>\n </Text>\n );\n};\n\nconst HOT_KEYS: { label: string; values: string[] }[] = [\n { label: \"navigate\", values: [\"\\u2190/\\u2192\", \"\\u2191/\\u2193\"] },\n { label: \"select\", values: [\"SPACE\"] },\n { label: \"continue\", values: [\"ENTER\"] },\n { label: \"back\", values: [\"ESC\"] },\n];\n\nconst WizardFooter = () => {\n const store = useWizardStore();\n\n return (\n <Box\n columnGap={2}\n borderTop\n borderRight={false}\n borderBottom\n borderLeft={false}\n borderColor=\"blackBright\"\n borderStyle=\"single\"\n paddingLeft={1}\n paddingRight={1}\n >\n <DefinitionItem\n label=\"Accept defaults\"\n values={[\"A\"]}\n isVisible={store.step === \"build\" && !!store.selectedStackId}\n />\n {HOT_KEYS.map((hotkey) => (\n <DefinitionItem {...hotkey} key={hotkey.label} />\n ))}\n </Box>\n );\n};\n\ntype WizardLayoutProps = {\n version?: string;\n marketplaceLabel?: string;\n children: React.ReactNode;\n};\n\nexport const WizardLayout: React.FC<WizardLayoutProps> = ({\n version,\n marketplaceLabel,\n children,\n}) => {\n const store = useWizardStore();\n const { completedSteps, skippedSteps } = store.getStepProgress();\n\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <WizardTabs\n steps={WIZARD_STEPS}\n currentStep={store.step}\n completedSteps={completedSteps}\n skippedSteps={skippedSteps}\n version={version}\n />\n {marketplaceLabel && (\n <Box paddingLeft={1} marginTop={1}>\n <Text dimColor>Marketplace: </Text>\n <Text bold>{marketplaceLabel}</Text>\n </Box>\n )}\n {store.showHelp ? (\n <HelpModal currentStep={store.step} onClose={store.toggleHelp} />\n ) : (\n <>\n <Box marginTop={1}>{children}</Box>\n <Box paddingX={1} columnGap={2} marginTop={2}>\n <DefinitionItem label=\"Expert mode\" values={[\"E\"]} isActive={store.expertMode} />\n <DefinitionItem\n label=\"Descriptions\"\n values={[\"D\"]}\n isVisible={store.step === \"build\"}\n isActive={store.showDescriptions}\n />\n <DefinitionItem\n label=\"Plugin mode\"\n values={[\"P\"]}\n isActive={store.installMode === \"plugin\"}\n />\n <DefinitionItem\n label=\"Settings\"\n values={[\"G\"]}\n isVisible={store.step === \"sources\"}\n isActive={store.showSettings}\n />\n <DefinitionItem label=\"Help\" values={[\"?\"]} />\n </Box>\n <WizardFooter />\n </>\n )}\n </Box>\n );\n};\n"],"mappings":"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","names":["Fragment"]}