@agents-inc/cli 0.35.0 → 0.38.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 (190) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/config/skills-matrix.yaml +17 -17
  3. package/dist/{chunk-HTTPKSL6.js → chunk-2XX4TMCI.js} +2 -2
  4. package/dist/{chunk-CEWNZQMH.js → chunk-3E2V5YL3.js} +8 -2
  5. package/dist/chunk-3E2V5YL3.js.map +1 -0
  6. package/dist/{chunk-IG7CUREJ.js → chunk-3NQJOJZL.js} +2 -2
  7. package/dist/chunk-54ZZCWN4.js +51 -0
  8. package/dist/chunk-54ZZCWN4.js.map +1 -0
  9. package/dist/{chunk-VEZ2GZEK.js → chunk-ATLRUR3B.js} +2 -2
  10. package/dist/{chunk-KWF6D7ZP.js → chunk-CYFU3ARY.js} +26 -16
  11. package/dist/chunk-CYFU3ARY.js.map +1 -0
  12. package/dist/{chunk-CXWPUVA7.js → chunk-DUQFF45G.js} +7 -7
  13. package/dist/{chunk-U36YCEBK.js → chunk-EISBUEBL.js} +32 -23
  14. package/dist/chunk-EISBUEBL.js.map +1 -0
  15. package/dist/chunk-EXFVAEPY.js +80 -0
  16. package/dist/chunk-EXFVAEPY.js.map +1 -0
  17. package/dist/{chunk-YN35L5NE.js → chunk-FWQK3HWB.js} +4 -4
  18. package/dist/chunk-FWQK3HWB.js.map +1 -0
  19. package/dist/{chunk-DC5AK3LW.js → chunk-GG4BSB6S.js} +5 -11
  20. package/dist/chunk-GG4BSB6S.js.map +1 -0
  21. package/dist/{chunk-GGHH3KR2.js → chunk-HKDE4LJW.js} +2 -2
  22. package/dist/{chunk-OGXSTJP2.js → chunk-HRMQ2RGY.js} +81 -26
  23. package/dist/chunk-HRMQ2RGY.js.map +1 -0
  24. package/dist/{chunk-YPJKOM42.js → chunk-HRW7BIDE.js} +2 -2
  25. package/dist/{chunk-LFHZBF6N.js → chunk-IVIK776Y.js} +4 -3
  26. package/dist/chunk-IVIK776Y.js.map +1 -0
  27. package/dist/{chunk-NVQEHRJY.js → chunk-IWNPFIGY.js} +38 -48
  28. package/dist/chunk-IWNPFIGY.js.map +1 -0
  29. package/dist/{chunk-YIKBNGE3.js → chunk-IZRVFC2Z.js} +7 -7
  30. package/dist/chunk-IZRVFC2Z.js.map +1 -0
  31. package/dist/{chunk-AQQVSNUX.js → chunk-K77I4XGL.js} +20 -6
  32. package/dist/chunk-K77I4XGL.js.map +1 -0
  33. package/dist/{chunk-BPD4VUAU.js → chunk-M6PGIZNS.js} +5 -5
  34. package/dist/{chunk-5LPPIT6H.js → chunk-NFV4SKH5.js} +4 -4
  35. package/dist/chunk-NI2RSNWB.js +156 -0
  36. package/dist/chunk-NI2RSNWB.js.map +1 -0
  37. package/dist/{chunk-NJ775OJ4.js → chunk-OEX5JDQD.js} +7 -7
  38. package/dist/chunk-OEX5JDQD.js.map +1 -0
  39. package/dist/{chunk-OKILA27U.js → chunk-TA6IIQI4.js} +86 -99
  40. package/dist/chunk-TA6IIQI4.js.map +1 -0
  41. package/dist/{chunk-PKUIO2Z7.js → chunk-TBDIR6LY.js} +8 -8
  42. package/dist/chunk-TBDIR6LY.js.map +1 -0
  43. package/dist/{chunk-XYCN2GCV.js → chunk-TNFACSWF.js} +3 -3
  44. package/dist/{chunk-ZE355C6C.js → chunk-TY5GELDB.js} +9 -4
  45. package/dist/chunk-TY5GELDB.js.map +1 -0
  46. package/dist/{chunk-WMVGRAFB.js → chunk-U5OB5ADP.js} +186 -109
  47. package/dist/chunk-U5OB5ADP.js.map +1 -0
  48. package/dist/{chunk-JXMRTHDT.js → chunk-UOMMQ5M6.js} +2 -2
  49. package/dist/{chunk-XNQJBQ5X.js → chunk-UV6JUGIY.js} +2 -2
  50. package/dist/{chunk-5YNZJ5TP.js → chunk-VAHVSQIG.js} +2 -2
  51. package/dist/{chunk-OGJ7DFCL.js → chunk-VAK5PX72.js} +5 -5
  52. package/dist/chunk-WSGGJKD5.js +113 -0
  53. package/dist/chunk-WSGGJKD5.js.map +1 -0
  54. package/dist/{chunk-BLLXNFWP.js → chunk-YHQNTBBN.js} +2 -2
  55. package/dist/{chunk-OI4WBRC7.js → chunk-YJIJTBSX.js} +77 -102
  56. package/dist/chunk-YJIJTBSX.js.map +1 -0
  57. package/dist/{chunk-YCS7GF6Y.js → chunk-ZBJQXDQN.js} +3 -1
  58. package/dist/{chunk-YCS7GF6Y.js.map → chunk-ZBJQXDQN.js.map} +1 -1
  59. package/dist/cli/defaults/agent-mappings.yaml +4 -4
  60. package/dist/commands/build/marketplace.js +3 -3
  61. package/dist/commands/build/plugins.js +5 -5
  62. package/dist/commands/build/stack.js +5 -5
  63. package/dist/commands/compile.js +12 -17
  64. package/dist/commands/compile.js.map +1 -1
  65. package/dist/commands/config/get.js +8 -8
  66. package/dist/commands/config/get.js.map +1 -1
  67. package/dist/commands/config/index.js +5 -5
  68. package/dist/commands/config/path.js +4 -4
  69. package/dist/commands/config/set-project.js +7 -7
  70. package/dist/commands/config/set-project.js.map +1 -1
  71. package/dist/commands/config/show.js +5 -5
  72. package/dist/commands/config/unset-project.js +5 -5
  73. package/dist/commands/config/unset-project.js.map +1 -1
  74. package/dist/commands/diff.js +8 -8
  75. package/dist/commands/diff.js.map +1 -1
  76. package/dist/commands/doctor.js +4 -4
  77. package/dist/commands/edit.js +30 -27
  78. package/dist/commands/edit.js.map +1 -1
  79. package/dist/commands/eject.js +6 -6
  80. package/dist/commands/eject.js.map +1 -1
  81. package/dist/commands/import/skill.js +16 -16
  82. package/dist/commands/import/skill.js.map +1 -1
  83. package/dist/commands/info.js +5 -5
  84. package/dist/commands/init.js +29 -26
  85. package/dist/commands/init.js.map +1 -1
  86. package/dist/commands/list.js +4 -4
  87. package/dist/commands/new/agent.js +5 -5
  88. package/dist/commands/new/skill.js +8 -8
  89. package/dist/commands/new/skill.js.map +1 -1
  90. package/dist/commands/outdated.js +4 -4
  91. package/dist/commands/search.js +7 -7
  92. package/dist/commands/uninstall.js +109 -102
  93. package/dist/commands/uninstall.js.map +1 -1
  94. package/dist/commands/update.js +6 -6
  95. package/dist/commands/validate.js +5 -5
  96. package/dist/commands/version/bump.js +4 -4
  97. package/dist/commands/version/index.js +4 -4
  98. package/dist/commands/version/set.js +4 -4
  99. package/dist/commands/version/show.js +4 -4
  100. package/dist/components/skill-search/skill-search.js +3 -3
  101. package/dist/components/wizard/category-grid.js +3 -3
  102. package/dist/components/wizard/category-grid.test.js +42 -21
  103. package/dist/components/wizard/category-grid.test.js.map +1 -1
  104. package/dist/components/wizard/checkbox-grid.js +10 -0
  105. package/dist/components/wizard/checkbox-grid.test.js +260 -0
  106. package/dist/components/wizard/checkbox-grid.test.js.map +1 -0
  107. package/dist/components/wizard/domain-selection.js +7 -5
  108. package/dist/components/wizard/help-modal.js +2 -2
  109. package/dist/components/wizard/menu-item.js +2 -2
  110. package/dist/components/wizard/search-modal.js +2 -2
  111. package/dist/components/wizard/search-modal.test.js +2 -2
  112. package/dist/components/wizard/section-progress.js +2 -2
  113. package/dist/components/wizard/section-progress.test.js +2 -2
  114. package/dist/components/wizard/source-grid.js +4 -4
  115. package/dist/components/wizard/source-grid.test.js +4 -4
  116. package/dist/components/wizard/stack-selection.js +8 -7
  117. package/dist/components/wizard/step-agents.js +16 -0
  118. package/dist/components/wizard/step-agents.js.map +1 -0
  119. package/dist/components/wizard/step-agents.test.js +185 -0
  120. package/dist/components/wizard/step-agents.test.js.map +1 -0
  121. package/dist/components/wizard/step-build.js +9 -8
  122. package/dist/components/wizard/step-build.test.js +25 -23
  123. package/dist/components/wizard/step-build.test.js.map +1 -1
  124. package/dist/components/wizard/step-confirm.js +2 -2
  125. package/dist/components/wizard/step-confirm.test.js +6 -5
  126. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  127. package/dist/components/wizard/step-refine.js +2 -2
  128. package/dist/components/wizard/step-refine.test.js +2 -2
  129. package/dist/components/wizard/step-settings.js +5 -5
  130. package/dist/components/wizard/step-settings.test.js +8 -8
  131. package/dist/components/wizard/step-sources.js +11 -10
  132. package/dist/components/wizard/step-sources.test.js +13 -12
  133. package/dist/components/wizard/step-sources.test.js.map +1 -1
  134. package/dist/components/wizard/step-stack.js +11 -9
  135. package/dist/components/wizard/step-stack.test.js +12 -10
  136. package/dist/components/wizard/step-stack.test.js.map +1 -1
  137. package/dist/components/wizard/view-title.js +2 -2
  138. package/dist/components/wizard/wizard-layout.js +8 -7
  139. package/dist/components/wizard/wizard-tabs.js +2 -2
  140. package/dist/components/wizard/wizard-tabs.test.js +6 -4
  141. package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
  142. package/dist/components/wizard/wizard.js +26 -23
  143. package/dist/config/skills-matrix.yaml +17 -17
  144. package/dist/hooks/init.js +3 -3
  145. package/dist/{source-manager-PTK4P6BF.js → source-manager-FEGVYDFZ.js} +4 -4
  146. package/dist/source-manager-FEGVYDFZ.js.map +1 -0
  147. package/dist/stores/wizard-store.js +5 -4
  148. package/dist/stores/wizard-store.test.js +287 -15
  149. package/dist/stores/wizard-store.test.js.map +1 -1
  150. package/package.json +1 -1
  151. package/src/schemas/agent.schema.json +3 -3
  152. package/src/schemas/metadata.schema.json +14 -14
  153. package/src/schemas/project-config.schema.json +43 -2
  154. package/src/schemas/project-source-config.schema.json +5 -5
  155. package/src/schemas/skills-matrix.schema.json +4 -4
  156. package/src/schemas/stack.schema.json +1 -1
  157. package/src/schemas/stacks.schema.json +42 -1
  158. package/dist/chunk-AQQVSNUX.js.map +0 -1
  159. package/dist/chunk-CEWNZQMH.js.map +0 -1
  160. package/dist/chunk-DC5AK3LW.js.map +0 -1
  161. package/dist/chunk-KWF6D7ZP.js.map +0 -1
  162. package/dist/chunk-LFHZBF6N.js.map +0 -1
  163. package/dist/chunk-NJ775OJ4.js.map +0 -1
  164. package/dist/chunk-NVQEHRJY.js.map +0 -1
  165. package/dist/chunk-OGXSTJP2.js.map +0 -1
  166. package/dist/chunk-OI4WBRC7.js.map +0 -1
  167. package/dist/chunk-OKILA27U.js.map +0 -1
  168. package/dist/chunk-PKUIO2Z7.js.map +0 -1
  169. package/dist/chunk-U36YCEBK.js.map +0 -1
  170. package/dist/chunk-UFUQUFV6.js +0 -256
  171. package/dist/chunk-UFUQUFV6.js.map +0 -1
  172. package/dist/chunk-WMVGRAFB.js.map +0 -1
  173. package/dist/chunk-YIKBNGE3.js.map +0 -1
  174. package/dist/chunk-YN35L5NE.js.map +0 -1
  175. package/dist/chunk-ZE355C6C.js.map +0 -1
  176. /package/dist/{chunk-HTTPKSL6.js.map → chunk-2XX4TMCI.js.map} +0 -0
  177. /package/dist/{chunk-IG7CUREJ.js.map → chunk-3NQJOJZL.js.map} +0 -0
  178. /package/dist/{chunk-VEZ2GZEK.js.map → chunk-ATLRUR3B.js.map} +0 -0
  179. /package/dist/{chunk-CXWPUVA7.js.map → chunk-DUQFF45G.js.map} +0 -0
  180. /package/dist/{chunk-GGHH3KR2.js.map → chunk-HKDE4LJW.js.map} +0 -0
  181. /package/dist/{chunk-YPJKOM42.js.map → chunk-HRW7BIDE.js.map} +0 -0
  182. /package/dist/{chunk-BPD4VUAU.js.map → chunk-M6PGIZNS.js.map} +0 -0
  183. /package/dist/{chunk-5LPPIT6H.js.map → chunk-NFV4SKH5.js.map} +0 -0
  184. /package/dist/{chunk-XYCN2GCV.js.map → chunk-TNFACSWF.js.map} +0 -0
  185. /package/dist/{chunk-JXMRTHDT.js.map → chunk-UOMMQ5M6.js.map} +0 -0
  186. /package/dist/{chunk-XNQJBQ5X.js.map → chunk-UV6JUGIY.js.map} +0 -0
  187. /package/dist/{chunk-5YNZJ5TP.js.map → chunk-VAHVSQIG.js.map} +0 -0
  188. /package/dist/{chunk-OGJ7DFCL.js.map → chunk-VAK5PX72.js.map} +0 -0
  189. /package/dist/{chunk-BLLXNFWP.js.map → chunk-YHQNTBBN.js.map} +0 -0
  190. /package/dist/{source-manager-PTK4P6BF.js.map → components/wizard/checkbox-grid.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -9,6 +9,43 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
9
9
 
10
10
  ---
11
11
 
12
+ ## [0.38.0] - 2026-02-18
13
+
14
+ **Agents selection step, skill-based preselection, strict stacks schema**
15
+
16
+ - New "Agents" wizard step — users can toggle which agents to compile
17
+ - Agents preselected from actually selected skills (not just domains)
18
+ - Stacks schema enforces valid subcategory keys via enum
19
+ - Reusable CheckboxGrid component extracted from domain selection
20
+
21
+ See [changelogs/0.38.0.md](./changelogs/0.38.0.md) for full details.
22
+
23
+ ---
24
+
25
+ ## [0.37.0] - 2026-02-18
26
+
27
+ **Rename all snake_case config/metadata fields to camelCase (D-27)**
28
+
29
+ - 27 fields renamed across types, schemas, configs, and all implementation code
30
+ - All 6 JSON schemas updated, validation error discriminants renamed
31
+ - Zero backward compatibility shims — clean break
32
+
33
+ See [changelogs/0.37.0.md](./changelogs/0.37.0.md) for full details.
34
+
35
+ ---
36
+
37
+ ## [0.36.0] - 2026-02-18
38
+
39
+ **Tier-based source sort order, display name rendering, and code standards enforcement**
40
+
41
+ - Sources step sorts by fixed tiers: local → scoped marketplace → default public → third-party
42
+ - Skills render full display names in Sources step (matching Build step)
43
+ - Clean code standards enforced across ~30 files (comments, typedKeys, getErrorMessage, test helpers)
44
+
45
+ See [changelogs/0.36.0.md](./changelogs/0.36.0.md) for full details.
46
+
47
+ ---
48
+
12
49
  ## [0.35.0] - 2026-02-18
13
50
 
14
51
  **Selective uninstall, expert mode persistence, metadata.yaml requirement, and test infrastructure overhaul**
@@ -103,7 +103,7 @@ categories:
103
103
  displayName: Error Handling
104
104
  description: Error boundaries, result types, and error patterns
105
105
  domain: web-extras
106
- parent_domain: web
106
+ parentDomain: web
107
107
  exclusive: false
108
108
  required: false
109
109
  order: 11
@@ -122,7 +122,7 @@ categories:
122
122
  displayName: File Upload
123
123
  description: File upload patterns and handling
124
124
  domain: web-extras
125
- parent_domain: web
125
+ parentDomain: web
126
126
  exclusive: false
127
127
  required: false
128
128
  order: 13
@@ -132,7 +132,7 @@ categories:
132
132
  displayName: Files & Images
133
133
  description: Image handling and file processing
134
134
  domain: web-extras
135
- parent_domain: web
135
+ parentDomain: web
136
136
  exclusive: false
137
137
  required: false
138
138
  order: 14
@@ -142,7 +142,7 @@ categories:
142
142
  displayName: Utilities
143
143
  description: Utility libraries (date-fns, native JS patterns)
144
144
  domain: web-extras
145
- parent_domain: web
145
+ parentDomain: web
146
146
  exclusive: false
147
147
  required: false
148
148
  order: 15
@@ -152,7 +152,7 @@ categories:
152
152
  displayName: Realtime
153
153
  description: WebSockets, SSE, and real-time communication
154
154
  domain: web-extras
155
- parent_domain: web
155
+ parentDomain: web
156
156
  exclusive: true
157
157
  required: false
158
158
  order: 16
@@ -162,7 +162,7 @@ categories:
162
162
  displayName: Animation
163
163
  description: Animation libraries and CSS animations
164
164
  domain: web-extras
165
- parent_domain: web
165
+ parentDomain: web
166
166
  exclusive: false
167
167
  required: false
168
168
  order: 17
@@ -172,7 +172,7 @@ categories:
172
172
  displayName: Progressive Web App
173
173
  description: Service workers, offline-first patterns, and PWA features
174
174
  domain: web-extras
175
- parent_domain: web
175
+ parentDomain: web
176
176
  exclusive: false
177
177
  required: false
178
178
  order: 18
@@ -182,7 +182,7 @@ categories:
182
182
  displayName: Accessibility
183
183
  description: WCAG compliance, ARIA, and keyboard navigation
184
184
  domain: web-extras
185
- parent_domain: web
185
+ parentDomain: web
186
186
  exclusive: false
187
187
  required: false
188
188
  order: 19
@@ -597,12 +597,12 @@ relationships:
597
597
  # React-specific libraries (note: these libraries have vanilla/other-framework options, but our skills teach React patterns)
598
598
  - skill: zustand
599
599
  needs: [react, react-native]
600
- needs_any: true
600
+ needsAny: true
601
601
  reason: "Our Zustand skill covers React/React Native patterns (zustand/vanilla exists for other frameworks)"
602
602
 
603
603
  - skill: redux-toolkit
604
604
  needs: [react, react-native]
605
- needs_any: true
605
+ needsAny: true
606
606
  reason: "Our Redux Toolkit skill covers React/React Native patterns (RTK core is framework-agnostic)"
607
607
 
608
608
  - skill: mobx
@@ -611,17 +611,17 @@ relationships:
611
611
 
612
612
  - skill: react-query
613
613
  needs: [react, react-native]
614
- needs_any: true
614
+ needsAny: true
615
615
  reason: "TanStack Query's React adapter. Note: TanStack Query also supports Vue, Solid, Svelte via separate adapters."
616
616
 
617
617
  - skill: swr
618
618
  needs: [react, react-native]
619
- needs_any: true
619
+ needsAny: true
620
620
  reason: "SWR is a React Hooks library. For React Native, requires @nandorojo/swr-react-native wrapper."
621
621
 
622
622
  - skill: react-hook-form
623
623
  needs: [react, react-native]
624
- needs_any: true
624
+ needsAny: true
625
625
  reason: "React Hook Form is React only"
626
626
 
627
627
  - skill: react-testing-library
@@ -659,7 +659,7 @@ relationships:
659
659
  # Backend dependencies
660
660
  - skill: better-auth
661
661
  needs: [drizzle, prisma]
662
- needs_any: true
662
+ needsAny: true
663
663
  reason: "Better Auth supports multiple database adapters (Drizzle, Prisma, Kysely, MongoDB). Our skill uses Drizzle adapter."
664
664
 
665
665
  # NOTE: Removed drizzle/prisma requires API framework - ORMs work standalone for scripts, CLI tools, workers, etc.
@@ -672,12 +672,12 @@ relationships:
672
672
  # GraphQL clients need a framework
673
673
  - skill: graphql-apollo
674
674
  needs: [react, vue, angular]
675
- needs_any: true
675
+ needsAny: true
676
676
  reason: "Apollo Client - first-party React support, community-maintained Vue/Angular integrations. Note: Svelte/Solid bindings exist but are stale (2020-2022)."
677
677
 
678
678
  - skill: graphql-urql
679
679
  needs: [react, vue, solidjs]
680
- needs_any: true
680
+ needsAny: true
681
681
  reason: "URQL has first-party support for React, Vue, and Solid (no Angular support). Svelte support exists but skill not yet created."
682
682
 
683
683
  # ─────────────────────────────────────────────────────────────────
@@ -759,7 +759,7 @@ relationships:
759
759
  # - Lowercase
760
760
  # =============================================================================
761
761
 
762
- skill_aliases:
762
+ skillAliases:
763
763
  # ─────────────────────────────────────────────────────────────────
764
764
  # Frameworks - normalized skill IDs
765
765
  # ─────────────────────────────────────────────────────────────────
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  CLI_COLORS
4
- } from "./chunk-YCS7GF6Y.js";
4
+ } from "./chunk-ZBJQXDQN.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -28,4 +28,4 @@ var ViewTitle = ({ children }) => {
28
28
  export {
29
29
  ViewTitle
30
30
  };
