@agents-inc/cli 0.50.0 → 0.61.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 (237) hide show
  1. package/CHANGELOG.md +167 -5
  2. package/dist/{chunk-KQOU4POU.js → chunk-46DQG2N7.js} +72 -51
  3. package/dist/chunk-46DQG2N7.js.map +1 -0
  4. package/dist/{chunk-2BWCR762.js → chunk-52XO4ULK.js} +6 -8
  5. package/dist/chunk-52XO4ULK.js.map +1 -0
  6. package/dist/{chunk-DCE423KO.js → chunk-6DAZG54T.js} +5 -5
  7. package/dist/{chunk-AWP5A6IM.js → chunk-6OWHQ7HM.js} +14 -12
  8. package/dist/chunk-6OWHQ7HM.js.map +1 -0
  9. package/dist/{chunk-D72AFYQR.js → chunk-7FMEMXJ4.js} +71 -71
  10. package/dist/chunk-7FMEMXJ4.js.map +1 -0
  11. package/dist/{chunk-RA2IPRO2.js → chunk-AJJJE7F7.js} +2 -2
  12. package/dist/{chunk-4R52TQ3K.js → chunk-AX3SZZWA.js} +2 -2
  13. package/dist/{chunk-U2W5SENM.js → chunk-BFD5NZQ4.js} +5 -4
  14. package/dist/chunk-BFD5NZQ4.js.map +1 -0
  15. package/dist/{chunk-HYEUETIC.js → chunk-BKJHAJQW.js} +2 -2
  16. package/dist/{chunk-HYEUETIC.js.map → chunk-BKJHAJQW.js.map} +1 -1
  17. package/dist/{chunk-GBOW6FUW.js → chunk-BNQ5O6LE.js} +2 -2
  18. package/dist/{chunk-KAO3LKB5.js → chunk-C577AJE7.js} +3 -3
  19. package/dist/{chunk-C3Q43WLC.js → chunk-CIG7IKX3.js} +4 -4
  20. package/dist/chunk-EC3UJRKZ.js +1534 -0
  21. package/dist/chunk-EC3UJRKZ.js.map +1 -0
  22. package/dist/{chunk-HMSHB5EQ.js → chunk-FWMWWE3X.js} +3543 -3037
  23. package/dist/chunk-FWMWWE3X.js.map +1 -0
  24. package/dist/{chunk-YDYRAXSY.js → chunk-GH2RQ4MI.js} +6 -6
  25. package/dist/{chunk-5FPIKTSA.js → chunk-H5DASUX5.js} +7 -7
  26. package/dist/{chunk-JFF7P4LC.js → chunk-H7WJK7NJ.js} +22 -6
  27. package/dist/chunk-H7WJK7NJ.js.map +1 -0
  28. package/dist/chunk-HGTC76BX.js +16 -0
  29. package/dist/chunk-HGTC76BX.js.map +1 -0
  30. package/dist/{chunk-WFFV254H.js → chunk-IEEVXLJB.js} +110 -82
  31. package/dist/chunk-IEEVXLJB.js.map +1 -0
  32. package/dist/{chunk-5FCHJLM7.js → chunk-IGM6HA3S.js} +252 -38
  33. package/dist/chunk-IGM6HA3S.js.map +1 -0
  34. package/dist/{chunk-QB5HHTAA.js → chunk-KD2YS76O.js} +28 -12
  35. package/dist/chunk-KD2YS76O.js.map +1 -0
  36. package/dist/{chunk-5L724R4C.js → chunk-KDO6WU76.js} +8 -13
  37. package/dist/chunk-KDO6WU76.js.map +1 -0
  38. package/dist/{chunk-XDSVV5GZ.js → chunk-KIWFEBKH.js} +41 -11
  39. package/dist/chunk-KIWFEBKH.js.map +1 -0
  40. package/dist/{chunk-WBHPCBVN.js → chunk-LWXRUR6B.js} +66 -94
  41. package/dist/chunk-LWXRUR6B.js.map +1 -0
  42. package/dist/{chunk-SPFHPHYL.js → chunk-M6YWRMXH.js} +24 -14
  43. package/dist/chunk-M6YWRMXH.js.map +1 -0
  44. package/dist/{chunk-CMNKHDOX.js → chunk-MGNYPVOJ.js} +2 -2
  45. package/dist/{chunk-U7X4V4HE.js → chunk-MMFQNJPE.js} +2 -2
  46. package/dist/{chunk-WLZHCM7O.js → chunk-MR6OBL3B.js} +3 -11
  47. package/dist/{chunk-WLZHCM7O.js.map → chunk-MR6OBL3B.js.map} +1 -1
  48. package/dist/{chunk-RFKDGJAJ.js → chunk-O6BA7Q2B.js} +6 -6
  49. package/dist/chunk-O6BA7Q2B.js.map +1 -0
  50. package/dist/chunk-OCEFD7V6.js +201 -0
  51. package/dist/chunk-OCEFD7V6.js.map +1 -0
  52. package/dist/{chunk-YZTWZVGX.js → chunk-PUT7X3GA.js} +1 -1
  53. package/dist/chunk-PUT7X3GA.js.map +1 -0
  54. package/dist/{chunk-QYLCINGC.js → chunk-SDKCQXWE.js} +2 -2
  55. package/dist/{chunk-RDWGYKDY.js → chunk-SDLDPFNV.js} +6 -6
  56. package/dist/{chunk-7LV4V6A4.js → chunk-SRBN6RRD.js} +14 -10
  57. package/dist/chunk-SRBN6RRD.js.map +1 -0
  58. package/dist/{chunk-PGY5XROM.js → chunk-VR3CDXDT.js} +2 -6
  59. package/dist/chunk-VR3CDXDT.js.map +1 -0
  60. package/dist/{chunk-I6IOGZSZ.js → chunk-WHISPMAQ.js} +11 -15
  61. package/dist/chunk-WHISPMAQ.js.map +1 -0
  62. package/dist/{chunk-3VOL4WEG.js → chunk-WYVDNGJB.js} +3 -3
  63. package/dist/{chunk-WJHFV6RI.js → chunk-X5EG4EFP.js} +2 -2
  64. package/dist/{chunk-JWYRXE6C.js → chunk-XUDTFI4M.js} +2 -2
  65. package/dist/{chunk-4QWDB2MD.js → chunk-YHOHLNHM.js} +127 -105
  66. package/dist/chunk-YHOHLNHM.js.map +1 -0
  67. package/dist/{chunk-M3GQ2R3E.js → chunk-Z3TM4N37.js} +19 -7
  68. package/dist/chunk-Z3TM4N37.js.map +1 -0
  69. package/dist/commands/build/marketplace.js +4 -4
  70. package/dist/commands/build/plugins.js +9 -7
  71. package/dist/commands/build/plugins.js.map +1 -1
  72. package/dist/commands/build/stack.js +13 -10
  73. package/dist/commands/build/stack.js.map +1 -1
  74. package/dist/commands/compile.js +110 -129
  75. package/dist/commands/compile.js.map +1 -1
  76. package/dist/commands/config/index.js +7 -5
  77. package/dist/commands/config/index.js.map +1 -1
  78. package/dist/commands/config/path.js +8 -6
  79. package/dist/commands/config/path.js.map +1 -1
  80. package/dist/commands/config/show.js +7 -5
  81. package/dist/commands/diff.js +9 -7
  82. package/dist/commands/diff.js.map +1 -1
  83. package/dist/commands/doctor.js +20 -16
  84. package/dist/commands/doctor.js.map +1 -1
  85. package/dist/commands/edit.js +175 -79
  86. package/dist/commands/edit.js.map +1 -1
  87. package/dist/commands/eject.js +20 -41
  88. package/dist/commands/eject.js.map +1 -1
  89. package/dist/commands/import/skill.js +10 -18
  90. package/dist/commands/import/skill.js.map +1 -1
  91. package/dist/commands/info.js +21 -20
  92. package/dist/commands/info.js.map +1 -1
  93. package/dist/commands/init.js +32 -31
  94. package/dist/commands/list.js +8 -6
  95. package/dist/commands/list.js.map +1 -1
  96. package/dist/commands/new/agent.js +23 -11
  97. package/dist/commands/new/agent.js.map +1 -1
  98. package/dist/commands/new/marketplace.js +63 -46
  99. package/dist/commands/new/marketplace.js.map +1 -1
  100. package/dist/commands/new/skill.js +11 -9
  101. package/dist/commands/outdated.js +9 -7
  102. package/dist/commands/outdated.js.map +1 -1
  103. package/dist/commands/search.js +45 -35
  104. package/dist/commands/search.js.map +1 -1
  105. package/dist/commands/uninstall.js +93 -123
  106. package/dist/commands/uninstall.js.map +1 -1
  107. package/dist/commands/update.js +11 -9
  108. package/dist/commands/update.js.map +1 -1
  109. package/dist/commands/validate.js +23 -27
  110. package/dist/commands/validate.js.map +1 -1
  111. package/dist/components/common/confirm.test.js +4 -4
  112. package/dist/components/skill-search/skill-search.js +3 -3
  113. package/dist/components/wizard/category-grid.js +3 -3
  114. package/dist/components/wizard/category-grid.test.js +4 -4
  115. package/dist/components/wizard/category-grid.test.js.map +1 -1
  116. package/dist/components/wizard/checkbox-grid.js +5 -5
  117. package/dist/components/wizard/checkbox-grid.test.js +6 -6
  118. package/dist/components/wizard/domain-selection.js +12 -11
  119. package/dist/components/wizard/help-modal.js +2 -2
  120. package/dist/components/wizard/menu-item.js +1 -1
  121. package/dist/components/wizard/search-modal.js +2 -2
  122. package/dist/components/wizard/search-modal.test.js +3 -3
  123. package/dist/components/wizard/search-modal.test.js.map +1 -1
  124. package/dist/components/wizard/section-progress.js +2 -2
  125. package/dist/components/wizard/section-progress.test.js +4 -4
  126. package/dist/components/wizard/section-progress.test.js.map +1 -1
  127. package/dist/components/wizard/selection-card.js +2 -2
  128. package/dist/components/wizard/source-grid.js +4 -4
  129. package/dist/components/wizard/source-grid.test.js +5 -5
  130. package/dist/components/wizard/source-grid.test.js.map +1 -1
  131. package/dist/components/wizard/stack-selection.js +9 -8
  132. package/dist/components/wizard/step-agents.js +11 -10
  133. package/dist/components/wizard/step-agents.test.js +13 -12
  134. package/dist/components/wizard/step-agents.test.js.map +1 -1
  135. package/dist/components/wizard/step-build.js +11 -9
  136. package/dist/components/wizard/step-build.test.js +18 -22
  137. package/dist/components/wizard/step-build.test.js.map +1 -1
  138. package/dist/components/wizard/step-confirm.js +4 -4
  139. package/dist/components/wizard/step-confirm.test.js +83 -23
  140. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  141. package/dist/components/wizard/step-refine.js +2 -2
  142. package/dist/components/wizard/step-refine.test.js +3 -3
  143. package/dist/components/wizard/step-settings.js +9 -7
  144. package/dist/components/wizard/step-settings.test.js +13 -11
  145. package/dist/components/wizard/step-settings.test.js.map +1 -1
  146. package/dist/components/wizard/step-sources.js +13 -11
  147. package/dist/components/wizard/step-sources.test.js +19 -17
  148. package/dist/components/wizard/step-sources.test.js.map +1 -1
  149. package/dist/components/wizard/step-stack.js +15 -14
  150. package/dist/components/wizard/step-stack.test.js +17 -16
  151. package/dist/components/wizard/step-stack.test.js.map +1 -1
  152. package/dist/components/wizard/view-title.js +2 -2
  153. package/dist/components/wizard/wizard-layout.js +10 -8
  154. package/dist/components/wizard/wizard-tabs.js +2 -2
  155. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  156. package/dist/components/wizard/wizard.js +29 -27
  157. package/dist/config-exports.js +20 -0
  158. package/dist/config-exports.js.map +1 -0
  159. package/dist/hooks/init.js +34 -33
  160. package/dist/hooks/init.js.map +1 -1
  161. package/dist/loader-2O32KKAQ.js +19 -0
  162. package/dist/source-loader-KMEBBZCQ.js +16 -0
  163. package/dist/source-loader-KMEBBZCQ.js.map +1 -0
  164. package/dist/source-manager-5XBSPJNR.js +18 -0
  165. package/dist/source-manager-5XBSPJNR.js.map +1 -0
  166. package/dist/src/agents/meta/agent-summoner/workflow.md +3 -3
  167. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  168. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  169. package/dist/src/agents/meta/skill-summoner/intro.md +1 -1
  170. package/dist/src/agents/meta/skill-summoner/output-format.md +3 -3
  171. package/dist/src/agents/meta/skill-summoner/workflow.md +8 -8
  172. package/dist/stores/wizard-store.js +6 -5
  173. package/dist/stores/wizard-store.test.js +299 -59
  174. package/dist/stores/wizard-store.test.js.map +1 -1
  175. package/package.json +5 -1
  176. package/src/agents/meta/agent-summoner/workflow.md +3 -3
  177. package/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  178. package/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  179. package/src/agents/meta/skill-summoner/intro.md +1 -1
  180. package/src/agents/meta/skill-summoner/output-format.md +3 -3
  181. package/src/agents/meta/skill-summoner/workflow.md +8 -8
  182. package/src/schemas/metadata.schema.json +6 -0
  183. package/src/schemas/stacks.schema.json +1 -1
  184. package/config/skill-categories.yaml +0 -344
  185. package/config/skill-rules.yaml +0 -740
  186. package/config/stacks.yaml +0 -1864
  187. package/dist/chunk-26MXZUHU.js +0 -183
  188. package/dist/chunk-26MXZUHU.js.map +0 -1
  189. package/dist/chunk-2BWCR762.js.map +0 -1
  190. package/dist/chunk-4QWDB2MD.js.map +0 -1
  191. package/dist/chunk-5FCHJLM7.js.map +0 -1
  192. package/dist/chunk-5L724R4C.js.map +0 -1
  193. package/dist/chunk-7LV4V6A4.js.map +0 -1
  194. package/dist/chunk-AWP5A6IM.js.map +0 -1
  195. package/dist/chunk-D72AFYQR.js.map +0 -1
  196. package/dist/chunk-HMSHB5EQ.js.map +0 -1
  197. package/dist/chunk-I6IOGZSZ.js.map +0 -1
  198. package/dist/chunk-JFF7P4LC.js.map +0 -1
  199. package/dist/chunk-KQOU4POU.js.map +0 -1
  200. package/dist/chunk-M3GQ2R3E.js.map +0 -1
  201. package/dist/chunk-PGY5XROM.js.map +0 -1
  202. package/dist/chunk-QB5HHTAA.js.map +0 -1
  203. package/dist/chunk-RFKDGJAJ.js.map +0 -1
  204. package/dist/chunk-SPFHPHYL.js.map +0 -1
  205. package/dist/chunk-U2W5SENM.js.map +0 -1
  206. package/dist/chunk-UAD3SC27.js +0 -107
  207. package/dist/chunk-UAD3SC27.js.map +0 -1
  208. package/dist/chunk-WBHPCBVN.js.map +0 -1
  209. package/dist/chunk-WFFV254H.js.map +0 -1
  210. package/dist/chunk-XDSVV5GZ.js.map +0 -1
  211. package/dist/chunk-YZTWZVGX.js.map +0 -1
  212. package/dist/commands/config/get.js +0 -61
  213. package/dist/commands/config/get.js.map +0 -1
  214. package/dist/commands/config/set-project.js +0 -61
  215. package/dist/commands/config/set-project.js.map +0 -1
  216. package/dist/commands/config/unset-project.js +0 -57
  217. package/dist/commands/config/unset-project.js.map +0 -1
  218. package/dist/config/skill-categories.yaml +0 -344
  219. package/dist/config/skill-rules.yaml +0 -740
  220. package/dist/config/stacks.yaml +0 -1864
  221. package/dist/source-manager-BVB2SG73.js +0 -16
  222. /package/dist/{chunk-DCE423KO.js.map → chunk-6DAZG54T.js.map} +0 -0
  223. /package/dist/{chunk-RA2IPRO2.js.map → chunk-AJJJE7F7.js.map} +0 -0
  224. /package/dist/{chunk-4R52TQ3K.js.map → chunk-AX3SZZWA.js.map} +0 -0
  225. /package/dist/{chunk-GBOW6FUW.js.map → chunk-BNQ5O6LE.js.map} +0 -0
  226. /package/dist/{chunk-KAO3LKB5.js.map → chunk-C577AJE7.js.map} +0 -0
  227. /package/dist/{chunk-C3Q43WLC.js.map → chunk-CIG7IKX3.js.map} +0 -0
  228. /package/dist/{chunk-YDYRAXSY.js.map → chunk-GH2RQ4MI.js.map} +0 -0
  229. /package/dist/{chunk-5FPIKTSA.js.map → chunk-H5DASUX5.js.map} +0 -0
  230. /package/dist/{chunk-CMNKHDOX.js.map → chunk-MGNYPVOJ.js.map} +0 -0
  231. /package/dist/{chunk-U7X4V4HE.js.map → chunk-MMFQNJPE.js.map} +0 -0
  232. /package/dist/{chunk-QYLCINGC.js.map → chunk-SDKCQXWE.js.map} +0 -0
  233. /package/dist/{chunk-RDWGYKDY.js.map → chunk-SDLDPFNV.js.map} +0 -0
  234. /package/dist/{chunk-3VOL4WEG.js.map → chunk-WYVDNGJB.js.map} +0 -0
  235. /package/dist/{chunk-WJHFV6RI.js.map → chunk-X5EG4EFP.js.map} +0 -0
  236. /package/dist/{chunk-JWYRXE6C.js.map → chunk-XUDTFI4M.js.map} +0 -0
  237. /package/dist/{source-manager-BVB2SG73.js.map → loader-2O32KKAQ.js.map} +0 -0
