@agents-inc/cli 0.34.1 → 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 (196) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/config/skills-matrix.yaml +26 -26
  3. package/config/stacks.yaml +8 -8
  4. package/dist/{chunk-HTTPKSL6.js → chunk-2XX4TMCI.js} +2 -2
  5. package/dist/{chunk-CEWNZQMH.js → chunk-3E2V5YL3.js} +8 -2
  6. package/dist/chunk-3E2V5YL3.js.map +1 -0
  7. package/dist/{chunk-QC37C32G.js → chunk-3NQJOJZL.js} +3 -3
  8. package/dist/chunk-54ZZCWN4.js +51 -0
  9. package/dist/chunk-54ZZCWN4.js.map +1 -0
  10. package/dist/{chunk-VEZ2GZEK.js → chunk-ATLRUR3B.js} +2 -2
  11. package/dist/{chunk-ZI5EBHCC.js → chunk-CYFU3ARY.js} +38 -17
  12. package/dist/chunk-CYFU3ARY.js.map +1 -0
  13. package/dist/{chunk-X7SPCWY6.js → chunk-DUQFF45G.js} +14 -9
  14. package/dist/chunk-DUQFF45G.js.map +1 -0
  15. package/dist/{chunk-CB7GYRUP.js → chunk-EISBUEBL.js} +101 -52
  16. package/dist/chunk-EISBUEBL.js.map +1 -0
  17. package/dist/chunk-EXFVAEPY.js +80 -0
  18. package/dist/chunk-EXFVAEPY.js.map +1 -0
  19. package/dist/{chunk-ANGAZ444.js → chunk-FWQK3HWB.js} +4 -4
  20. package/dist/chunk-FWQK3HWB.js.map +1 -0
  21. package/dist/{chunk-DC5AK3LW.js → chunk-GG4BSB6S.js} +5 -11
  22. package/dist/chunk-GG4BSB6S.js.map +1 -0
  23. package/dist/{chunk-GGHH3KR2.js → chunk-HKDE4LJW.js} +2 -2
  24. package/dist/{chunk-R3AD6XBJ.js → chunk-HRMQ2RGY.js} +81 -26
  25. package/dist/chunk-HRMQ2RGY.js.map +1 -0
  26. package/dist/{chunk-YPJKOM42.js → chunk-HRW7BIDE.js} +2 -2
  27. package/dist/{chunk-LFHZBF6N.js → chunk-IVIK776Y.js} +4 -3
  28. package/dist/chunk-IVIK776Y.js.map +1 -0
  29. package/dist/{chunk-ALS7SH7X.js → chunk-IWNPFIGY.js} +38 -48
  30. package/dist/chunk-IWNPFIGY.js.map +1 -0
  31. package/dist/{chunk-GIFEDW27.js → chunk-IZRVFC2Z.js} +7 -7
  32. package/dist/chunk-IZRVFC2Z.js.map +1 -0
  33. package/dist/chunk-K77I4XGL.js +47 -0
  34. package/dist/chunk-K77I4XGL.js.map +1 -0
  35. package/dist/{chunk-JMVWYAHT.js → chunk-KUV24B5M.js} +4 -4
  36. package/dist/chunk-KUV24B5M.js.map +1 -0
  37. package/dist/{chunk-KENWMEKN.js → chunk-M6PGIZNS.js} +6 -6
  38. package/dist/{chunk-B47QYIUL.js → chunk-NFV4SKH5.js} +4 -4
  39. package/dist/chunk-NI2RSNWB.js +156 -0
  40. package/dist/chunk-NI2RSNWB.js.map +1 -0
  41. package/dist/{chunk-ZP4BI6J2.js → chunk-OEX5JDQD.js} +7 -7
  42. package/dist/chunk-OEX5JDQD.js.map +1 -0
  43. package/dist/{chunk-OKILA27U.js → chunk-TA6IIQI4.js} +86 -99
  44. package/dist/chunk-TA6IIQI4.js.map +1 -0
  45. package/dist/{chunk-JZOLJVWA.js → chunk-TBDIR6LY.js} +12 -11
  46. package/dist/chunk-TBDIR6LY.js.map +1 -0
  47. package/dist/{chunk-XYCN2GCV.js → chunk-TNFACSWF.js} +3 -3
  48. package/dist/{chunk-ZE355C6C.js → chunk-TY5GELDB.js} +9 -4
  49. package/dist/chunk-TY5GELDB.js.map +1 -0
  50. package/dist/{chunk-TM4I4EHK.js → chunk-U5OB5ADP.js} +2829 -2793
  51. package/dist/chunk-U5OB5ADP.js.map +1 -0
  52. package/dist/{chunk-JXMRTHDT.js → chunk-UOMMQ5M6.js} +2 -2
  53. package/dist/{chunk-A5CYQQVG.js → chunk-UV6JUGIY.js} +2 -2
  54. package/dist/{chunk-5YNZJ5TP.js → chunk-VAHVSQIG.js} +2 -2
  55. package/dist/{chunk-TKB4O2RY.js → chunk-VAK5PX72.js} +5 -5
  56. package/dist/chunk-WSGGJKD5.js +113 -0
  57. package/dist/chunk-WSGGJKD5.js.map +1 -0
  58. package/dist/{chunk-GVMA2EKC.js → chunk-YHQNTBBN.js} +2 -2
  59. package/dist/{chunk-NLR6Z37M.js → chunk-YJIJTBSX.js} +81 -97
  60. package/dist/chunk-YJIJTBSX.js.map +1 -0
  61. package/dist/{chunk-YCS7GF6Y.js → chunk-ZBJQXDQN.js} +3 -1
  62. package/dist/{chunk-YCS7GF6Y.js.map → chunk-ZBJQXDQN.js.map} +1 -1
  63. package/dist/cli/defaults/agent-mappings.yaml +4 -4
  64. package/dist/commands/build/marketplace.js +3 -3
  65. package/dist/commands/build/plugins.js +5 -5
  66. package/dist/commands/build/stack.js +5 -5
  67. package/dist/commands/compile.js +25 -19
  68. package/dist/commands/compile.js.map +1 -1
  69. package/dist/commands/config/get.js +8 -8
  70. package/dist/commands/config/get.js.map +1 -1
  71. package/dist/commands/config/index.js +5 -5
  72. package/dist/commands/config/path.js +4 -4
  73. package/dist/commands/config/set-project.js +7 -7
  74. package/dist/commands/config/set-project.js.map +1 -1
  75. package/dist/commands/config/show.js +5 -5
  76. package/dist/commands/config/unset-project.js +5 -5
  77. package/dist/commands/config/unset-project.js.map +1 -1
  78. package/dist/commands/diff.js +8 -8
  79. package/dist/commands/diff.js.map +1 -1
  80. package/dist/commands/doctor.js +4 -4
  81. package/dist/commands/edit.js +37 -28
  82. package/dist/commands/edit.js.map +1 -1
  83. package/dist/commands/eject.js +6 -6
  84. package/dist/commands/eject.js.map +1 -1
  85. package/dist/commands/import/skill.js +16 -16
  86. package/dist/commands/import/skill.js.map +1 -1
  87. package/dist/commands/info.js +5 -5
  88. package/dist/commands/init.js +31 -26
  89. package/dist/commands/init.js.map +1 -1
  90. package/dist/commands/list.js +4 -4
  91. package/dist/commands/new/agent.js +5 -5
  92. package/dist/commands/new/skill.js +8 -8
  93. package/dist/commands/new/skill.js.map +1 -1
  94. package/dist/commands/outdated.js +4 -4
  95. package/dist/commands/search.js +7 -7
  96. package/dist/commands/uninstall.js +181 -97
  97. package/dist/commands/uninstall.js.map +1 -1
  98. package/dist/commands/update.js +6 -6
  99. package/dist/commands/validate.js +5 -5
  100. package/dist/commands/version/bump.js +4 -4
  101. package/dist/commands/version/index.js +4 -4
  102. package/dist/commands/version/set.js +4 -4
  103. package/dist/commands/version/show.js +4 -4
  104. package/dist/components/skill-search/skill-search.js +3 -3
  105. package/dist/components/wizard/category-grid.js +3 -3
  106. package/dist/components/wizard/category-grid.test.js +42 -21
  107. package/dist/components/wizard/category-grid.test.js.map +1 -1
  108. package/dist/components/wizard/checkbox-grid.js +10 -0
  109. package/dist/components/wizard/checkbox-grid.test.js +260 -0
  110. package/dist/components/wizard/checkbox-grid.test.js.map +1 -0
  111. package/dist/components/wizard/domain-selection.js +7 -5
  112. package/dist/components/wizard/help-modal.js +2 -2
  113. package/dist/components/wizard/menu-item.js +2 -2
  114. package/dist/components/wizard/search-modal.js +3 -3
  115. package/dist/components/wizard/search-modal.test.js +3 -3
  116. package/dist/components/wizard/section-progress.js +2 -2
  117. package/dist/components/wizard/section-progress.test.js +2 -2
  118. package/dist/components/wizard/source-grid.js +5 -5
  119. package/dist/components/wizard/source-grid.test.js +5 -5
  120. package/dist/components/wizard/stack-selection.js +8 -7
  121. package/dist/components/wizard/step-agents.js +16 -0
  122. package/dist/components/wizard/step-agents.js.map +1 -0
  123. package/dist/components/wizard/step-agents.test.js +185 -0
  124. package/dist/components/wizard/step-agents.test.js.map +1 -0
  125. package/dist/components/wizard/step-build.js +9 -7
  126. package/dist/components/wizard/step-build.test.js +25 -22
  127. package/dist/components/wizard/step-build.test.js.map +1 -1
  128. package/dist/components/wizard/step-confirm.js +2 -2
  129. package/dist/components/wizard/step-confirm.test.js +6 -5
  130. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  131. package/dist/components/wizard/step-refine.js +2 -2
  132. package/dist/components/wizard/step-refine.test.js +2 -2
  133. package/dist/components/wizard/step-settings.js +6 -6
  134. package/dist/components/wizard/step-settings.test.js +9 -9
  135. package/dist/components/wizard/step-sources.js +12 -10
  136. package/dist/components/wizard/step-sources.test.js +14 -12
  137. package/dist/components/wizard/step-sources.test.js.map +1 -1
  138. package/dist/components/wizard/step-stack.js +11 -9
  139. package/dist/components/wizard/step-stack.test.js +12 -10
  140. package/dist/components/wizard/step-stack.test.js.map +1 -1
  141. package/dist/components/wizard/view-title.js +2 -2
  142. package/dist/components/wizard/wizard-layout.js +8 -7
  143. package/dist/components/wizard/wizard-tabs.js +2 -2
  144. package/dist/components/wizard/wizard-tabs.test.js +6 -4
  145. package/dist/components/wizard/wizard-tabs.test.js.map +1 -1
  146. package/dist/components/wizard/wizard.js +27 -23
  147. package/dist/config/skills-matrix.yaml +26 -26
  148. package/dist/config/stacks.yaml +8 -8
  149. package/dist/hooks/init.js +5 -3
  150. package/dist/hooks/init.js.map +1 -1
  151. package/dist/{source-manager-WJYANKDI.js → source-manager-FEGVYDFZ.js} +4 -4
  152. package/dist/source-manager-FEGVYDFZ.js.map +1 -0
  153. package/dist/stores/wizard-store.js +5 -4
  154. package/dist/stores/wizard-store.test.js +287 -15
  155. package/dist/stores/wizard-store.test.js.map +1 -1
  156. package/package.json +1 -1
  157. package/src/schemas/agent.schema.json +3 -3
  158. package/src/schemas/metadata.schema.json +14 -14
  159. package/src/schemas/project-config.schema.json +46 -2
  160. package/src/schemas/project-source-config.schema.json +17 -5
  161. package/src/schemas/skills-matrix.schema.json +4 -4
  162. package/src/schemas/stack.schema.json +1 -1
  163. package/src/schemas/stacks.schema.json +42 -1
  164. package/dist/chunk-2LUXM5FB.js +0 -277
  165. package/dist/chunk-2LUXM5FB.js.map +0 -1
  166. package/dist/chunk-ALS7SH7X.js.map +0 -1
  167. package/dist/chunk-ANGAZ444.js.map +0 -1
  168. package/dist/chunk-CB7GYRUP.js.map +0 -1
  169. package/dist/chunk-CEWNZQMH.js.map +0 -1
  170. package/dist/chunk-DC5AK3LW.js.map +0 -1
  171. package/dist/chunk-GIFEDW27.js.map +0 -1
  172. package/dist/chunk-JMVWYAHT.js.map +0 -1
  173. package/dist/chunk-JZOLJVWA.js.map +0 -1
  174. package/dist/chunk-LFHZBF6N.js.map +0 -1
  175. package/dist/chunk-NLR6Z37M.js.map +0 -1
  176. package/dist/chunk-OKILA27U.js.map +0 -1
  177. package/dist/chunk-R3AD6XBJ.js.map +0 -1
  178. package/dist/chunk-TM4I4EHK.js.map +0 -1
  179. package/dist/chunk-X7SPCWY6.js.map +0 -1
  180. package/dist/chunk-ZE355C6C.js.map +0 -1
  181. package/dist/chunk-ZI5EBHCC.js.map +0 -1
  182. package/dist/chunk-ZP4BI6J2.js.map +0 -1
  183. /package/dist/{chunk-HTTPKSL6.js.map → chunk-2XX4TMCI.js.map} +0 -0
  184. /package/dist/{chunk-QC37C32G.js.map → chunk-3NQJOJZL.js.map} +0 -0
  185. /package/dist/{chunk-VEZ2GZEK.js.map → chunk-ATLRUR3B.js.map} +0 -0
  186. /package/dist/{chunk-GGHH3KR2.js.map → chunk-HKDE4LJW.js.map} +0 -0
  187. /package/dist/{chunk-YPJKOM42.js.map → chunk-HRW7BIDE.js.map} +0 -0
  188. /package/dist/{chunk-KENWMEKN.js.map → chunk-M6PGIZNS.js.map} +0 -0
  189. /package/dist/{chunk-B47QYIUL.js.map → chunk-NFV4SKH5.js.map} +0 -0
  190. /package/dist/{chunk-XYCN2GCV.js.map → chunk-TNFACSWF.js.map} +0 -0
  191. /package/dist/{chunk-JXMRTHDT.js.map → chunk-UOMMQ5M6.js.map} +0 -0
  192. /package/dist/{chunk-A5CYQQVG.js.map → chunk-UV6JUGIY.js.map} +0 -0
  193. /package/dist/{chunk-5YNZJ5TP.js.map → chunk-VAHVSQIG.js.map} +0 -0
  194. /package/dist/{chunk-TKB4O2RY.js.map → chunk-VAK5PX72.js.map} +0 -0
  195. /package/dist/{chunk-GVMA2EKC.js.map → chunk-YHQNTBBN.js.map} +0 -0
  196. /package/dist/{source-manager-WJYANKDI.js.map → components/wizard/checkbox-grid.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -9,6 +9,51 @@ 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
+
49
+ ## [0.35.0] - 2026-02-18
50
+
51
+ **Selective uninstall, expert mode persistence, metadata.yaml requirement, and test infrastructure overhaul**
52
+
53
+ See [changelogs/0.35.0.md](./changelogs/0.35.0.md) for full details.
54
+
55
+ ---
56
+
12
57
  ## [0.34.1] - 2026-02-17
13
58
 
14
59
  **Code formatting**
@@ -38,9 +38,9 @@ categories:
38
38
  styling:
39
39
  id: styling
40
40
  displayName: Styling
41
- description: CSS approach (SCSS Modules, Tailwind)
41
+ description: CSS approach (SCSS Modules, Tailwind, CVA)
42
42
  domain: web
43
- exclusive: true
43
+ exclusive: false
44
44
  required: true
45
45
  order: 3
46
46
 
@@ -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
@@ -437,10 +437,6 @@ relationships:
437
437
  # DISCOURAGES (Soft warnings - selecting A shows warning for B but doesn't disable)
438
438
  # ─────────────────────────────────────────────────────────────────
439
439
  discourages:
440
- # Styling paradigm mixing is unusual but technically compatible
441
- - skills: [scss-modules, tailwind]
442
- reason: "Mixing CSS paradigms causes slower builds (Tailwind runs per-module) and inconsistent patterns - pick one approach for new projects. Valid for gradual migrations."
443
-
444
440
  # React state libraries - can coexist but adds complexity
445
441
  - skills: [zustand, redux-toolkit, mobx]
446
442
  reason: "Using multiple React state libraries adds complexity - choose one primary approach. Migration patterns exist for gradual transitions."
@@ -513,8 +509,12 @@ relationships:
513
509
  reason: "Radix primitives work well with any CSS approach"
514
510
 
515
511
  - when: tailwind
516
- suggest: [shadcn-ui]
517
- reason: "shadcn/ui is built for Tailwind"
512
+ suggest: [shadcn-ui, cva]
513
+ reason: "shadcn/ui is built for Tailwind; CVA provides type-safe variant management for Tailwind classes"
514
+
515
+ - when: cva
516
+ suggest: [tailwind]
517
+ reason: "CVA is designed for type-safe variant management of Tailwind utility classes"
518
518
 
519
519
  # UI component recommendations
520
520
  - when: shadcn-ui
@@ -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
  # ─────────────────────────────────────────────────────────────────
@@ -691,7 +691,7 @@ relationships:
691
691
  skills: [nextjs-app-router, remix]
692
692
 
693
693
  - purpose: "Styling"
694
- skills: [scss-modules, tailwind]
694
+ skills: [scss-modules, tailwind, cva]
695
695
 
696
696
  - purpose: "Client State (React)"
697
697
  skills: [zustand, redux-toolkit, mobx, jotai]
@@ -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
  # ─────────────────────────────────────────────────────────────────
@@ -4,7 +4,7 @@
4
4
  stacks:
5
5
  - id: nextjs-fullstack
6
6
  name: Next.js Fullstack
7
- description: Production-ready Next.js with complete backend infrastructure
7
+ description: React + Hono full-stack
8
8
  agents:
9
9
  web-developer:
10
10
  framework:
@@ -402,7 +402,7 @@ stacks:
402
402
 
403
403
  - id: angular-stack
404
404
  name: Modern Angular Stack
405
- description: Angular 19 with Signals and NgRx SignalStore
405
+ description: Angular + Signals stack
406
406
  agents:
407
407
  web-developer:
408
408
  framework:
@@ -694,7 +694,7 @@ stacks:
694
694
 
695
695
  - id: nuxt-stack
696
696
  name: Nuxt Full-Stack
697
- description: Vue 3 with Nuxt for full-stack Vue development
697
+ description: Vue + Nuxt full-stack
698
698
  agents:
699
699
  web-developer:
700
700
  framework:
@@ -997,7 +997,7 @@ stacks:
997
997
 
998
998
  - id: remix-stack
999
999
  name: Remix Full-Stack
1000
- description: Remix for form-heavy applications with excellent DX
1000
+ description: Remix + form-centric DX
1001
1001
  agents:
1002
1002
  web-developer:
1003
1003
  framework:
@@ -1291,7 +1291,7 @@ stacks:
1291
1291
 
1292
1292
  - id: vue-stack
1293
1293
  name: Modern Vue Stack
1294
- description: Vue 3 with Composition API, Pinia, and Tailwind
1294
+ description: Vue + Pinia + Tailwind
1295
1295
  agents:
1296
1296
  web-developer:
1297
1297
  framework:
@@ -1583,7 +1583,7 @@ stacks:
1583
1583
 
1584
1584
  - id: solidjs-stack
1585
1585
  name: SolidJS Stack
1586
- description: High-performance SolidJS with Tailwind and Hono backend
1586
+ description: SolidJS + Hono full-stack
1587
1587
  agents:
1588
1588
  web-developer:
1589
1589
  framework:
@@ -1866,7 +1866,7 @@ stacks:
1866
1866
 
1867
1867
  - id: react-native-stack
1868
1868
  name: React Native Stack
1869
- description: Cross-platform mobile with React Native and Expo
1869
+ description: React Native + Expo mobile
1870
1870
  agents:
1871
1871
  web-developer:
1872
1872
  framework:
@@ -2096,7 +2096,7 @@ stacks:
2096
2096
 
2097
2097
  - id: meta-stack
2098
2098
  name: Meta Agent Stack
2099
- description: Agents for creating agents, skills, documentation, and extracting patterns - invoke for meta-level development work
2099
+ description: Meta-level agent tooling
2100
2100
  agents:
2101
2101
  skill-summoner:
2102
2102
  methodology:
@@ -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":[]}
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  useKeyboardNavigation
4
- } from "./chunk-JMVWYAHT.js";
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-QC37C32G.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-B47QYIUL.js";
4
+ } from "./chunk-NFV4SKH5.js";
5
5
  import {
6
6
  WizardLayout
7
- } from "./chunk-JZOLJVWA.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-KENWMEKN.js";
13
+ } from "./chunk-M6PGIZNS.js";
14
14
  import {
15
15
  StepSources
16
- } from "./chunk-X7SPCWY6.js";
16
+ } from "./chunk-DUQFF45G.js";
17
+ import {
18
+ StepAgents
19
+ } from "./chunk-EXFVAEPY.js";
17
20
  import {
18
21
  StepBuild
19
- } from "./chunk-2LUXM5FB.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-R3AD6XBJ.js";
31
+ } from "./chunk-HRMQ2RGY.js";
29
32
  import {
30
33
  resolveAlias,
31
34
  validateSelection
32
- } from "./chunk-TM4I4EHK.js";
35
+ } from "./chunk-U5OB5ADP.js";
33
36
  import {
34
37
  warn
35
- } from "./chunk-NLR6Z37M.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";
@@ -53,6 +56,7 @@ function useWizardInitialization({
53
56
  matrix,
54
57
  initialStep,
55
58
  initialInstallMode,
59
+ initialExpertMode,
56
60
  installedSkillIds
57
61
  }) {
58
62
  const initialized = useRef(false);
@@ -67,6 +71,9 @@ function useWizardInitialization({
67
71
  if (initialInstallMode) {
68
72
  useWizardStore.setState({ installMode: initialInstallMode });
69
73
  }
74
+ if (initialExpertMode) {
75
+ useWizardStore.setState({ expertMode: initialExpertMode });
76
+ }
70
77
  }
71
78
  }
72
79
 
@@ -108,12 +115,12 @@ function useBuildStepProps({
108
115
  selectedDomains: effectiveDomains,
109
116
  selections: store.domainSelections[activeDomain] || {},
110
117
  allSelections,
111
- showDescriptions: store.showDescriptions,
118
+ showLabels: store.showLabels,
112
119
  expertMode: store.expertMode,
113
120
  parentDomainSelections,
114
121
  installedSkillIds,
115
122
  onToggle,
116
- onToggleDescriptions: store.toggleShowDescriptions,
123
+ onToggleLabels: store.toggleShowLabels,
117
124
  onContinue,
118
125
  onBack
119
126
  };
@@ -132,6 +139,7 @@ var Wizard = ({
132
139
  logo,
133
140
  initialStep,
134
141
  initialInstallMode,
142
+ initialExpertMode,
135
143
  installedSkillIds,
136
144
  projectDir
137
145
  }) => {
@@ -142,7 +150,13 @@ var Wizard = ({
142
150
  const terminalHeight = stdout.rows || MIN_TERMINAL_HEIGHT;
143
151
  const isNarrowTerminal = terminalWidth < MIN_TERMINAL_WIDTH;
144
152
  const isShortTerminal = terminalHeight < MIN_TERMINAL_HEIGHT;
145
- useWizardInitialization({ matrix, initialStep, initialInstallMode, installedSkillIds });
153
+ useWizardInitialization({
154
+ matrix,
155
+ initialStep,
156
+ initialInstallMode,
157
+ initialExpertMode,
158
+ installedSkillIds
159
+ });
146
160
  const buildStepProps = useBuildStepProps({ store, matrix, installedSkillIds });
147
161
  useInput((input, key) => {
148
162
  if (store.showSettings) {
@@ -162,7 +176,7 @@ var Wizard = ({
162
176
  return;
163
177
  }
164
178
  if (key.escape) {
165
- 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") {
166
180
  store.goBack();
167
181
  }
168
182
  return;
@@ -213,6 +227,7 @@ var Wizard = ({
213
227
  const validation = validateSelection(allSkills, matrix);
214
228
  const result = {
215
229
  selectedSkills: allSkills,
230
+ selectedAgents: store.selectedAgents,
216
231
  selectedStackId: store.selectedStackId,
217
232
  domainSelections: store.domainSelections,
218
233
  sourceSelections: store.sourceSelections,
@@ -249,11 +264,16 @@ var Wizard = ({
249
264
  {
250
265
  matrix,
251
266
  projectDir,
252
- onContinue: () => store.setStep("confirm"),
267
+ onContinue: () => {
268
+ store.preselectAgentsFromSkills();
269
+ store.setStep("agents");
270
+ },
253
271
  onBack: store.goBack
254
272
  }
255
273
  );
256
274
  }
275
+ case "agents":
276
+ return /* @__PURE__ */ jsx(StepAgents, {});
257
277
  case "confirm": {
258
278
  const stackName = getStackName(store.selectedStackId, matrix);
259
279
  const technologyCount = store.getTechnologyCount();
@@ -266,6 +286,7 @@ var Wizard = ({
266
286
  domainSelections: store.domainSelections,
267
287
  technologyCount,
268
288
  skillCount: technologyCount,
289
+ agentCount: store.selectedAgents.length,
269
290
  installMode: store.installMode,
270
291
  onBack: store.goBack
271
292
  }
@@ -289,4 +310,4 @@ var Wizard = ({
289
310
  export {
290
311
  Wizard
291
312
  };
292
- //# sourceMappingURL=chunk-ZI5EBHCC.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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA,SAAgB,eAAAA,oBAAmB;AACnC,SAAS,KAAK,MAAM,QAAQ,UAAU,iBAAiB;AACvD,SAAS,qBAAqB;;;ACF9B;AAAA,SAAS,cAAc;AAgBhB,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyC;AACvC,QAAM,cAAc,OAAO,KAAK;AAEhC,MAAI,CAAC,YAAY,SAAS;AACxB,gBAAY,UAAU;AAEtB,QAAI,aAAa;AACf,UAAI,mBAAmB,QAAQ;AAC7B,uBACG,SAAS,EACT,qBAAqB,mBAAmB,OAAO,QAAQ,OAAO,UAAU;AAAA,MAC7E;AACA,qBAAe,SAAS,EAAE,MAAM,aAAa,UAAU,UAAU,CAAC;AAAA,IACpE;AACA,QAAI,oBAAoB;AACtB,qBAAe,SAAS,EAAE,aAAa,mBAAmB,CAAC;AAAA,IAC7D;AACA,QAAI,mBAAmB;AACrB,qBAAe,SAAS,EAAE,YAAY,kBAAkB,CAAC;AAAA,IAC3D;AAAA,EACF;AACF;;;AC3CA;AAAA,SAAS,mBAAmB;AAWrB,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAA6C;AAC3C,QAAM,gBAAgB,MAAM,iBAAiB;AAC7C,QAAM,iBAA2B,CAAC,KAAK;AACvC,QAAM,mBACJ,MAAM,gBAAgB,SAAS,IAAI,MAAM,kBAAkB;AAE7D,QAAM,gBAAgB,MAAM,2BAA2B;AAEvD,QAAM,eAAuB,iBAAiB,iBAAiB,CAAC,KAAK;AACrE,QAAM,yBAAyB,MAAM,0BAA0B,cAAc,MAAM;AAEnF,QAAM,WAAW;AAAA,IACf,CAAC,eAA0D,WAAoB;AAC7E,YAAM,SAAiB,MAAM,iBAAiB,KAAK;AACnD,YAAM,MAAM,OAAO,WAAW,aAAa;AAC3C,YAAM,iBAAiB,QAAQ,eAAe,QAAQ,KAAK,aAAa,IAAI;AAAA,IAC9E;AAAA,IACA,CAAC,OAAO,MAAM;AAAA,EAChB;AAEA,QAAM,aAAa,YAAY,MAAM;AACnC,QAAI,CAAC,MAAM,WAAW,GAAG;AACvB,YAAM,QAAQ,SAAS;AAAA,IACzB;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,QAAM,SAAS,YAAY,MAAM;AAC/B,QAAI,CAAC,MAAM,WAAW,GAAG;AACvB,YAAM,OAAO;AAAA,IACf;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AAAA,IACL;AAAA,IACA,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,YAAY,MAAM,iBAAiB,YAAY,KAAK,CAAC;AAAA,IACrD;AAAA,IACA,YAAY,MAAM;AAAA,IAClB,YAAY,MAAM;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB,MAAM;AAAA,IACtB;AAAA,IACA;AAAA,EACF;AACF;;;AF4Ie,cA6DL,YA7DK;AAnJf,IAAM,qBAAqB;AAC3B,IAAM,sBAAsB;AAErB,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,eAAe;AAC7B,QAAM,EAAE,KAAK,IAAI,OAAO;AACxB,QAAM,EAAE,OAAO,IAAI,UAAU;AAE7B,QAAM,gBAAgB,OAAO,WAAW;AACxC,QAAM,iBAAiB,OAAO,QAAQ;AACtC,QAAM,mBAAmB,gBAAgB;AACzC,QAAM,kBAAkB,iBAAiB;AAEzC,0BAAwB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,iBAAiB,kBAAkB,EAAE,OAAO,QAAQ,kBAAkB,CAAC;AAE7E,WAAS,CAAC,OAAO,QAAQ;AAEvB,QAAI,MAAM,cAAc;AACtB,UAAI,UAAU,OAAO,UAAU,KAAK;AAClC,cAAM,eAAe;AAAA,MACvB;AACA;AAAA,IACF;AAEA,QAAI,MAAM,UAAU;AAClB,UAAI,IAAI,UAAU,UAAU,KAAK;AAC/B,cAAM,WAAW;AAAA,MACnB;AACA;AAAA,IACF;AAEA,QAAI,UAAU,KAAK;AACjB,YAAM,WAAW;AACjB;AAAA,IACF;AAEA,QAAI,IAAI,QAAQ;AAId,UACE,MAAM,SAAS,WACf,MAAM,SAAS,aACf,MAAM,SAAS,aACf,MAAM,SAAS,YACf,MAAM,SAAS,SACf;AACA,cAAM,OAAO;AAAA,MACf;AACA;AAAA,IACF;AAEA,SAAK,UAAU,OAAO,UAAU,QAAQ,MAAM,SAAS,WAAW,MAAM,iBAAiB;AACvF,YAAM,eAAe,UAAU;AAC/B,YAAM,QAAQ,SAAS;AACvB;AAAA,IACF;AAEA,SAAK,UAAU,OAAO,UAAU,QAAQ,MAAM,SAAS,WAAW;AAChE,YAAM,eAAe;AACrB;AAAA,IACF;AAEA,QAAI,UAAU,OAAO,UAAU,KAAK;AAClC,YAAM,iBAAiB;AACvB;AAAA,IACF;AACA,QAAI,UAAU,OAAO,UAAU,KAAK;AAClC,YAAM,kBAAkB;AAAA,IAC1B;AAAA,EACF,CAAC;AAED,QAAM,iBAAiBC,aAAY,MAAM;AACvC,QAAI;AAEJ,QAAI,MAAM,mBAAmB,MAAM,gBAAgB,YAAY;AAC7D,YAAM,QAAQ,OAAO,gBAAgB,KAAK,CAAC,MAAM,EAAE,OAAO,MAAM,eAAe;AAC/E,UAAI,CAAC,OAAO;AACV,aAAK,+BAA+B,MAAM,eAAe,GAAG;AAAA,MAC9D;AACA,kBAAY,CAAC,GAAI,OAAO,eAAe,CAAC,CAAE;AAAA,IAC5C,OAAO;AACL,YAAM,YAAY,MAAM,2BAA2B;AACnD,kBAAY,UAAU,IAAI,CAAC,SAAS;AAClC,cAAM,WAAW,aAAa,MAAM,MAAM;AAC1C,YAAI,CAAC,OAAO,OAAO,QAAQ,GAAG;AAC5B;AAAA,YACE,eAAe,IAAI;AAAA,UACrB;AAAA,QACF;AACA,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,UAAM,oBAAoB,MAAM,4BAA4B;AAC5D,eAAW,SAAS,mBAAmB;AACrC,UAAI,CAAC,UAAU,SAAS,KAAK,GAAG;AAC9B,kBAAU,KAAK,KAAK;AAAA,MACtB;AAAA,IACF;AAEA,UAAM,aAAa,kBAAkB,WAAW,MAAM;AAEtD,UAAM,SAAyB;AAAA,MAC7B,gBAAgB;AAAA,MAChB,gBAAgB,MAAM;AAAA,MACtB,iBAAiB,MAAM;AAAA,MACvB,kBAAkB,MAAM;AAAA,MACxB,kBAAkB,MAAM;AAAA,MACxB,YAAY,MAAM;AAAA,MAClB,aAAa,MAAM;AAAA,MACnB,WAAW;AAAA,MACX;AAAA,IACF;AAEA,eAAW,MAAM;AACjB,SAAK;AAAA,EACP,GAAG,CAAC,OAAO,QAAQ,YAAY,IAAI,CAAC;AAEpC,QAAM,eAAeA,aAAY,MAAM;AACrC,aAAS;AACT,SAAK;AAAA,EACP,GAAG,CAAC,UAAU,IAAI,CAAC;AAEnB,QAAM,aAAa,MAAM;AACvB,YAAQ,MAAM,MAAM;AAAA,MAClB,KAAK;AACH,eAAO,oBAAC,aAAU,QAAgB,UAAU,cAAc;AAAA,MAE5D,KAAK;AACH,eAAO,oBAAC,aAAW,GAAG,gBAAgB;AAAA,MAExC,KAAK,WAAW;AACd,YAAI,MAAM,cAAc;AACtB,iBACE;AAAA,YAAC;AAAA;AAAA,cACC,YAAY,cAAc,QAAQ,IAAI;AAAA,cACtC,SAAS,MAAM,MAAM,eAAe;AAAA;AAAA,UACtC;AAAA,QAEJ;AACA,eACE;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA,YAAY,MAAM;AAChB,oBAAM,0BAA0B;AAChC,oBAAM,QAAQ,QAAQ;AAAA,YACxB;AAAA,YACA,QAAQ,MAAM;AAAA;AAAA,QAChB;AAAA,MAEJ;AAAA,MAEA,KAAK;AACH,eAAO,oBAAC,cAAW;AAAA,MAErB,KAAK,WAAW;AACd,cAAM,YAAY,aAAa,MAAM,iBAAiB,MAAM;AAC5D,cAAM,kBAAkB,MAAM,mBAAmB;AACjD,eACE;AAAA,UAAC;AAAA;AAAA,YACC,YAAY;AAAA,YACZ;AAAA,YACA,iBAAiB,MAAM;AAAA,YACvB,kBAAkB,MAAM;AAAA,YACxB;AAAA,YACA,YAAY;AAAA,YACZ,YAAY,MAAM,eAAe;AAAA,YACjC,aAAa,MAAM;AAAA,YACnB,QAAQ,MAAM;AAAA;AAAA,QAChB;AAAA,MAEJ;AAAA,MAEA;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,MAAI,oBAAoB,iBAAiB;AACvC,UAAM,QAAQ,mBACV,eAAe,aAAa,kBAAkB,kBAAkB,MAChE,cAAc,cAAc,eAAe,mBAAmB;AAElE,WACE,oBAAC,iBAAc,OAAO,UACpB,8BAAC,OAAI,eAAc,UAAS,SAAS,GACnC,+BAAC,QAAK,OAAO,WAAW,SAAS;AAAA;AAAA,MAAU;AAAA,MAAM;AAAA,OAA8B,GACjF,GACF;AAAA,EAEJ;AAEA,SACE,oBAAC,iBAAc,OAAO,UACpB,8BAAC,gBAAa,SAAkB,kBAAoC,MACjE,qBAAW,GACd,GACF;AAEJ;","names":["useCallback","useCallback"]}