31
- //# sourceMappingURL=chunk-HTTPKSL6.js.map
31
+ //# sourceMappingURL=chunk-2XX4TMCI.js.map
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-MZB3GGOH.js";
5
5
  import {
6
6
  CLI_COLORS
7
- } from "./chunk-YCS7GF6Y.js";
7
+ } from "./chunk-ZBJQXDQN.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-DHET7RCE.js";
@@ -20,6 +20,7 @@ var StepConfirm = ({
20
20
  domainSelections,
21
21
  technologyCount,
22
22
  skillCount,
23
+ agentCount,
23
24
  installMode,
24
25
  onBack
25
26
  }) => {
@@ -62,6 +63,11 @@ var StepConfirm = ({
62
63
  " ",
63
64
  /* @__PURE__ */ jsx(Text, { color: CLI_COLORS.SUCCESS, children: "(all verified)" })
64
65
  ] }),
66
+ agentCount !== void 0 && /* @__PURE__ */ jsxs(Text, { children: [
67
+ /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Agents:" }),
68
+ " ",
69
+ /* @__PURE__ */ jsx(Text, { bold: true, children: agentCount })
70
+ ] }),
65
71
  installMode && /* @__PURE__ */ jsxs(Text, { children: [
66
72
  /* @__PURE__ */ jsx(Text, { dimColor: true, children: "Install mode:" }),
67
73
  " ",
@@ -75,4 +81,4 @@ var StepConfirm = ({
75
81
  export {
76
82
  StepConfirm
77
83
  };
78
- //# sourceMappingURL=chunk-CEWNZQMH.js.map
84
+ //# sourceMappingURL=chunk-3E2V5YL3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/step-confirm.tsx"],"sourcesContent":["import React from \"react\";\nimport { Box, Text, useInput } from \"ink\";\nimport type { DomainSelections, Domain } from \"../../types/index.js\";\nimport { CLI_COLORS } from \"../../consts.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\n\ntype StepConfirmProps = {\n onComplete: () => void;\n stackName?: string;\n selectedDomains?: Domain[];\n domainSelections?: DomainSelections;\n technologyCount?: number;\n skillCount?: number;\n agentCount?: number;\n installMode?: \"plugin\" | \"local\";\n onBack?: () => void;\n};\n\nexport const StepConfirm: React.FC<StepConfirmProps> = ({\n onComplete,\n stackName,\n selectedDomains,\n domainSelections,\n technologyCount,\n skillCount,\n agentCount,\n installMode,\n onBack,\n}) => {\n useInput((_input, key) => {\n if (key.return) {\n onComplete();\n }\n if (key.escape && onBack) {\n onBack();\n }\n });\n\n const domainsText = selectedDomains?.map(getDomainDisplayName).join(\" + \") || \"\";\n const title = stackName\n ? `Ready to install ${stackName}`\n : `Ready to install your custom stack${domainsText ? ` (${domainsText})` : \"\"}`;\n\n return (\n <Box flexDirection=\"column\" paddingX={2}>\n <Text bold color={CLI_COLORS.SUCCESS}>\n {title}\n </Text>\n <Text> </Text>\n\n {domainSelections && selectedDomains && !stackName && (\n <Box flexDirection=\"column\" marginBottom={1}>\n {selectedDomains.map((domain) => {\n const selections = domainSelections[domain] || {};\n const techs = Object.values(selections).flat();\n if (techs.length === 0) return null;\n return (\n <Text key={domain}>\n <Text bold>{getDomainDisplayName(domain)}:</Text> <Text>{techs.join(\", \")}</Text>\n </Text>\n );\n })}\n </Box>\n )}\n\n <Box flexDirection=\"column\" marginY={1}>\n {technologyCount !== undefined && (\n <Text>\n <Text dimColor>Technologies:</Text> <Text bold>{technologyCount}</Text>\n </Text>\n )}\n {skillCount !== undefined && (\n <Text>\n <Text dimColor>Skills:</Text> <Text bold>{skillCount}</Text>{\" \"}\n <Text color={CLI_COLORS.SUCCESS}>(all verified)</Text>\n </Text>\n )}\n {agentCount !== undefined && (\n <Text>\n <Text dimColor>Agents:</Text> <Text bold>{agentCount}</Text>\n </Text>\n )}\n {installMode && (\n <Text>\n <Text dimColor>Install mode:</Text>{\" \"}\n <Text bold>{installMode === \"plugin\" ? \"Plugin\" : \"Local\"}</Text>\n </Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>ENTER install ESC go back</Text>\n </Box>\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA;AACA,SAAS,KAAK,MAAM,gBAAgB;AA4C9B,cAaU,YAbV;AA3BC,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;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,UAAU,QAAQ;AACxB,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,QAAM,cAAc,iBAAiB,IAAI,oBAAoB,EAAE,KAAK,KAAK,KAAK;AAC9E,QAAM,QAAQ,YACV,oBAAoB,SAAS,KAC7B,qCAAqC,cAAc,KAAK,WAAW,MAAM,EAAE;AAE/E,SACE,qBAAC,OAAI,eAAc,UAAS,UAAU,GACpC;AAAA,wBAAC,QAAK,MAAI,MAAC,OAAO,WAAW,SAC1B,iBACH;AAAA,IACA,oBAAC,QAAK,eAAC;AAAA,IAEN,oBAAoB,mBAAmB,CAAC,aACvC,oBAAC,OAAI,eAAc,UAAS,cAAc,GACvC,0BAAgB,IAAI,CAAC,WAAW;AAC/B,YAAM,aAAa,iBAAiB,MAAM,KAAK,CAAC;AAChD,YAAM,QAAQ,OAAO,OAAO,UAAU,EAAE,KAAK;AAC7C,UAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,aACE,qBAAC,QACC;AAAA,6BAAC,QAAK,MAAI,MAAE;AAAA,+BAAqB,MAAM;AAAA,UAAE;AAAA,WAAC;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAM,gBAAM,KAAK,IAAI,GAAE;AAAA,WADjE,MAEX;AAAA,IAEJ,CAAC,GACH;AAAA,IAGF,qBAAC,OAAI,eAAc,UAAS,SAAS,GAClC;AAAA,0BAAoB,UACnB,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,2BAAa;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAK,MAAI,MAAE,2BAAgB;AAAA,SAClE;AAAA,MAED,eAAe,UACd,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,qBAAO;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAK,MAAI,MAAE,sBAAW;AAAA,QAAQ;AAAA,QAC7D,oBAAC,QAAK,OAAO,WAAW,SAAS,4BAAc;AAAA,SACjD;AAAA,MAED,eAAe,UACd,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,qBAAO;AAAA,QAAO;AAAA,QAAC,oBAAC,QAAK,MAAI,MAAE,sBAAW;AAAA,SACvD;AAAA,MAED,eACC,qBAAC,QACC;AAAA,4BAAC,QAAK,UAAQ,MAAC,2BAAa;AAAA,QAAQ;AAAA,QACpC,oBAAC,QAAK,MAAI,MAAE,0BAAgB,WAAW,WAAW,SAAQ;AAAA,SAC5D;AAAA,OAEJ;AAAA,IAEA,oBAAC,OAAI,WAAW,GACd,8BAAC,QAAK,UAAQ,MAAC,uCAAyB,GAC1C;AAAA,KACF;AAEJ;","names":[]}
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-KUV24B5M.js";
5
5
  import {
6
6
  CLI_COLORS
7
- } from "./chunk-YCS7GF6Y.js";
7
+ } from "./chunk-ZBJQXDQN.js";
8
8
  import {
9
9
  init_esm_shims
10
10
  } from "./chunk-DHET7RCE.js";
@@ -92,4 +92,4 @@ var SearchModal = ({ results, alias, onBind, onClose }) => {
92
92
  export {
93
93
  SearchModal
94
94
  };
95
- //# sourceMappingURL=chunk-IG7CUREJ.js.map
95
+ //# sourceMappingURL=chunk-3NQJOJZL.js.map
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ CheckboxGrid
4
+ } from "./chunk-IWNPFIGY.js";
5
+ import {
6
+ useWizardStore
7
+ } from "./chunk-HRMQ2RGY.js";
8
+ import {
9
+ init_esm_shims
10
+ } from "./chunk-DHET7RCE.js";
11
+
12
+ // src/cli/components/wizard/domain-selection.tsx
13
+ init_esm_shims();
14
+ import { jsx } from "react/jsx-runtime";
15
+ var AVAILABLE_DOMAINS = [
16
+ { id: "web", label: "Web", description: "Frontend web applications" },
17
+ {
18
+ id: "web-extras",
19
+ label: "Web Extras",
20
+ description: "Animation, files, realtime, PWA, accessibility"
21
+ },
22
+ { id: "api", label: "API", description: "Backend APIs and services" },
23
+ { id: "cli", label: "CLI", description: "Command-line tools" },
24
+ { id: "mobile", label: "Mobile", description: "Mobile applications" }
25
+ ];
26
+ var DomainSelection = () => {
27
+ const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();
28
+ const handleBack = () => {
29
+ setApproach(null);
30
+ selectStack(null);
31
+ };
32
+ return /* @__PURE__ */ jsx(
33
+ CheckboxGrid,
34
+ {
35
+ title: "Select domains to configure:",
36
+ subtitle: "Select one or more domains, then continue",
37
+ items: AVAILABLE_DOMAINS,
38
+ selectedIds: selectedDomains,
39
+ onToggle: toggleDomain,
40
+ onContinue: () => setStep("build"),
41
+ onBack: handleBack,
42
+ continueLabel: (count) => `Continue with ${count} domain(s)`,
43
+ emptyMessage: "Please select at least one domain"
44
+ }
45
+ );
46
+ };
47
+
48
+ export {
49
+ DomainSelection
50
+ };
51
+ //# sourceMappingURL=chunk-54ZZCWN4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/domain-selection.tsx"],"sourcesContent":["import React from \"react\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { Domain } from \"../../types/index.js\";\nimport { CheckboxGrid, type CheckboxItem } from \"./checkbox-grid.js\";\n\nconst AVAILABLE_DOMAINS: CheckboxItem<Domain>[] = [\n { id: \"web\", label: \"Web\", description: \"Frontend web applications\" },\n {\n id: \"web-extras\",\n label: \"Web Extras\",\n description: \"Animation, files, realtime, PWA, accessibility\",\n },\n { id: \"api\", label: \"API\", description: \"Backend APIs and services\" },\n { id: \"cli\", label: \"CLI\", description: \"Command-line tools\" },\n { id: \"mobile\", label: \"Mobile\", description: \"Mobile applications\" },\n];\n\nexport const DomainSelection: React.FC = () => {\n const { selectedDomains, toggleDomain, setStep, setApproach, selectStack } = useWizardStore();\n\n const handleBack = () => {\n setApproach(null);\n selectStack(null);\n };\n\n return (\n <CheckboxGrid\n title=\"Select domains to configure:\"\n subtitle=\"Select one or more domains, then continue\"\n items={AVAILABLE_DOMAINS}\n selectedIds={selectedDomains}\n onToggle={toggleDomain}\n onContinue={() => setStep(\"build\")}\n onBack={handleBack}\n continueLabel={(count) => `Continue with ${count} domain(s)`}\n emptyMessage=\"Please select at least one domain\"\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA;AA0BI;AArBJ,IAAM,oBAA4C;AAAA,EAChD,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,4BAA4B;AAAA,EACpE;AAAA,IACE,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,4BAA4B;AAAA,EACpE,EAAE,IAAI,OAAO,OAAO,OAAO,aAAa,qBAAqB;AAAA,EAC7D,EAAE,IAAI,UAAU,OAAO,UAAU,aAAa,sBAAsB;AACtE;AAEO,IAAM,kBAA4B,MAAM;AAC7C,QAAM,EAAE,iBAAiB,cAAc,SAAS,aAAa,YAAY,IAAI,eAAe;AAE5F,QAAM,aAAa,MAAM;AACvB,gBAAY,IAAI;AAChB,gBAAY,IAAI;AAAA,EAClB;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,UAAS;AAAA,MACT,OAAO;AAAA,MACP,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY,MAAM,QAAQ,OAAO;AAAA,MACjC,QAAQ;AAAA,MACR,eAAe,CAAC,UAAU,iBAAiB,KAAK;AAAA,MAChD,cAAa;AAAA;AAAA,EACf;AAEJ;","names":[]}
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  CLI_COLORS,
4
4
  DEFAULT_BRANDING
5
- } from "./chunk-YCS7GF6Y.js";
5
+ } from "./chunk-ZBJQXDQN.js";
6
6
  import {
7
7
  init_esm_shims
8
8
  } from "./chunk-DHET7RCE.js";
@@ -108,4 +108,4 @@ var StepRefine = ({
108
108
  export {
109
109
  StepRefine
110
110
  };
111
- //# sourceMappingURL=chunk-VEZ2GZEK.js.map
111
+ //# sourceMappingURL=chunk-ATLRUR3B.js.map
@@ -1,41 +1,44 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  StepStack
4
- } from "./chunk-5LPPIT6H.js";
4
+ } from "./chunk-NFV4SKH5.js";
5
5
  import {
6
6
  WizardLayout
7
- } from "./chunk-PKUIO2Z7.js";
7
+ } from "./chunk-TBDIR6LY.js";
8
8
  import {
9
9
  StepConfirm
10
- } from "./chunk-CEWNZQMH.js";
10
+ } from "./chunk-3E2V5YL3.js";
11
11
  import {
12
12
  StepSettings
13
- } from "./chunk-BPD4VUAU.js";
13
+ } from "./chunk-M6PGIZNS.js";
14
14
  import {
15
15
  StepSources
16
- } from "./chunk-CXWPUVA7.js";
16
+ } from "./chunk-DUQFF45G.js";
17
+ import {
18
+ StepAgents
19
+ } from "./chunk-EXFVAEPY.js";
17
20
  import {
18
21
  StepBuild
19
- } from "./chunk-UFUQUFV6.js";
22
+ } from "./chunk-NI2RSNWB.js";
20
23
  import {
21
24
  getStackName
22
25
  } from "./chunk-MZB3GGOH.js";