@@ -1,23 +1,19 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  Wizard
4
- } from "./chunk-KQOU4POU.js";
4
+ } from "./chunk-46DQG2N7.js";
5
5
  import {
6
- claudePluginInstall,
7
- claudePluginMarketplaceAdd,
8
- claudePluginMarketplaceExists
9
- } from "./chunk-26MXZUHU.js";
10
- import {
11
- DRY_RUN_MESSAGES,
12
6
  STATUS_MESSAGES,
13
7
  SUCCESS_MESSAGES
14
- } from "./chunk-WLZHCM7O.js";
15
- import {
16
- BaseCommand,
17
- EXIT_CODES
18
- } from "./chunk-PGY5XROM.js";
8
+ } from "./chunk-MR6OBL3B.js";
19
9
  import {
10
+ claudePluginInstall,
11
+ claudePluginMarketplaceAdd,
12
+ claudePluginMarketplaceExists,
13
+ deriveInstallMode,
14
+ detectGlobalInstallation,
20
15
  detectProjectInstallation,
16
+ ensureBlankGlobalConfig,
21
17
  getInstallationInfo,
22
18
  getMarketplaceLabel,
23
19
  hasIndividualPlugins,
@@ -25,28 +21,32 @@ import {
25
21
  installPluginConfig,
26
22
  loadProjectConfig,
27
23
  loadSkillsMatrixFromSource
28
- } from "./chunk-HMSHB5EQ.js";
24
+ } from "./chunk-FWMWWE3X.js";
25
+ import {
26
+ BaseCommand,
27
+ EXIT_CODES
28
+ } from "./chunk-VR3CDXDT.js";
29
29
  import {
30
30
  disableBuffering,
31
31
  drainBuffer,
32
32
  enableBuffering,
33
33
  fileExists,
34
34
  getErrorMessage,
35
- pushBufferMessage,
36
35
  readFileSafe,
37
36
  settingsFileSchema,
38
37
  warn,
39
38
  warnUnknownFields
40
- } from "./chunk-WBHPCBVN.js";
39
+ } from "./chunk-LWXRUR6B.js";
41
40
  import {
42
41
  ASCII_LOGO,
43
42
  CLAUDE_DIR,
43
+ CLAUDE_SRC_DIR,
44
44
  CLI_BIN_NAME,
45
45
  CLI_COLORS,
46
46
  DEFAULT_BRANDING,
47
- LOCAL_SKILLS_PATH,
47
+ GLOBAL_INSTALL_ROOT,
48
48
  MAX_CONFIG_FILE_SIZE
49
- } from "./chunk-AWP5A6IM.js";
49
+ } from "./chunk-6OWHQ7HM.js";
50
50
  import {
51
51
  init_esm_shims
52
52
  } from "./chunk-DHET7RCE.js";
@@ -150,7 +150,7 @@ var Dashboard = ({
150
150
  }) => {
151
151
  const { exit } = useApp();
152
152
  const [focusIndex, setFocusIndex] = useState(0);
153
- useInput((input, key) => {
153
+ useInput((_input, key) => {
154
154
  if (key.escape) {
155
155
  onCancel();
156
156
  exit();
@@ -208,11 +208,65 @@ var Dashboard = ({
208
208
  /* @__PURE__ */ jsx2(Text2, { dimColor: true, children: " Use arrow keys to select, Enter to confirm, Esc to exit" })
209
209
  ] });
210
210
  };
211
+ var GLOBAL_CONFIG_OPTIONS = [
212
+ { label: "Edit global installation", choice: "edit-global" },
213
+ { label: "Create new project installation", choice: "create-project" }
214
+ ];
215
+ var GlobalConfigPrompt = ({
216
+ globalConfigDir,
217
+ onSelect,
218
+ onCancel
219
+ }) => {
220
+ const { exit } = useApp();
221
+ const [focusIndex, setFocusIndex] = useState(0);
222
+ useInput((_input, key) => {
223
+ if (key.escape) {
224
+ onCancel();
225
+ exit();
226
+ return;
227
+ }
228
+ if (key.return) {
229
+ onSelect(GLOBAL_CONFIG_OPTIONS[focusIndex].choice);
230
+ exit();
231
+ return;
232
+ }
233
+ if (key.leftArrow) {
234
+ setFocusIndex((i) => i > 0 ? i - 1 : GLOBAL_CONFIG_OPTIONS.length - 1);
235
+ }
236
+ if (key.rightArrow) {
237
+ setFocusIndex((i) => i < GLOBAL_CONFIG_OPTIONS.length - 1 ? i + 1 : 0);
238
+ }
239
+ });
240
+ return /* @__PURE__ */ jsxs2(Box2, { flexDirection: "column", children: [
241
+ /* @__PURE__ */ jsxs2(Text2, { children: [
242
+ "A global installation was found at ",
243
+ globalConfigDir
244
+ ] }),
245
+ /* @__PURE__ */ jsx2(Text2, { children: "What would you like to do?" }),
246
+ /* @__PURE__ */ jsx2(Text2, { children: " " }),
247
+ /* @__PURE__ */ jsxs2(Box2, { children: [
248
+ /* @__PURE__ */ jsx2(Text2, { children: " " }),
249
+ GLOBAL_CONFIG_OPTIONS.map((option, index) => /* @__PURE__ */ jsx2(Box2, { marginRight: 1, children: /* @__PURE__ */ jsxs2(
250
+ Text2,
251
+ {
252
+ color: index === focusIndex ? CLI_COLORS.FOCUS : void 0,
253
+ bold: index === focusIndex,
254
+ children: [
255
+ "[",
256
+ option.label,
257
+ "]"
258
+ ]
259
+ }
260
+ ) }, option.choice))
261
+ ] }),
262
+ /* @__PURE__ */ jsx2(Text2, { dimColor: true, children: " Use arrow keys to select, Enter to confirm, Esc to exit" })
263
+ ] });
264
+ };
211
265
  async function getDashboardData(projectDir) {
212
266
  const [info, loaded] = await Promise.all([getInstallationInfo(), loadProjectConfig(projectDir)]);
213
267
  const skillCount = loaded?.config?.skills?.length ?? 0;
214
268
  const agentCount = info?.agentCount ?? 0;
215
- const mode = info?.mode ?? loaded?.config?.installMode ?? "local";
269
+ const mode = info?.mode ?? (loaded?.config?.skills ? deriveInstallMode(loaded.config.skills) : "local");
216
270
  const source = loaded?.config?.source;
217
271
  return { skillCount, agentCount, mode, source };
218
272
  }
@@ -268,18 +322,10 @@ var Init = class _Init extends BaseCommand {
268
322
  description: "Start the setup wizard",
269
323
  command: "<%= config.bin %> <%= command.id %>"
270
324
  },
271
- {
272
- description: "Install globally to home directory",
273
- command: "<%= config.bin %> <%= command.id %> --global"
274
- },
275
325
  {
276
326
  description: "Initialize from a custom marketplace",
277
327
  command: "<%= config.bin %> <%= command.id %> --source github:org/marketplace"
278
328
  },
279
- {
280
- description: "Preview without creating files",
281
- command: "<%= config.bin %> <%= command.id %> --dry-run"
282
- },
283
329
  {
284
330
  description: "Force refresh skills from remote",
285
331
  command: "<%= config.bin %> <%= command.id %> --refresh"
@@ -287,11 +333,6 @@ var Init = class _Init extends BaseCommand {
287
333
  ];
288
334
  static flags = {
289
335
  ...BaseCommand.baseFlags,
290
- global: Flags.boolean({
291
- char: "g",
292
- description: "Install globally to home directory (~/.claude-src/)",
293
- default: false
294
- }),
295
336
  refresh: Flags.boolean({
296
337
  description: "Force refresh from remote source",
297
338
  default: false
@@ -299,7 +340,7 @@ var Init = class _Init extends BaseCommand {
299
340
  };
300
341
  async run() {
301
342
  const { flags } = await this.parse(_Init);
302
- const projectDir = flags.global ? os.homedir() : process.cwd();
343
+ const projectDir = process.cwd();
303
344
  const individualPluginsExist = await hasIndividualPlugins(projectDir);
304
345
  const existingInstallation = await detectProjectInstallation(projectDir);
305
346
  if (individualPluginsExist || existingInstallation) {
@@ -309,13 +350,45 @@ var Init = class _Init extends BaseCommand {
309
350
  }
310
351
  return;
311
352
  }
312
- if (flags.global) {
313
- this.log("Installing globally to home directory...");
353
+ const globalInstallation = await detectGlobalInstallation();
354
+ if (globalInstallation) {
355
+ const globalConfigDir = path2.join(os.homedir(), CLAUDE_SRC_DIR);
356
+ if (process.stdin.isTTY) {
357
+ let globalChoice = null;
358
+ const { waitUntilExit: waitForPrompt } = render(
359
+ /* @__PURE__ */ jsx2(
360
+ GlobalConfigPrompt,
361
+ {
362
+ globalConfigDir,
363
+ onSelect: (choice) => {
364
+ globalChoice = choice;
365
+ },
366
+ onCancel: () => {
367
+ globalChoice = null;
368
+ }
369
+ }
370
+ )
371
+ );
372
+ await waitForPrompt();
373
+ if (globalChoice === "edit-global") {
374
+ const selectedCommand = await showDashboard(os.homedir(), (msg) => this.log(msg));
375
+ if (selectedCommand) {
376
+ await this.config.runCommand(selectedCommand);
377
+ }
378
+ return;
379
+ }
380
+ if (globalChoice === null) {
381
+ return;
382
+ }
383
+ }
384
+ }
385
+ if (projectDir !== GLOBAL_INSTALL_ROOT) {
386
+ const created = await ensureBlankGlobalConfig();
387
+ if (created) {
388
+ this.log("Created blank global config at ~/" + CLAUDE_SRC_DIR);
389
+ }
314
390
  }
315
391
  enableBuffering();
316
- if (flags["dry-run"]) {
317
- pushBufferMessage("info", DRY_RUN_MESSAGES.PREVIEW_NO_FILES_CREATED);
318
- }
319
392
  let sourceResult;
320
393
  let startupMessages = [];
321
394
  try {
@@ -343,7 +416,6 @@ var Init = class _Init extends BaseCommand {
343
416
  marketplaceLabel,
344
417
  logo: ASCII_LOGO,
345
418
  projectDir,
346
- initialInstallMode: sourceResult.marketplace ? "plugin" : "local",
347
419
  startupMessages,
348
420
  onComplete: (result2) => {
349
421
  wizardResult = result2;
@@ -359,74 +431,22 @@ var Init = class _Init extends BaseCommand {
359
431
  if (!result || result.cancelled) {
360
432
  this.exit(EXIT_CODES.CANCELLED);
361
433
  }
362
- if (result.selectedSkills.length === 0) {
434
+ if (result.skills.length === 0) {
363
435
  this.error("No skills selected", { exit: EXIT_CODES.ERROR });
364
436
  }
365
437
  await this.handleInstallation(result, sourceResult, flags);
366
438
  }
367
439
  async handleInstallation(result, sourceResult, flags) {
368
- const projectDir = flags.global ? os.homedir() : process.cwd();
369
- const pluginScope = flags.global ? "user" : "project";
370
- const dryRun = flags["dry-run"];
440
+ const projectDir = process.cwd();
441
+ const installMode = deriveInstallMode(result.skills);
371
442
  this.log("\n");
372
- this.log(`Selected ${result.selectedSkills.length} skills`);
443
+ this.log(`Selected ${result.skills.length} skills`);
373
444
  this.log(
374
- `Install mode: ${result.installMode === "plugin" ? "Plugin (native install)" : "Local (copy to .claude/skills/)"}`
445
+ `Install mode: ${installMode === "plugin" ? "Plugin (native install)" : "Local (copy to .claude/skills/)"}`
375
446
  );
376
- if (dryRun) {
377
- if (result.installMode === "plugin" && result.selectedStackId) {
378
- const useMarketplace = !!sourceResult.marketplace;
379
- if (useMarketplace) {
380
- this.log(
381
- `[dry-run] Would install stack "${result.selectedStackId}" from marketplace "${sourceResult.marketplace}"`
382
- );
383
- this.log(
384
- `[dry-run] claude plugin install ${result.selectedStackId}@${sourceResult.marketplace} --scope ${pluginScope}`
385
- );
386
- } else {
387
- this.log(
388
- `[dry-run] Would compile and install stack "${result.selectedStackId}" as a native plugin`
389
- );
390
- this.log(
391
- `[dry-run] claude plugin install ./compiled-stack/${result.selectedStackId} --scope ${pluginScope}`
392
- );
393
- this.log(
394
- `[dry-run] Stack includes ${result.selectedSkills.length} skills and agents bundled together`
395
- );
396
- }
397
- } else if (result.installMode === "plugin" && sourceResult.marketplace) {
398
- this.log(
399
- `[dry-run] Would install ${result.selectedSkills.length} skills as individual plugins from "${sourceResult.marketplace}"`
400
- );
401
- for (const skillId of result.selectedSkills) {
402
- this.log(
403
- `[dry-run] claude plugin install ${skillId}@${sourceResult.marketplace} --scope ${pluginScope}`
404
- );
405
- }
406
- const localAgentsDir = path2.join(projectDir, CLAUDE_DIR, "agents");
407
- this.log(`[dry-run] Would compile agents to ${localAgentsDir}`);
408
- this.log(`[dry-run] Would save config to .claude-src/config.yaml`);
409
- } else {
410
- if (result.installMode === "plugin") {
411
- this.log(
412
- `[dry-run] Plugin Mode requires a marketplace for individual skills \u2014 would fall back to Local Mode`
413
- );
414
- }
415
- const localSkillsDir = path2.join(projectDir, LOCAL_SKILLS_PATH);
416
- const localAgentsDir = path2.join(projectDir, CLAUDE_DIR, "agents");
417
- this.log(
418
- `[dry-run] Would copy ${result.selectedSkills.length} skills to ${localSkillsDir}`
419
- );
420
- this.log(`[dry-run] Would compile agents to ${localAgentsDir}`);
421
- this.log(`[dry-run] Would save config to .claude-src/config.yaml`);
422
- }
423
- this.log(`
424
- ${DRY_RUN_MESSAGES.COMPLETE_NO_FILES_CREATED}`);
425
- return;
426
- }
427
- if (result.installMode === "plugin") {
447
+ if (installMode === "plugin") {
428
448
  if (sourceResult.marketplace) {
429
- await this.installIndividualPlugins(result, sourceResult, flags, projectDir, pluginScope);
449
+ await this.installIndividualPlugins(result, sourceResult, flags, projectDir);
430
450
  } else {
431
451
  this.warn("Plugin Mode requires a marketplace for individual skill installation.");
432
452
  this.log(`Falling back to Local Mode (copying to .claude/skills/)...`);
@@ -437,7 +457,7 @@ ${DRY_RUN_MESSAGES.COMPLETE_NO_FILES_CREATED}`);
437
457
  }
438
458
  await this.installLocalMode(result, sourceResult, flags, projectDir);
439
459
  }
440
- async installIndividualPlugins(result, sourceResult, flags, projectDir, pluginScope) {
460
+ async installIndividualPlugins(result, sourceResult, flags, projectDir) {
441
461
  if (sourceResult.marketplace) {
442
462
  const marketplaceExists = await claudePluginMarketplaceExists(sourceResult.marketplace);
443
463
  if (!marketplaceExists) {
@@ -454,8 +474,9 @@ ${DRY_RUN_MESSAGES.COMPLETE_NO_FILES_CREATED}`);
454
474
  }
455
475
  }
456
476
  this.log("Installing skill plugins...");
457
- for (const skillId of result.selectedSkills) {
458
- const pluginRef = `${skillId}@${sourceResult.marketplace}`;
477
+ for (const skill of result.skills.filter((s) => s.source !== "local")) {
478
+ const pluginRef = `${skill.id}@${sourceResult.marketplace}`;
479
+ const pluginScope = skill.scope === "global" ? "user" : "project";
459
480
  try {
460
481
  await claudePluginInstall(pluginRef, pluginScope, projectDir);
461
482
  this.log(` Installed ${pluginRef}`);
@@ -465,7 +486,8 @@ ${DRY_RUN_MESSAGES.COMPLETE_NO_FILES_CREATED}`);
465
486
  });
466
487
  }
467
488
  }
468
- this.log(`Installed ${result.selectedSkills.length} skill plugins
489
+ const pluginSkillCount = result.skills.filter((s) => s.source !== "local").length;
490
+ this.log(`Installed ${pluginSkillCount} skill plugins
469
491
  `);
470
492
  this.log("Generating configuration...");
471
493
  try {
@@ -495,7 +517,7 @@ ${DRY_RUN_MESSAGES.COMPLETE_NO_FILES_CREATED}`);
495
517
  this.log(` ${configResult.configPath}`);
496
518
  this.log("");
497
519
  this.log("To customize agent-skill assignments:");
498
- this.log(` 1. Edit .claude-src/config.yaml`);
520
+ this.log(` 1. Edit .claude-src/config.ts`);
499
521
  this.log(` 2. Run '${CLI_BIN_NAME} compile' to regenerate agents`);
500
522
  this.log("");
501
523
  const permissionWarning = await checkPermissions(projectDir);
@@ -548,7 +570,7 @@ ${DRY_RUN_MESSAGES.COMPLETE_NO_FILES_CREATED}`);
548
570
  this.log(` ${installResult.configPath}`);
549
571
  this.log("");
550
572
  this.log("To customize agent-skill assignments:");
551
- this.log(` 1. Edit .claude-src/config.yaml`);
573
+ this.log(` 1. Edit .claude-src/config.ts`);
552
574
  this.log(` 2. Run '${CLI_BIN_NAME} compile' to regenerate agents`);
553
575
  this.log("");
554
576
  const permissionWarning = await checkPermissions(projectDir);
@@ -568,4 +590,4 @@ export {
568
590
  showDashboard,
569
591
  Init
570
592
  };
571
- //# sourceMappingURL=chunk-4QWDB2MD.js.map
593
+ //# sourceMappingURL=chunk-YHOHLNHM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/init.tsx","../src/cli/lib/permission-checker.tsx"],"sourcesContent":["import React, { useState } from \"react\";\n\nimport { Flags } from \"@oclif/core\";\nimport { render, Box, Text, useApp, useInput } from \"ink\";\nimport os from \"os\";\nimport path from \"path\";\n\nimport { BaseCommand } from \"../base-command.js\";\nimport { Wizard, type WizardResultV2 } from \"../components/wizard/wizard.js\";\nimport {\n loadSkillsMatrixFromSource,\n getMarketplaceLabel,\n type SourceLoadResult,\n} from \"../lib/loading/index.js\";\nimport {\n installLocal,\n installPluginConfig,\n detectGlobalInstallation,\n detectProjectInstallation,\n deriveInstallMode,\n} from \"../lib/installation/index.js\";\nimport { checkPermissions } from \"../lib/permission-checker.js\";\nimport { getInstallationInfo } from \"../lib/plugins/plugin-info.js\";\nimport { hasIndividualPlugins } from \"../lib/plugins/index.js\";\nimport {\n claudePluginInstall,\n claudePluginMarketplaceExists,\n claudePluginMarketplaceAdd,\n} from \"../utils/exec.js\";\nimport {\n ASCII_LOGO,\n CLAUDE_SRC_DIR,\n CLI_BIN_NAME,\n CLI_COLORS,\n DEFAULT_BRANDING,\n GLOBAL_INSTALL_ROOT,\n} from \"../consts.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { EXIT_CODES } from \"../lib/exit-codes.js\";\nimport { loadProjectConfig } from \"../lib/configuration/project-config.js\";\nimport {\n enableBuffering,\n drainBuffer,\n disableBuffering,\n type StartupMessage,\n} from \"../utils/logger.js\";\nimport { SUCCESS_MESSAGES, STATUS_MESSAGES } from \"../utils/messages.js\";\nimport { ensureBlankGlobalConfig } from \"../lib/configuration/config-writer.js\";\n\ntype DashboardOption = {\n label: string;\n command: string;\n};\n\nconst DASHBOARD_OPTIONS: DashboardOption[] = [\n { label: \"Edit\", command: \"edit\" },\n { label: \"Compile\", command: \"compile\" },\n { label: \"Doctor\", command: \"doctor\" },\n { label: \"List\", command: \"list\" },\n];\n\ntype DashboardProps = DashboardData & {\n onSelect: (command: string) => void;\n onCancel: () => void;\n};\n\nconst Dashboard: React.FC<DashboardProps> = ({\n skillCount,\n agentCount,\n source,\n mode,\n onSelect,\n onCancel,\n}) => {\n const { exit } = useApp();\n const [focusIndex, setFocusIndex] = useState(0);\n\n useInput((_input, key) => {\n if (key.escape) {\n onCancel();\n exit();\n return;\n }\n if (key.return) {\n onSelect(DASHBOARD_OPTIONS[focusIndex].command);\n exit();\n return;\n }\n if (key.leftArrow) {\n setFocusIndex((i) => (i > 0 ? i - 1 : DASHBOARD_OPTIONS.length - 1));\n }\n if (key.rightArrow) {\n setFocusIndex((i) => (i < DASHBOARD_OPTIONS.length - 1 ? i + 1 : 0));\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text bold>{DEFAULT_BRANDING.NAME}</Text>\n <Text> </Text>\n <Text> Skills: {skillCount} installed</Text>\n <Text> Agents: {agentCount} compiled</Text>\n <Text> Mode: {mode === \"plugin\" ? \"Plugin\" : \"Local\"}</Text>\n {source && <Text> Source: {source}</Text>}\n <Text> </Text>\n <Box>\n <Text> </Text>\n {DASHBOARD_OPTIONS.map((option, index) => (\n <Box key={option.command} marginRight={1}>\n <Text\n color={index === focusIndex ? CLI_COLORS.FOCUS : undefined}\n bold={index === focusIndex}\n >\n [{option.label}]\n </Text>\n </Box>\n ))}\n </Box>\n <Text dimColor> Use arrow keys to select, Enter to confirm, Esc to exit</Text>\n </Box>\n );\n};\n\ntype GlobalConfigChoice = \"edit-global\" | \"create-project\";\n\nconst GLOBAL_CONFIG_OPTIONS: { label: string; choice: GlobalConfigChoice }[] = [\n { label: \"Edit global installation\", choice: \"edit-global\" },\n { label: \"Create new project installation\", choice: \"create-project\" },\n];\n\ntype GlobalConfigPromptProps = {\n globalConfigDir: string;\n onSelect: (choice: GlobalConfigChoice) => void;\n onCancel: () => void;\n};\n\nconst GlobalConfigPrompt: React.FC<GlobalConfigPromptProps> = ({\n globalConfigDir,\n onSelect,\n onCancel,\n}) => {\n const { exit } = useApp();\n const [focusIndex, setFocusIndex] = useState(0);\n\n useInput((_input, key) => {\n if (key.escape) {\n onCancel();\n exit();\n return;\n }\n if (key.return) {\n onSelect(GLOBAL_CONFIG_OPTIONS[focusIndex].choice);\n exit();\n return;\n }\n if (key.leftArrow) {\n setFocusIndex((i) => (i > 0 ? i - 1 : GLOBAL_CONFIG_OPTIONS.length - 1));\n }\n if (key.rightArrow) {\n setFocusIndex((i) => (i < GLOBAL_CONFIG_OPTIONS.length - 1 ? i + 1 : 0));\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Text>A global installation was found at {globalConfigDir}</Text>\n <Text>What would you like to do?</Text>\n <Text> </Text>\n <Box>\n <Text> </Text>\n {GLOBAL_CONFIG_OPTIONS.map((option, index) => (\n <Box key={option.choice} marginRight={1}>\n <Text\n color={index === focusIndex ? CLI_COLORS.FOCUS : undefined}\n bold={index === focusIndex}\n >\n [{option.label}]\n </Text>\n </Box>\n ))}\n </Box>\n <Text dimColor> Use arrow keys to select, Enter to confirm, Esc to exit</Text>\n </Box>\n );\n};\n\nexport type DashboardData = {\n skillCount: number;\n agentCount: number;\n mode: string;\n source?: string;\n};\n\n/** Gathers dashboard data from the installation and project config. */\nexport async function getDashboardData(projectDir: string): Promise<DashboardData> {\n const [info, loaded] = await Promise.all([getInstallationInfo(), loadProjectConfig(projectDir)]);\n\n // Skill count from config (canonical source of truth for installed skills)\n const skillCount = loaded?.config?.skills?.length ?? 0;\n // Agent count from filesystem (compiled .md files in agents dir)\n const agentCount = info?.agentCount ?? 0;\n const mode =\n info?.mode ?? (loaded?.config?.skills ? deriveInstallMode(loaded.config.skills) : \"local\");\n const source = loaded?.config?.source;\n\n return { skillCount, agentCount, mode, source };\n}\n\n/** Formats the dashboard summary as plain text lines (for non-interactive/test output). */\nexport function formatDashboardText(data: DashboardData): string {\n const modeLabel = data.mode === \"plugin\" ? \"Plugin\" : \"Local\";\n const lines = [\n DEFAULT_BRANDING.NAME,\n \"\",\n ` Skills: ${data.skillCount} installed`,\n ` Agents: ${data.agentCount} compiled`,\n ` Mode: ${modeLabel}`,\n ];\n if (data.source) {\n lines.push(` Source: ${data.source}`);\n }\n lines.push(\"\");\n lines.push(` [Edit] [Compile] [Doctor] [List]`);\n return lines.join(\"\\n\");\n}\n\n/**\n * Shows the project dashboard and returns the selected command (or null if cancelled).\n * In non-interactive environments (no TTY), prints the summary text and returns null.\n */\nexport async function showDashboard(\n projectDir: string,\n log?: (message: string) => void,\n): Promise<string | null> {\n const data = await getDashboardData(projectDir);\n\n // Non-interactive: print text summary and exit (CI, piped, tests)\n if (!process.stdin.isTTY) {\n const output = log ?? console.log;\n output(formatDashboardText(data));\n return null;\n }\n\n let selectedCommand: string | null = null;\n\n const { waitUntilExit } = render(\n <Dashboard\n skillCount={data.skillCount}\n agentCount={data.agentCount}\n source={data.source}\n mode={data.mode}\n onSelect={(command) => {\n selectedCommand = command;\n }}\n onCancel={() => {\n selectedCommand = null;\n }}\n />,\n );\n\n await waitUntilExit();\n\n return selectedCommand;\n}\n\nexport default class Init extends BaseCommand {\n static summary = `Initialize ${DEFAULT_BRANDING.NAME} in this project`;\n static description =\n \"Interactive wizard to set up skills and agents. Supports Plugin Mode (native install) and Local Mode (copy to .claude/).\";\n\n static examples = [\n {\n description: \"Start the setup wizard\",\n command: \"<%= config.bin %> <%= command.id %>\",\n },\n {\n description: \"Initialize from a custom marketplace\",\n command: \"<%= config.bin %> <%= command.id %> --source github:org/marketplace\",\n },\n {\n description: \"Force refresh skills from remote\",\n command: \"<%= config.bin %> <%= command.id %> --refresh\",\n },\n ];\n\n static flags = {\n ...BaseCommand.baseFlags,\n refresh: Flags.boolean({\n description: \"Force refresh from remote source\",\n default: false,\n }),\n };\n\n async run(): Promise<void> {\n const { flags } = await this.parse(Init);\n const projectDir = process.cwd();\n\n // For \"already initialized\" check, only look at the target directory (no global fallback)\n const individualPluginsExist = await hasIndividualPlugins(projectDir);\n const existingInstallation = await detectProjectInstallation(projectDir);\n\n if (individualPluginsExist || existingInstallation) {\n const selectedCommand = await showDashboard(projectDir, (msg) => this.log(msg));\n if (selectedCommand) {\n await this.config.runCommand(selectedCommand);\n }\n return;\n }\n\n // No project config exists: check if a global installation exists\n const globalInstallation = await detectGlobalInstallation();\n if (globalInstallation) {\n const globalConfigDir = path.join(os.homedir(), CLAUDE_SRC_DIR);\n\n // Non-interactive: skip prompt and fall through to wizard\n if (process.stdin.isTTY) {\n let globalChoice: GlobalConfigChoice | null = null;\n\n const { waitUntilExit: waitForPrompt } = render(\n <GlobalConfigPrompt\n globalConfigDir={globalConfigDir}\n onSelect={(choice) => {\n globalChoice = choice;\n }}\n onCancel={() => {\n globalChoice = null;\n }}\n />,\n );\n\n await waitForPrompt();\n\n if (globalChoice === \"edit-global\") {\n const selectedCommand = await showDashboard(os.homedir(), (msg) => this.log(msg));\n if (selectedCommand) {\n await this.config.runCommand(selectedCommand);\n }\n return;\n }\n\n // User cancelled (Esc)\n if (globalChoice === null) {\n return;\n }\n\n // \"create-project\" falls through to wizard below\n }\n }\n\n // Auto-create blank global config on first init from a project directory.\n // This ensures the project config can always import from global.\n if (projectDir !== GLOBAL_INSTALL_ROOT) {\n const created = await ensureBlankGlobalConfig();\n if (created) {\n this.log(\"Created blank global config at ~/\" + CLAUDE_SRC_DIR);\n }\n }\n\n enableBuffering();\n\n let sourceResult: SourceLoadResult;\n let startupMessages: StartupMessage[] = [];\n try {\n sourceResult = await loadSkillsMatrixFromSource({\n sourceFlag: flags.source,\n projectDir,\n forceRefresh: flags.refresh,\n });\n } catch (error) {\n disableBuffering();\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n\n startupMessages = drainBuffer();\n disableBuffering();\n\n let wizardResult: WizardResultV2 | null = null;\n\n const marketplaceLabel = getMarketplaceLabel(sourceResult);\n const { waitUntilExit } = render(\n <Wizard\n matrix={sourceResult.matrix}\n version={this.config.version}\n marketplaceLabel={marketplaceLabel}\n logo={ASCII_LOGO}\n projectDir={projectDir}\n startupMessages={startupMessages}\n onComplete={(result) => {\n // Boundary cast: Ink render callback returns unknown result type\n wizardResult = result as WizardResultV2;\n }}\n onCancel={() => {\n this.log(\"Setup cancelled\");\n }}\n />,\n );\n\n await waitUntilExit();\n\n // Boundary cast: re-narrow after Ink waitUntilExit()\n const result = wizardResult as WizardResultV2 | null;\n if (!result || result.cancelled) {\n this.exit(EXIT_CODES.CANCELLED);\n }\n\n if (result.skills.length === 0) {\n this.error(\"No skills selected\", { exit: EXIT_CODES.ERROR });\n }\n\n await this.handleInstallation(result, sourceResult, flags);\n }\n\n private async handleInstallation(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string; refresh: boolean },\n ): Promise<void> {\n const projectDir = process.cwd();\n const installMode = deriveInstallMode(result.skills);\n\n this.log(\"\\n\");\n this.log(`Selected ${result.skills.length} skills`);\n this.log(\n `Install mode: ${installMode === \"plugin\" ? \"Plugin (native install)\" : \"Local (copy to .claude/skills/)\"}`,\n );\n\n if (installMode === \"plugin\") {\n if (sourceResult.marketplace) {\n await this.installIndividualPlugins(result, sourceResult, flags, projectDir);\n } else {\n this.warn(\"Plugin Mode requires a marketplace for individual skill installation.\");\n this.log(`Falling back to Local Mode (copying to .claude/skills/)...`);\n this.log(\"To use Plugin Mode, either select a stack or configure a marketplace source.\\n\");\n await this.installLocalMode(result, sourceResult, flags, projectDir);\n }\n return;\n }\n\n await this.installLocalMode(result, sourceResult, flags, projectDir);\n }\n\n private async installIndividualPlugins(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n projectDir: string,\n ): Promise<void> {\n if (sourceResult.marketplace) {\n const marketplaceExists = await claudePluginMarketplaceExists(sourceResult.marketplace);\n\n if (!marketplaceExists) {\n this.log(`Registering marketplace \"${sourceResult.marketplace}\"...`);\n try {\n const marketplaceSource = sourceResult.sourceConfig.source.replace(/^github:/, \"\");\n await claudePluginMarketplaceAdd(marketplaceSource);\n this.log(`Registered marketplace: ${sourceResult.marketplace}`);\n } catch (error) {\n this.error(getErrorMessage(error), {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n }\n\n this.log(\"Installing skill plugins...\");\n for (const skill of result.skills.filter((s) => s.source !== \"local\")) {\n const pluginRef = `${skill.id}@${sourceResult.marketplace}`;\n const pluginScope = skill.scope === \"global\" ? \"user\" : \"project\";\n try {\n await claudePluginInstall(pluginRef, pluginScope, projectDir);\n this.log(` Installed ${pluginRef}`);\n } catch (error) {\n this.error(`Failed to install plugin ${pluginRef}: ${getErrorMessage(error)}`, {\n exit: EXIT_CODES.ERROR,\n });\n }\n }\n\n const pluginSkillCount = result.skills.filter((s) => s.source !== \"local\").length;\n this.log(`Installed ${pluginSkillCount} skill plugins\\n`);\n\n this.log(\"Generating configuration...\");\n try {\n const configResult = await installPluginConfig({\n wizardResult: result,\n sourceResult,\n projectDir,\n sourceFlag: flags.source,\n });\n\n if (configResult.wasMerged) {\n this.log(`Merged with existing config at ${configResult.mergedConfigPath}`);\n }\n\n this.log(`Configuration saved (${configResult.config.agents.length} agents)\\n`);\n this.log(STATUS_MESSAGES.COMPILING_AGENTS);\n this.log(`Compiled ${configResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(`${SUCCESS_MESSAGES.INIT_SUCCESS}\\n`);\n this.log(\"Agents compiled to:\");\n this.log(` ${configResult.agentsDir}`);\n for (const agentName of configResult.compiledAgents) {\n this.log(` ${agentName}.md`);\n }\n this.log(\"\");\n this.log(\"Configuration:\");\n this.log(` ${configResult.configPath}`);\n this.log(\"\");\n this.log(\"To customize agent-skill assignments:\");\n this.log(` 1. Edit .claude-src/config.ts`);\n this.log(` 2. Run '${CLI_BIN_NAME} compile' to regenerate agents`);\n this.log(\"\");\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n\n private async installLocalMode(\n result: WizardResultV2,\n sourceResult: SourceLoadResult,\n flags: { source?: string },\n projectDir: string,\n ): Promise<void> {\n const matrix = sourceResult.matrix;\n\n this.log(\"Copying skills to local directory...\");\n try {\n const installResult = await installLocal({\n wizardResult: result,\n sourceResult,\n projectDir,\n sourceFlag: flags.source,\n });\n\n this.log(`Copied ${installResult.copiedSkills.length} skills to .claude/skills/\\n`);\n this.log(\"Generating configuration...\");\n\n if (installResult.wasMerged) {\n this.log(`Merged with existing config at ${installResult.mergedConfigPath}`);\n }\n\n this.log(`Configuration saved (${installResult.config.agents.length} agents)\\n`);\n this.log(STATUS_MESSAGES.COMPILING_AGENTS);\n this.log(`Compiled ${installResult.compiledAgents.length} agents to .claude/agents/\\n`);\n\n this.log(`${SUCCESS_MESSAGES.INIT_SUCCESS}\\n`);\n this.log(\"Skills copied to:\");\n this.log(` ${installResult.skillsDir}`);\n for (const copiedSkill of installResult.copiedSkills) {\n const skill = matrix.skills[copiedSkill.skillId];\n const displayName = skill?.displayName || copiedSkill.skillId;\n this.log(` ${displayName}/`);\n }\n this.log(\"\");\n this.log(\"Agents compiled to:\");\n this.log(` ${installResult.agentsDir}`);\n for (const agentName of installResult.compiledAgents) {\n this.log(` ${agentName}.md`);\n }\n this.log(\"\");\n this.log(\"Configuration:\");\n this.log(` ${installResult.configPath}`);\n this.log(\"\");\n this.log(\"To customize agent-skill assignments:\");\n this.log(` 1. Edit .claude-src/config.ts`);\n this.log(` 2. Run '${CLI_BIN_NAME} compile' to regenerate agents`);\n this.log(\"\");\n\n const permissionWarning = await checkPermissions(projectDir);\n if (permissionWarning) {\n const { waitUntilExit } = render(permissionWarning);\n await waitUntilExit();\n }\n } catch (error) {\n this.handleError(error);\n }\n }\n}\n","import React from \"react\";\n\nimport { Text, Box } from \"ink\";\nimport path from \"path\";\n\nimport { CLAUDE_DIR, CLI_COLORS, MAX_CONFIG_FILE_SIZE } from \"../consts\";\nimport { fileExists, readFileSafe } from \"../utils/fs\";\nimport { warn } from \"../utils/logger\";\nimport { settingsFileSchema, warnUnknownFields } from \"./schemas\";\n\ntype PermissionConfig = {\n allow?: string[];\n deny?: string[];\n};\n\ntype SettingsFile = {\n permissions?: PermissionConfig;\n};\n\nexport async function checkPermissions(projectRoot: string): Promise<React.ReactElement | null> {\n const settingsPath = path.join(projectRoot, CLAUDE_DIR, \"settings.json\");\n const localSettingsPath = path.join(projectRoot, CLAUDE_DIR, \"settings.local.json\");\n\n let permissions: PermissionConfig | undefined;\n\n for (const filePath of [localSettingsPath, settingsPath]) {\n if (await fileExists(filePath)) {\n try {\n const content = await readFileSafe(filePath, MAX_CONFIG_FILE_SIZE);\n const raw = JSON.parse(content);\n if (typeof raw === \"object\" && raw !== null && !Array.isArray(raw)) {\n // Known Claude CLI settings.json fields (permissions is ours; the rest are managed by Claude CLI)\n const EXPECTED_SETTINGS_KEYS = [\n \"permissions\",\n \"enabledPlugins\",\n \"env\",\n \"allowedTools\",\n \"customInstructions\",\n \"defaultModel\",\n ] as const;\n warnUnknownFields(\n raw as Record<string, unknown>,\n EXPECTED_SETTINGS_KEYS,\n `settings file '${filePath}'`,\n );\n }\n const result = settingsFileSchema.safeParse(raw);\n const parsed: SettingsFile = result.success ? (result.data as SettingsFile) : {};\n if (parsed.permissions) {\n permissions = parsed.permissions;\n break;\n }\n } catch {\n warn(`Malformed settings file at '${filePath}' — skipping`);\n }\n }\n }\n\n if (!permissions) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={CLI_COLORS.WARNING} padding={1}>\n <Text bold color={CLI_COLORS.WARNING}>\n Permission Notice\n </Text>\n <Text>No permissions configured in .claude/settings.json</Text>\n <Text>Agents will prompt for approval on each tool use.</Text>\n <Text> </Text>\n <Text>For autonomous operation, add to .claude/settings.json:</Text>\n <Text> </Text>\n <Text color=\"dim\">{\"{\"}</Text>\n <Text color=\"dim\">{' \"permissions\": {'}</Text>\n <Text color=\"dim\">{' \"allow\": ['}</Text>\n <Text color=\"dim\">{' \"Read(*)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(git *)\",'}</Text>\n <Text color=\"dim\">{' \"Bash(bun *)\"'}</Text>\n <Text color=\"dim\">{\" ]\"}</Text>\n <Text color=\"dim\">{\" }\"}</Text>\n <Text color=\"dim\">{\"}\"}</Text>\n </Box>\n );\n }\n\n const hasRestrictiveBash = permissions.deny?.some(\n (rule) => rule === \"Bash(*)\" || rule === \"Bash\",\n );\n const hasNoAllows = !permissions.allow || permissions.allow.length === 0;\n\n if (hasRestrictiveBash || hasNoAllows) {\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor={CLI_COLORS.WARNING} padding={1}>\n <Text bold color={CLI_COLORS.WARNING}>\n Permission Warnings\n </Text>\n {hasRestrictiveBash && (\n <Text>\n ⚠ Bash is denied in permissions. Some agents require Bash for git, testing, and build\n commands.\n </Text>\n )}\n {hasNoAllows && (\n <Text>⚠ No allow rules configured. Agents will prompt for each tool use.</Text>\n )}\n </Box>\n );\n }\n\n return null;\n}\n"],"mappings":"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","names":["Box","Text","path","jsx","jsxs","Box","Text","path","result"]}
@@ -4,23 +4,23 @@ import {
4
4
  } from "./chunk-K77I4XGL.js";
5
5
  import {
6
6
  getDomainDisplayName
7
- } from "./chunk-HYEUETIC.js";
7
+ } from "./chunk-BKJHAJQW.js";
8
8
  import {
9
9
  useRowScroll
10
- } from "./chunk-3VOL4WEG.js";
10
+ } from "./chunk-WYVDNGJB.js";
11
11
  import {
12
12
  ViewTitle
13
- } from "./chunk-CMNKHDOX.js";
13
+ } from "./chunk-MGNYPVOJ.js";
14
14
  import {
15
15
  useWizardStore
16
- } from "./chunk-5FCHJLM7.js";
16
+ } from "./chunk-IGM6HA3S.js";
17
17
  import {
18
18
  typedKeys
19
19
  } from "./chunk-T4EXUIBY.js";
20
20
  import {
21
21
  CLI_COLORS,
22
22
  UI_SYMBOLS
23
- } from "./chunk-AWP5A6IM.js";
23
+ } from "./chunk-6OWHQ7HM.js";
24
24
  import {
25
25
  init_esm_shims
26
26
  } from "./chunk-DHET7RCE.js";
@@ -28,7 +28,7 @@ import {
28
28
  // src/cli/components/wizard/step-agents.tsx
29
29
  init_esm_shims();
30
30
  import { Box, Text, useInput } from "ink";
31
- import { useMemo, useState } from "react";
31
+ import React, { useMemo, useState } from "react";
32
32
  import { jsx, jsxs } from "react/jsx-runtime";
33
33
  var BUILT_IN_AGENT_GROUPS = [
34
34
  {
@@ -184,6 +184,9 @@ var StepAgents = ({ matrix }) => {
184
184
  store.toggleAgent(focusedId);
185
185
  }
186
186
  });
187
+ React.useEffect(() => {
188
+ store.setFocusedAgentId(focusedId === "continue" ? null : focusedId);
189
+ }, [focusedId, store]);
187
190
  const selectedCount = store.selectedAgents.length;
188
191
  const continueLabel = selectedCount > 0 ? `Continue with ${selectedCount} agent(s)` : "Continue without agents";
189
192
  const isContinueFocused = focusedId === "continue";
@@ -201,6 +204,8 @@ var StepAgents = ({ matrix }) => {
201
204
  const isSelected = store.selectedAgents.includes(row.agent.id);
202
205
  const checkbox = isSelected ? "[\u2713]" : "[ ]";
203
206
  const pointer = isFocused ? UI_SYMBOLS.CURRENT : " ";
207
+ const agentConfig = store.agentConfigs.find((ac) => ac.name === row.agent.id);
208
+ const scopeBadge = isSelected && agentConfig ? agentConfig.scope === "global" ? " [G]" : " [P]" : "";
204
209
  return /* @__PURE__ */ jsx(Box, { flexShrink: 0, children: /* @__PURE__ */ jsxs(Text, { children: [
205
210
  /* @__PURE__ */ jsx(Text, { color: isFocused ? CLI_COLORS.PRIMARY : void 0, children: pointer }),
206
211
  /* @__PURE__ */ jsxs(
@@ -216,6 +221,13 @@ var StepAgents = ({ matrix }) => {
216
221
  ]
217
222
  }
218
223
  ),
224
+ scopeBadge && /* @__PURE__ */ jsx(
225
+ Text,
226
+ {
227
+ color: agentConfig?.scope === "global" ? CLI_COLORS.WARNING : CLI_COLORS.INFO,
228
+ children: scopeBadge
229
+ }
230
+ ),
219
231
  /* @__PURE__ */ jsxs(Text, { dimColor: true, children: [
220
232
  " - ",
221
233
  row.agent.description
@@ -256,4 +268,4 @@ var StepAgents = ({ matrix }) => {
256
268
  export {
257
269
  StepAgents
258
270
  };
259
- //# sourceMappingURL=chunk-M3GQ2R3E.js.map
271
+ //# sourceMappingURL=chunk-Z3TM4N37.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/components/wizard/step-agents.tsx"],"sourcesContent":["import { Box, Text, useInput } from \"ink\";\nimport React, { useMemo, useState } from \"react\";\nimport { CLI_COLORS, UI_SYMBOLS } from \"../../consts.js\";\nimport { useRowScroll } from \"../hooks/use-row-scroll.js\";\nimport { useWizardStore } from \"../../stores/wizard-store.js\";\nimport type { AgentName, MergedSkillsMatrix } from \"../../types/index.js\";\nimport { typedKeys } from \"../../utils/typed-object.js\";\nimport { useMeasuredHeight } from \"../hooks/use-measured-height.js\";\nimport { getDomainDisplayName } from \"./utils.js\";\nimport { ViewTitle } from \"./view-title.js\";\n\ntype AgentItem = {\n id: AgentName;\n label: string;\n description: string;\n};\n\ntype AgentGroup = {\n label: string;\n items: AgentItem[];\n};\n\nconst BUILT_IN_AGENT_GROUPS: AgentGroup[] = [\n {\n label: \"Web\",\n items: [\n {\n id: \"web-developer\",\n label: \"Web Developer\",\n description: \"Frontend features, components, TypeScript\",\n },\n { id: \"web-reviewer\", label: \"Web Reviewer\", description: \"UI component code review\" },\n { id: \"web-researcher\", label: \"Web Researcher\", description: \"Frontend pattern discovery\" },\n {\n id: \"web-tester\",\n label: \"Web Tester\",\n description: \"Frontend tests, E2E, component tests\",\n },\n { id: \"web-pm\", label: \"Web PM\", description: \"Implementation specs and planning\" },\n {\n id: \"web-architecture\",\n label: \"Web Architecture\",\n description: \"App scaffolding, foundational patterns\",\n },\n {\n id: \"web-pattern-critique\",\n label: \"Web Pattern Critique\",\n description: \"Critique patterns against industry standards\",\n },\n ],\n },\n {\n label: \"API\",\n items: [\n {\n id: \"api-developer\",\n label: \"API Developer\",\n description: \"Backend routes, database, middleware\",\n },\n { id: \"api-reviewer\", label: \"API Reviewer\", description: \"Backend and config code review\" },\n { id: \"api-researcher\", label: \"API Researcher\", description: \"Backend pattern discovery\" },\n ],\n },\n {\n label: \"CLI\",\n items: [\n {\n id: \"cli-developer\",\n label: \"CLI Developer\",\n description: \"CLI commands, interactive prompts\",\n },\n { id: \"cli-tester\", label: \"CLI Tester\", description: \"CLI application tests\" },\n { id: \"cli-reviewer\", label: \"CLI Reviewer\", description: \"CLI code review\" },\n ],\n },\n {\n label: \"Meta\",\n items: [\n {\n id: \"pattern-scout\",\n label: \"Pattern Scout\",\n description: \"Extract codebase patterns and standards\",\n },\n { id: \"agent-summoner\", label: \"Agent Summoner\", description: \"Create and improve agents\" },\n {\n id: \"skill-summoner\",\n label: \"Skill Summoner\",\n description: \"Create technology-specific skills\",\n },\n { id: \"documentor\", label: \"Documentor\", description: \"AI-focused documentation\" },\n ],\n },\n];\n\n/** IDs of all built-in agents for fast lookup. */\nconst BUILT_IN_AGENT_IDS = new Set<string>(\n BUILT_IN_AGENT_GROUPS.flatMap((group) => group.items.map((a) => a.id)),\n);\n\n/** Convert a kebab-case agent ID to a title-case label. */\nfunction agentIdToLabel(id: string): string {\n return id\n .split(\"-\")\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1))\n .join(\" \");\n}\n\ntype FocusId = AgentName | \"continue\";\n\ntype ListRow =\n | { type: \"header\"; label: string }\n | { type: \"spacer\" }\n | { type: \"agent\"; agent: AgentItem };\n\nfunction buildAgentGroups(matrix: MergedSkillsMatrix): AgentGroup[] {\n const customAgentIds: string[] = [];\n for (const stack of matrix.suggestedStacks) {\n for (const agentName of typedKeys(stack.skills)) {\n if (!BUILT_IN_AGENT_IDS.has(agentName) && !customAgentIds.includes(agentName)) {\n customAgentIds.push(agentName);\n }\n }\n }\n\n if (customAgentIds.length === 0) return BUILT_IN_AGENT_GROUPS;\n\n // Group custom agents by explicit domain (from metadata.yaml) or kebab prefix fallback\n const customGroupMap = new Map<string, AgentItem[]>();\n for (const agentId of customAgentIds) {\n // Boundary cast: custom agent names from matrix stacks are not in the AgentName union\n const explicitDomain = matrix.agentDefinedDomains?.[agentId as AgentName];\n const domainKey = explicitDomain ?? (agentId.split(\"-\")[0] || \"custom\");\n const groupLabel = getDomainDisplayName(domainKey);\n if (!customGroupMap.has(groupLabel)) {\n customGroupMap.set(groupLabel, []);\n }\n customGroupMap.get(groupLabel)!.push({\n id: agentId as AgentName,\n label: agentIdToLabel(agentId),\n description: \"Custom agent\",\n });\n }\n\n const customGroups: AgentGroup[] = [];\n for (const [label, items] of customGroupMap) {\n customGroups.push({ label, items });\n }\n\n return [...BUILT_IN_AGENT_GROUPS, ...customGroups];\n}\n\nfunction buildFlatRows(groups: AgentGroup[]): ListRow[] {\n return groups.flatMap((group, groupIndex): ListRow[] => [\n ...(groupIndex > 0 ? [{ type: \"spacer\" as const }] : []),\n { type: \"header\" as const, label: group.label },\n ...group.items.map((agent): ListRow => ({ type: \"agent\", agent })),\n ]);\n}\n\nfunction buildFocusableIds(groups: AgentGroup[]): FocusId[] {\n return [...groups.flatMap((group) => group.items.map((a) => a.id)), \"continue\"];\n}\n\ntype StepAgentsProps = {\n matrix: MergedSkillsMatrix;\n};\n\nexport const StepAgents: React.FC<StepAgentsProps> = ({ matrix }) => {\n const store = useWizardStore();\n\n const agentGroups = useMemo(() => buildAgentGroups(matrix), [matrix]);\n const flatRows = useMemo(() => buildFlatRows(agentGroups), [agentGroups]);\n const focusableIds = useMemo(() => buildFocusableIds(agentGroups), [agentGroups]);\n\n const [focusedId, setFocusedId] = useState<FocusId>(focusableIds[0]!);\n const { ref: listRef, measuredHeight: listHeight } = useMeasuredHeight();\n\n const focusedRowIndex =\n focusedId !== \"continue\"\n ? flatRows.findIndex((row) => row.type === \"agent\" && row.agent.id === focusedId)\n : -1;\n const { scrollEnabled, scrollTop } = useRowScroll({\n focusedIndex: Math.max(0, focusedRowIndex),\n itemCount: flatRows.length,\n availableHeight: listHeight,\n });\n\n useInput((input, key) => {\n if (key.escape) {\n store.goBack();\n return;\n }\n\n const currentIdx = focusableIds.indexOf(focusedId);\n\n if (key.upArrow || input === \"k\") {\n const nextIdx = currentIdx <= 0 ? focusableIds.length - 1 : currentIdx - 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.downArrow || input === \"j\") {\n const nextIdx = currentIdx >= focusableIds.length - 1 ? 0 : currentIdx + 1;\n setFocusedId(focusableIds[nextIdx]!);\n return;\n }\n\n if (key.return) {\n store.setStep(\"confirm\");\n return;\n }\n\n if (input === \" \" && focusedId !== \"continue\") {\n store.toggleAgent(focusedId);\n }\n });\n\n // Sync focusedAgentId so the wizard-level S key handler can toggle agent scope\n React.useEffect(() => {\n store.setFocusedAgentId(focusedId === \"continue\" ? null : focusedId);\n }, [focusedId, store]);\n\n const selectedCount = store.selectedAgents.length;\n const continueLabel =\n selectedCount > 0 ? `Continue with ${selectedCount} agent(s)` : \"Continue without agents\";\n\n const isContinueFocused = focusedId === \"continue\";\n\n const rowElements = flatRows.map((row, index) => {\n switch (row.type) {\n case \"header\":\n return (\n <Box key={`header-${row.label}`} flexShrink={0}>\n <Text dimColor bold>\n {\" \"}\n {row.label}\n </Text>\n </Box>\n );\n case \"spacer\":\n return (\n <Box key={`spacer-${index}`} flexShrink={0}>\n <Text> </Text>\n </Box>\n );\n case \"agent\": {\n const isFocused = row.agent.id === focusedId;\n const isSelected = store.selectedAgents.includes(row.agent.id);\n const checkbox = isSelected ? \"[\\u2713]\" : \"[ ]\";\n const pointer = isFocused ? UI_SYMBOLS.CURRENT : \" \";\n const agentConfig = store.agentConfigs.find((ac) => ac.name === row.agent.id);\n const scopeBadge =\n isSelected && agentConfig ? (agentConfig.scope === \"global\" ? \" [G]\" : \" [P]\") : \"\";\n return (\n <Box key={row.agent.id} flexShrink={0}>\n <Text>\n <Text color={isFocused ? CLI_COLORS.PRIMARY : undefined}>{pointer}</Text>\n <Text\n color={isSelected || isFocused ? CLI_COLORS.PRIMARY : undefined}\n bold={isFocused}\n >\n {\" \"}\n {checkbox} {row.agent.label}\n </Text>\n {scopeBadge && (\n <Text\n color={agentConfig?.scope === \"global\" ? CLI_COLORS.WARNING : CLI_COLORS.INFO}\n >\n {scopeBadge}\n </Text>\n )}\n <Text dimColor> - {row.agent.description}</Text>\n </Text>\n </Box>\n );\n }\n }\n });\n\n return (\n <Box flexDirection=\"column\" width=\"100%\" flexGrow={1} flexBasis={0}>\n <ViewTitle>Select agents to compile:</ViewTitle>\n\n <Box ref={listRef} flexDirection=\"column\" flexGrow={1} flexBasis={0}>\n <Box\n flexDirection=\"column\"\n flexGrow={1}\n {...(scrollEnabled && { overflow: \"hidden\" as const })}\n >\n <Box\n flexDirection=\"column\"\n marginTop={scrollTop > 0 ? -scrollTop : 0}\n {...(scrollEnabled && { flexShrink: 0 })}\n >\n {rowElements}\n </Box>\n </Box>\n </Box>\n\n <Text color={isContinueFocused ? CLI_COLORS.PRIMARY : undefined} bold={isContinueFocused}>\n {isContinueFocused ? UI_SYMBOLS.CURRENT : \" \"} {\"\\u2192\"} {continueLabel}\n </Text>\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -3,19 +3,19 @@ import {
3
3
  generateMarketplace,
4
4
  getMarketplaceStats,
5
5
  writeMarketplace
6
- } from "../../chunk-KAO3LKB5.js";
6
+ } from "../../chunk-C577AJE7.js";
7
7
  import {
8
8
  BaseCommand
9
- } from "../../chunk-PGY5XROM.js";
9
+ } from "../../chunk-VR3CDXDT.js";
10
10
  import {
11
11
  setVerbose
12
- } from "../../chunk-WBHPCBVN.js";
12
+ } from "../../chunk-LWXRUR6B.js";
13
13
  import {
14
14
  DEFAULT_BRANDING,
15
15
  DEFAULT_PLUGIN_NAME,
16
16
  DEFAULT_VERSION,
17
17
  PLUGIN_MANIFEST_DIR
18
- } from "../../chunk-AWP5A6IM.js";
18
+ } from "../../chunk-6OWHQ7HM.js";
19
19
  import {
20
20
  init_esm_shims
21
21
  } from "../../chunk-DHET7RCE.js";
@@ -2,22 +2,24 @@
2
2
  import {
3
3
  compileAllAgentPlugins,
4
4
  printAgentCompilationSummary
5
- } from "../../chunk-7LV4V6A4.js";
6
- import {
7
- BaseCommand
8
- } from "../../chunk-PGY5XROM.js";
5
+ } from "../../chunk-SRBN6RRD.js";
9
6
  import {
10
7
  compileAllSkillPlugins,
11
8
  compileSkillPlugin,
12
9
  printCompilationSummary
13
- } from "../../chunk-HMSHB5EQ.js";
10
+ } from "../../chunk-FWMWWE3X.js";
11
+ import "../../chunk-OCEFD7V6.js";
14
12
  import "../../chunk-T4EXUIBY.js";
13
+ import {
14
+ BaseCommand
15
+ } from "../../chunk-VR3CDXDT.js";
15
16
  import {
16
17
  setVerbose
17
- } from "../../chunk-WBHPCBVN.js";
18
+ } from "../../chunk-LWXRUR6B.js";
18
19
  import {
19
20
  DIRS
20
- } from "../../chunk-AWP5A6IM.js";
21
+ } from "../../chunk-6OWHQ7HM.js";
22
+ import "../../chunk-EC3UJRKZ.js";
21
23
  import {
22
24
  init_esm_shims
23
25
  } from "../../chunk-DHET7RCE.js";