23
26
  import {
24
27
  cliTheme
25
- } from "./chunk-5YNZJ5TP.js";
28
+ } from "./chunk-VAHVSQIG.js";
26
29
  import {
27
30
  useWizardStore
28
- } from "./chunk-OGXSTJP2.js";
31
+ } from "./chunk-HRMQ2RGY.js";
29
32
  import {
30
33
  resolveAlias,
31
34
  validateSelection
32
- } from "./chunk-WMVGRAFB.js";
35
+ } from "./chunk-U5OB5ADP.js";
33
36
  import {
34
37
  warn
35
- } from "./chunk-OI4WBRC7.js";
38
+ } from "./chunk-YJIJTBSX.js";
36
39
  import {
37
40
  CLI_COLORS
38
- } from "./chunk-YCS7GF6Y.js";
41
+ } from "./chunk-ZBJQXDQN.js";
39
42
  import {
40
43
  init_esm_shims
41
44
  } from "./chunk-DHET7RCE.js";
@@ -112,12 +115,12 @@ function useBuildStepProps({
112
115
  selectedDomains: effectiveDomains,
113
116
  selections: store.domainSelections[activeDomain] || {},
114
117
  allSelections,
115
- showDescriptions: store.showDescriptions,
118
+ showLabels: store.showLabels,
116
119
  expertMode: store.expertMode,
117
120
  parentDomainSelections,
118
121
  installedSkillIds,
119
122
  onToggle,
120
- onToggleDescriptions: store.toggleShowDescriptions,
123
+ onToggleLabels: store.toggleShowLabels,
121
124
  onContinue,
122
125
  onBack
123
126
  };
@@ -173,7 +176,7 @@ var Wizard = ({
173
176
  return;
174
177
  }
175
178
  if (key.escape) {
176
- if (store.step !== "build" && store.step !== "confirm" && store.step !== "sources" && store.step !== "stack") {
179
+ if (store.step !== "build" && store.step !== "confirm" && store.step !== "sources" && store.step !== "agents" && store.step !== "stack") {
177
180
  store.goBack();
178
181
  }
179
182
  return;
@@ -224,6 +227,7 @@ var Wizard = ({
224
227
  const validation = validateSelection(allSkills, matrix);
225
228
  const result = {
226
229
  selectedSkills: allSkills,
230
+ selectedAgents: store.selectedAgents,
227
231
  selectedStackId: store.selectedStackId,
228
232
  domainSelections: store.domainSelections,
229
233
  sourceSelections: store.sourceSelections,
@@ -260,11 +264,16 @@ var Wizard = ({
260
264
  {
261
265
  matrix,
262
266
  projectDir,
263
- onContinue: () => store.setStep("confirm"),
267
+ onContinue: () => {
268
+ store.preselectAgentsFromSkills();
269
+ store.setStep("agents");
270
+ },
264
271
  onBack: store.goBack
265
272
  }
266
273
  );
267
274
  }
275
+ case "agents":
276
+ return /* @__PURE__ */ jsx(StepAgents, {});
268
277
  case "confirm": {
269
278
  const stackName = getStackName(store.selectedStackId, matrix);
270
279
  const technologyCount = store.getTechnologyCount();
@@ -277,6 +286,7 @@ var Wizard = ({
277
286
  domainSelections: store.domainSelections,
278
287
  technologyCount,
279
288
  skillCount: technologyCount,
289
+ agentCount: store.selectedAgents.length,
280
290
  installMode: store.installMode,
281
291
  onBack: store.goBack
282
292
  }
@@ -300,4 +310,4 @@ var Wizard = ({
300
310
  export {
301
311
  Wizard
302
312
  };
303
- //# sourceMappingURL=chunk-KWF6D7ZP.js.map
313
+ //# sourceMappingURL=chunk-CYFU3ARY.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 { 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 { StepAgents } from \"./step-agents.js\";\nimport { resolveAlias, validateSelection } from \"../../lib/matrix/index.js\";\nimport type {\n AgentName,\n DomainSelections,\n MergedSkillsMatrix,\n SkillId,\n} 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 selectedAgents: AgentName[];\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 logo?: string;\n initialStep?: WizardStep;\n initialInstallMode?: \"plugin\" | \"local\";\n initialExpertMode?: boolean;\n installedSkillIds?: SkillId[];\n projectDir?: string;\n};\n\nconst MIN_TERMINAL_WIDTH = 80;\nconst MIN_TERMINAL_HEIGHT = 15;\n\nexport const Wizard: React.FC<WizardProps> = ({\n matrix,\n onComplete,\n onCancel,\n version,\n marketplaceLabel,\n logo,\n initialStep,\n initialInstallMode,\n initialExpertMode,\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 terminalHeight = stdout.rows || MIN_TERMINAL_HEIGHT;\n const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;\n const isShortTerminal = terminalHeight < MIN_TERMINAL_HEIGHT;\n\n useWizardInitialization({\n matrix,\n initialStep,\n initialInstallMode,\n initialExpertMode,\n installedSkillIds,\n });\n\n const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });\n\n useInput((input, key) => {\n // ESC is handled by step-settings.tsx's own useKeyboardNavigation hook\n if (store.showSettings) {\n if (input === \"g\" || input === \"G\") {\n store.toggleSettings();\n }\n return;\n }\n\n if (store.showHelp) {\n if (key.escape || input === \"?\") {\n store.toggleHelp();\n }\n return;\n }\n\n if (input === \"?\") {\n store.toggleHelp();\n return;\n }\n\n if (key.escape) {\n // At the initial stack/scratch selection (approach not yet set), ESC cancels the wizard.\n // StackSelection handles its own ESC via the onCancel prop.\n // Other steps that don't have their own escape handler use goBack.\n if (\n store.step !== \"build\" &&\n store.step !== \"confirm\" &&\n store.step !== \"sources\" &&\n store.step !== \"agents\" &&\n store.step !== \"stack\"\n ) {\n store.goBack();\n }\n return;\n }\n\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 selectedAgents: store.selectedAgents,\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 handleCancel = useCallback(() => {\n onCancel();\n exit();\n }, [onCancel, exit]);\n\n const renderStep = () => {\n switch (store.step) {\n case \"stack\":\n return <StepStack matrix={matrix} onCancel={handleCancel} />;\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={() => {\n store.preselectAgentsFromSkills();\n store.setStep(\"agents\");\n }}\n onBack={store.goBack}\n />\n );\n }\n\n case \"agents\":\n return <StepAgents />;\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 agentCount={store.selectedAgents.length}\n installMode={store.installMode}\n onBack={store.goBack}\n />\n );\n }\n\n default:\n return null;\n }\n };\n\n if (isNarrowTerminal || isShortTerminal) {\n const issue = isNarrowTerminal\n ? `too narrow (${terminalWidth} columns, need ${MIN_TERMINAL_WIDTH})`\n : `too short (${terminalHeight} rows, need ${MIN_TERMINAL_HEIGHT})`;\n\n return (\n <ThemeProvider theme={cliTheme}>\n <Box flexDirection=\"column\" padding={1}>\n <Text color={CLI_COLORS.WARNING}>Terminal {issue}. Please resize your terminal.</Text>\n </Box>\n </ThemeProvider>\n );\n }\n\n return (\n <ThemeProvider theme={cliTheme}>\n <WizardLayout version={version} marketplaceLabel={marketplaceLabel} logo={logo}>\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 initialExpertMode?: boolean;\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 initialExpertMode,\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 if (initialExpertMode) {\n useWizardStore.setState({ expertMode: initialExpertMode });\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 showLabels: store.showLabels,\n expertMode: store.expertMode,\n parentDomainSelections,\n installedSkillIds,\n onToggle,\n onToggleLabels: store.toggleShowLabels,\n onContinue,\n onBack,\n };\n}\n"],"mappings":"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","names":["useCallback","useCallback"]}
@@ -1,24 +1,24 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  SourceGrid
4
- } from "./chunk-U36YCEBK.js";
4
+ } from "./chunk-EISBUEBL.js";
5
5
  import {
6
6
  useMeasuredHeight
7
- } from "./chunk-AQQVSNUX.js";
7
+ } from "./chunk-K77I4XGL.js";
8
8
  import {
9
9
  ViewTitle
10
- } from "./chunk-HTTPKSL6.js";
10
+ } from "./chunk-2XX4TMCI.js";
11
11
  import {
12
12
  useWizardStore
13
- } from "./chunk-OGXSTJP2.js";
13
+ } from "./chunk-HRMQ2RGY.js";
14
14
  import {
15
15
  resolveAllSources,
16
16
  searchExtraSources
17
- } from "./chunk-WMVGRAFB.js";
17
+ } from "./chunk-U5OB5ADP.js";
18
18
  import {
19
19
  CLI_COLORS,
20
20
  DEFAULT_BRANDING
21
- } from "./chunk-YCS7GF6Y.js";
21
+ } from "./chunk-ZBJQXDQN.js";
22
22
  import {
23
23
  init_esm_shims
24
24
  } from "./chunk-DHET7RCE.js";
@@ -191,4 +191,4 @@ var StepSources = ({
191
191
  export {
192
192
  StepSources
193
193
  };
194
- //# sourceMappingURL=chunk-CXWPUVA7.js.map
194
+ //# sourceMappingURL=chunk-DUQFF45G.js.map
@@ -2,17 +2,16 @@
2
2
  import {
3
3
  useModalState
4
4
  } from "./chunk-7SOPVGDV.js";
5
- import {
6
- useFocusedListItem
7
- } from "./chunk-DC5AK3LW.js";
8
5
  import {
9
6
  SearchModal
10
- } from "./chunk-IG7CUREJ.js";
7
+ } from "./chunk-3NQJOJZL.js";
8
+ import {
9
+ useFocusedListItem
10
+ } from "./chunk-GG4BSB6S.js";
11
11
  import {
12
12
  CLI_COLORS,
13
- SCROLL_VIEWPORT,
14
- UI_SYMBOLS
15
- } from "./chunk-YCS7GF6Y.js";
13
+ SCROLL_VIEWPORT
14
+ } from "./chunk-ZBJQXDQN.js";
16
15
  import {
17
16
  init_esm_shims
18
17
  } from "./chunk-DHET7RCE.js";
@@ -88,18 +87,28 @@ var SourceTag = ({
88
87
  option,
89
88
  isFocused
90
89
  }) => {
91
- const borderColor = option.selected ? CLI_COLORS.PRIMARY : isFocused ? CLI_COLORS.UNFOCUSED : CLI_COLORS.NEUTRAL;
92
- const textColor = option.selected ? CLI_COLORS.PRIMARY : void 0;
90
+ const getBorderColor = () => {
91
+ if (isFocused) {
92
+ return option.selected ? CLI_COLORS.PRIMARY : CLI_COLORS.UNFOCUSED;
93
+ }
94
+ return CLI_COLORS.NEUTRAL;
95
+ };
96
+ const textColor = option.selected ? CLI_COLORS.PRIMARY : CLI_COLORS.NEUTRAL;
93
97
  const isBold = isFocused || option.selected;
94
- const symbol = option.selected ? UI_SYMBOLS.SELECTED : UI_SYMBOLS.UNSELECTED;
95
- return /* @__PURE__ */ jsx(Box, { marginRight: 1, borderColor, borderStyle: "single", children: /* @__PURE__ */ jsxs(Text, { color: textColor, bold: isBold, children: [
96
- " ",
97
- /* @__PURE__ */ jsx(Text, { dimColor: !option.selected, children: symbol }),
98
- " ",
99
- option.label,
100
- option.selected && /* @__PURE__ */ jsx(Text, { dimColor: true, children: " (active)" }),
101
- " "
102
- ] }) });
98
+ return /* @__PURE__ */ jsx(
99
+ Box,
100
+ {
101
+ marginRight: 1,
102
+ borderColor: getBorderColor(),
103
+ borderStyle: "single",
104
+ borderDimColor: !isFocused,
105
+ children: /* @__PURE__ */ jsxs(Text, { color: textColor, bold: isBold, dimColor: false, children: [
106
+ " ",
107
+ option.label,
108
+ " "
109
+ ] })
110
+ }
111
+ );
103
112
  };
104
113
  var SourceSection = ({
105
114
  row,
@@ -257,13 +266,13 @@ var SourceGrid = ({
257
266
  }
258
267
  );
259
268
  if (!scrollEnabled) {
260
- return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: [
261
- sectionElements,
269
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", flexGrow: 1, children: [
270
+ /* @__PURE__ */ jsx(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", children: sectionElements }),
262
271
  searchModalElement
263
272
  ] });
264
273
  }
265
- return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", height: availableHeight, overflow: "hidden", children: [
266
- /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: scrollTopPx > 0 ? -scrollTopPx : 0, flexShrink: 0, children: sectionElements }),
274
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", height: availableHeight, children: [
275
+ /* @__PURE__ */ jsx(Box, { flexDirection: "column", overflow: "hidden", flexGrow: 1, children: /* @__PURE__ */ jsx(Box, { flexDirection: "column", marginTop: scrollTopPx > 0 ? -scrollTopPx : 0, flexShrink: 0, children: sectionElements }) }),
267
276
  searchModalElement
268
277
  ] });
269
278
  };
@@ -271,4 +280,4 @@ var SourceGrid = ({
271
280
  export {
272
281
  SourceGrid
273
282
  };
274
- //# sourceMappingURL=chunk-U36YCEBK.js.map
283
+ //# sourceMappingURL=chunk-EISBUEBL.js.map