@agents-inc/cli 0.48.0 → 0.60.1

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 (306) hide show
  1. package/CHANGELOG.md +181 -5
  2. package/README.md +1 -2
  3. package/dist/{chunk-2DNDAXF6.js → chunk-52M2XF3W.js} +57 -27
  4. package/dist/chunk-52M2XF3W.js.map +1 -0
  5. package/dist/{chunk-WSGKCBY5.js → chunk-52XO4ULK.js} +6 -9
  6. package/dist/chunk-52XO4ULK.js.map +1 -0
  7. package/dist/{chunk-AMNCCZSG.js → chunk-6G3KZSO4.js} +82 -63
  8. package/dist/chunk-6G3KZSO4.js.map +1 -0
  9. package/dist/{chunk-LESHL6SM.js → chunk-6OWHQ7HM.js} +21 -13
  10. package/dist/chunk-6OWHQ7HM.js.map +1 -0
  11. package/dist/{chunk-X3SZIBVW.js → chunk-7FMEMXJ4.js} +71 -71
  12. package/dist/chunk-7FMEMXJ4.js.map +1 -0
  13. package/dist/{chunk-I52THVF6.js → chunk-AJJJE7F7.js} +2 -2
  14. package/dist/{chunk-ZML3OCYA.js → chunk-AX3SZZWA.js} +2 -2
  15. package/dist/{chunk-NJVJ7VO5.js → chunk-BFD5NZQ4.js} +5 -4
  16. package/dist/chunk-BFD5NZQ4.js.map +1 -0
  17. package/dist/{chunk-GSPPOXMG.js → chunk-BKJHAJQW.js} +2 -2
  18. package/dist/{chunk-GSPPOXMG.js.map → chunk-BKJHAJQW.js.map} +1 -1
  19. package/dist/{chunk-FPTUCWBY.js → chunk-BMJZBLP7.js} +46 -30
  20. package/dist/chunk-BMJZBLP7.js.map +1 -0
  21. package/dist/chunk-BNQ5O6LE.js +74 -0
  22. package/dist/chunk-BNQ5O6LE.js.map +1 -0
  23. package/dist/{chunk-W62XVWXB.js → chunk-C577AJE7.js} +3 -3
  24. package/dist/chunk-CIG7IKX3.js +118 -0
  25. package/dist/chunk-CIG7IKX3.js.map +1 -0
  26. package/dist/chunk-EC3UJRKZ.js +1534 -0
  27. package/dist/chunk-EC3UJRKZ.js.map +1 -0
  28. package/dist/{chunk-IS7GP6XC.js → chunk-EMIUPGPL.js} +57 -52
  29. package/dist/chunk-EMIUPGPL.js.map +1 -0
  30. package/dist/chunk-G6WHCALR.js +593 -0
  31. package/dist/chunk-G6WHCALR.js.map +1 -0
  32. package/dist/{chunk-OTTITQ7C.js → chunk-H7WJK7NJ.js} +48 -95
  33. package/dist/chunk-H7WJK7NJ.js.map +1 -0
  34. package/dist/chunk-HGTC76BX.js +16 -0
  35. package/dist/chunk-HGTC76BX.js.map +1 -0
  36. package/dist/{chunk-G5OZQ376.js → chunk-K6OLORQL.js} +6 -6
  37. package/dist/{chunk-OHDEJEYB.js → chunk-KIWFEBKH.js} +41 -11
  38. package/dist/chunk-KIWFEBKH.js.map +1 -0
  39. package/dist/{chunk-YMUWTPOM.js → chunk-LWXRUR6B.js} +92 -100
  40. package/dist/chunk-LWXRUR6B.js.map +1 -0
  41. package/dist/{chunk-U2AEK4ZL.js → chunk-MGNYPVOJ.js} +2 -2
  42. package/dist/chunk-MKCHLXMY.js +40 -0
  43. package/dist/chunk-MKCHLXMY.js.map +1 -0
  44. package/dist/{chunk-37QYD33C.js → chunk-MMFQNJPE.js} +2 -2
  45. package/dist/{chunk-DG2U2WY3.js → chunk-MR6OBL3B.js} +3 -11
  46. package/dist/{chunk-DG2U2WY3.js.map → chunk-MR6OBL3B.js.map} +1 -1
  47. package/dist/{chunk-7IAKVZL5.js → chunk-O6BA7Q2B.js} +28 -59
  48. package/dist/chunk-O6BA7Q2B.js.map +1 -0
  49. package/dist/chunk-OCEFD7V6.js +201 -0
  50. package/dist/chunk-OCEFD7V6.js.map +1 -0
  51. package/dist/{chunk-YZTWZVGX.js → chunk-PUT7X3GA.js} +1 -1
  52. package/dist/chunk-PUT7X3GA.js.map +1 -0
  53. package/dist/chunk-RO6LX3UV.js +342 -0
  54. package/dist/chunk-RO6LX3UV.js.map +1 -0
  55. package/dist/{chunk-34BP5BC4.js → chunk-SDKCQXWE.js} +2 -2
  56. package/dist/{chunk-VBAAATPU.js → chunk-SEJF7CGJ.js} +41 -28
  57. package/dist/chunk-SEJF7CGJ.js.map +1 -0
  58. package/dist/{chunk-5O6GKXAN.js → chunk-SZRK3VOR.js} +24 -14
  59. package/dist/chunk-SZRK3VOR.js.map +1 -0
  60. package/dist/{chunk-5MN5S3DV.js → chunk-TC3NHO34.js} +22 -17
  61. package/dist/chunk-TC3NHO34.js.map +1 -0
  62. package/dist/{chunk-SPVSWDFM.js → chunk-TGLRDEEL.js} +8 -14
  63. package/dist/chunk-TGLRDEEL.js.map +1 -0
  64. package/dist/{chunk-P2SFRDWI.js → chunk-TZXYBG3R.js} +3634 -2875
  65. package/dist/chunk-TZXYBG3R.js.map +1 -0
  66. package/dist/{chunk-2BVZOYJP.js → chunk-VR3CDXDT.js} +2 -6
  67. package/dist/chunk-VR3CDXDT.js.map +1 -0
  68. package/dist/{chunk-KPJJOLAQ.js → chunk-WF6RM73R.js} +272 -40
  69. package/dist/chunk-WF6RM73R.js.map +1 -0
  70. package/dist/chunk-WYVDNGJB.js +31 -0
  71. package/dist/chunk-WYVDNGJB.js.map +1 -0
  72. package/dist/{chunk-F7KTUFGU.js → chunk-X5EG4EFP.js} +3 -2
  73. package/dist/chunk-X5EG4EFP.js.map +1 -0
  74. package/dist/{chunk-FHKNG3UA.js → chunk-XUDTFI4M.js} +2 -2
  75. package/dist/{chunk-AXV7NFFJ.js → chunk-YHCYKUA3.js} +14 -10
  76. package/dist/chunk-YHCYKUA3.js.map +1 -0
  77. package/dist/commands/build/marketplace.js +4 -4
  78. package/dist/commands/build/plugins.js +9 -7
  79. package/dist/commands/build/plugins.js.map +1 -1
  80. package/dist/commands/build/stack.js +13 -10
  81. package/dist/commands/build/stack.js.map +1 -1
  82. package/dist/commands/compile.js +45 -72
  83. package/dist/commands/compile.js.map +1 -1
  84. package/dist/commands/config/index.js +7 -5
  85. package/dist/commands/config/index.js.map +1 -1
  86. package/dist/commands/config/path.js +8 -6
  87. package/dist/commands/config/path.js.map +1 -1
  88. package/dist/commands/config/show.js +7 -5
  89. package/dist/commands/diff.js +9 -7
  90. package/dist/commands/diff.js.map +1 -1
  91. package/dist/commands/doctor.js +20 -16
  92. package/dist/commands/doctor.js.map +1 -1
  93. package/dist/commands/edit.js +196 -94
  94. package/dist/commands/edit.js.map +1 -1
  95. package/dist/commands/eject.js +20 -41
  96. package/dist/commands/eject.js.map +1 -1
  97. package/dist/commands/import/skill.js +10 -18
  98. package/dist/commands/import/skill.js.map +1 -1
  99. package/dist/commands/info.js +21 -20
  100. package/dist/commands/info.js.map +1 -1
  101. package/dist/commands/init.js +41 -435
  102. package/dist/commands/init.js.map +1 -1
  103. package/dist/commands/list.js +8 -6
  104. package/dist/commands/list.js.map +1 -1
  105. package/dist/commands/new/agent.js +28 -15
  106. package/dist/commands/new/agent.js.map +1 -1
  107. package/dist/commands/new/marketplace.js +67 -31
  108. package/dist/commands/new/marketplace.js.map +1 -1
  109. package/dist/commands/new/skill.js +17 -208
  110. package/dist/commands/new/skill.js.map +1 -1
  111. package/dist/commands/outdated.js +16 -10
  112. package/dist/commands/outdated.js.map +1 -1
  113. package/dist/commands/search.js +45 -35
  114. package/dist/commands/search.js.map +1 -1
  115. package/dist/commands/uninstall.js +93 -123
  116. package/dist/commands/uninstall.js.map +1 -1
  117. package/dist/commands/update.js +11 -9
  118. package/dist/commands/update.js.map +1 -1
  119. package/dist/commands/validate.js +42 -267
  120. package/dist/commands/validate.js.map +1 -1
  121. package/dist/components/common/confirm.test.js +4 -4
  122. package/dist/components/skill-search/skill-search.js +3 -3
  123. package/dist/components/wizard/category-grid.js +3 -2
  124. package/dist/components/wizard/category-grid.test.js +113 -59
  125. package/dist/components/wizard/category-grid.test.js.map +1 -1
  126. package/dist/components/wizard/checkbox-grid.js +5 -3
  127. package/dist/components/wizard/checkbox-grid.test.js +6 -5
  128. package/dist/components/wizard/checkbox-grid.test.js.map +1 -1
  129. package/dist/components/wizard/domain-selection.js +12 -9
  130. package/dist/components/wizard/help-modal.js +2 -2
  131. package/dist/components/wizard/menu-item.js +1 -1
  132. package/dist/components/wizard/search-modal.js +2 -2
  133. package/dist/components/wizard/search-modal.test.js +3 -3
  134. package/dist/components/wizard/search-modal.test.js.map +1 -1
  135. package/dist/components/wizard/section-progress.js +2 -2
  136. package/dist/components/wizard/section-progress.test.js +4 -4
  137. package/dist/components/wizard/section-progress.test.js.map +1 -1
  138. package/dist/components/wizard/selection-card.js +2 -2
  139. package/dist/components/wizard/source-grid.js +4 -3
  140. package/dist/components/wizard/source-grid.test.js +5 -4
  141. package/dist/components/wizard/source-grid.test.js.map +1 -1
  142. package/dist/components/wizard/stack-selection.js +9 -8
  143. package/dist/components/wizard/step-agents.js +11 -8
  144. package/dist/components/wizard/step-agents.test.js +20 -18
  145. package/dist/components/wizard/step-agents.test.js.map +1 -1
  146. package/dist/components/wizard/step-build.js +11 -8
  147. package/dist/components/wizard/step-build.test.js +18 -36
  148. package/dist/components/wizard/step-build.test.js.map +1 -1
  149. package/dist/components/wizard/step-confirm.js +4 -4
  150. package/dist/components/wizard/step-confirm.test.js +83 -23
  151. package/dist/components/wizard/step-confirm.test.js.map +1 -1
  152. package/dist/components/wizard/step-refine.js +2 -2
  153. package/dist/components/wizard/step-refine.test.js +3 -3
  154. package/dist/components/wizard/step-settings.js +9 -5
  155. package/dist/components/wizard/step-settings.test.js +13 -9
  156. package/dist/components/wizard/step-settings.test.js.map +1 -1
  157. package/dist/components/wizard/step-sources.js +13 -10
  158. package/dist/components/wizard/step-sources.test.js +19 -16
  159. package/dist/components/wizard/step-sources.test.js.map +1 -1
  160. package/dist/components/wizard/step-stack.js +16 -12
  161. package/dist/components/wizard/step-stack.test.js +18 -14
  162. package/dist/components/wizard/step-stack.test.js.map +1 -1
  163. package/dist/components/wizard/view-title.js +2 -2
  164. package/dist/components/wizard/wizard-layout.js +10 -8
  165. package/dist/components/wizard/wizard-tabs.js +2 -2
  166. package/dist/components/wizard/wizard-tabs.test.js +2 -2
  167. package/dist/components/wizard/wizard.js +29 -25
  168. package/dist/config-exports.js +20 -0
  169. package/dist/config-exports.js.map +1 -0
  170. package/dist/hooks/init.js +56 -3
  171. package/dist/hooks/init.js.map +1 -1
  172. package/dist/loader-2O32KKAQ.js +19 -0
  173. package/dist/source-loader-A6B3NDI4.js +16 -0
  174. package/dist/source-loader-A6B3NDI4.js.map +1 -0
  175. package/dist/source-manager-Q7IQSGIX.js +18 -0
  176. package/dist/source-manager-Q7IQSGIX.js.map +1 -0
  177. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
  178. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
  179. package/dist/src/agents/meta/agent-summoner/examples.md +2 -2
  180. package/dist/src/agents/meta/agent-summoner/output-format.md +1 -1
  181. package/dist/src/agents/meta/agent-summoner/workflow.md +8 -10
  182. package/{src/agents/meta/documentor/agent.yaml → dist/src/agents/meta/documentor/metadata.yaml} +1 -0
  183. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  184. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  185. package/dist/src/agents/meta/skill-summoner/intro.md +1 -1
  186. package/dist/src/agents/meta/skill-summoner/output-format.md +3 -3
  187. package/dist/src/agents/meta/skill-summoner/workflow.md +8 -8
  188. package/dist/stores/wizard-store.js +6 -5
  189. package/dist/stores/wizard-store.test.js +367 -75
  190. package/dist/stores/wizard-store.test.js.map +1 -1
  191. package/package.json +5 -1
  192. package/src/agents/meta/agent-summoner/critical-reminders.md +1 -1
  193. package/src/agents/meta/agent-summoner/critical-requirements.md +1 -1
  194. package/src/agents/meta/agent-summoner/examples.md +2 -2
  195. package/src/agents/meta/agent-summoner/output-format.md +1 -1
  196. package/src/agents/meta/agent-summoner/workflow.md +8 -10
  197. package/{dist/src/agents/meta/documentor/agent.yaml → src/agents/meta/documentor/metadata.yaml} +1 -0
  198. package/src/agents/meta/skill-summoner/critical-reminders.md +2 -2
  199. package/src/agents/meta/skill-summoner/critical-requirements.md +1 -1
  200. package/src/agents/meta/skill-summoner/intro.md +1 -1
  201. package/src/agents/meta/skill-summoner/output-format.md +3 -3
  202. package/src/agents/meta/skill-summoner/workflow.md +8 -8
  203. package/src/schemas/agent.schema.json +1 -1
  204. package/src/schemas/metadata.schema.json +6 -0
  205. package/src/schemas/project-config.schema.json +0 -3
  206. package/src/schemas/stacks.schema.json +1 -1
  207. package/config/skill-categories.yaml +0 -344
  208. package/config/skill-rules.yaml +0 -740
  209. package/config/stacks.yaml +0 -1865
  210. package/dist/chunk-2BVZOYJP.js.map +0 -1
  211. package/dist/chunk-2DNDAXF6.js.map +0 -1
  212. package/dist/chunk-5MN5S3DV.js.map +0 -1
  213. package/dist/chunk-5O6GKXAN.js.map +0 -1
  214. package/dist/chunk-7IAKVZL5.js.map +0 -1
  215. package/dist/chunk-AMNCCZSG.js.map +0 -1
  216. package/dist/chunk-AXV7NFFJ.js.map +0 -1
  217. package/dist/chunk-AXZNJ5PN.js +0 -99
  218. package/dist/chunk-AXZNJ5PN.js.map +0 -1
  219. package/dist/chunk-C7DLY64D.js +0 -115
  220. package/dist/chunk-C7DLY64D.js.map +0 -1
  221. package/dist/chunk-F7KTUFGU.js.map +0 -1
  222. package/dist/chunk-FPTUCWBY.js.map +0 -1
  223. package/dist/chunk-IS7GP6XC.js.map +0 -1
  224. package/dist/chunk-KPJJOLAQ.js.map +0 -1
  225. package/dist/chunk-LESHL6SM.js.map +0 -1
  226. package/dist/chunk-NJVJ7VO5.js.map +0 -1
  227. package/dist/chunk-OHDEJEYB.js.map +0 -1
  228. package/dist/chunk-OTTITQ7C.js.map +0 -1
  229. package/dist/chunk-P2SFRDWI.js.map +0 -1
  230. package/dist/chunk-PY2XZUBF.js +0 -29
  231. package/dist/chunk-PY2XZUBF.js.map +0 -1
  232. package/dist/chunk-SPVSWDFM.js.map +0 -1
  233. package/dist/chunk-VBAAATPU.js.map +0 -1
  234. package/dist/chunk-WSGKCBY5.js.map +0 -1
  235. package/dist/chunk-X3SZIBVW.js.map +0 -1
  236. package/dist/chunk-YDASDMTH.js +0 -183
  237. package/dist/chunk-YDASDMTH.js.map +0 -1
  238. package/dist/chunk-YMUWTPOM.js.map +0 -1
  239. package/dist/chunk-YZTWZVGX.js.map +0 -1
  240. package/dist/commands/config/get.js +0 -61
  241. package/dist/commands/config/get.js.map +0 -1
  242. package/dist/commands/config/set-project.js +0 -61
  243. package/dist/commands/config/set-project.js.map +0 -1
  244. package/dist/commands/config/unset-project.js +0 -57
  245. package/dist/commands/config/unset-project.js.map +0 -1
  246. package/dist/config/skill-categories.yaml +0 -344
  247. package/dist/config/skill-rules.yaml +0 -740
  248. package/dist/config/stacks.yaml +0 -1865
  249. package/dist/source-manager-Y7R6WPOW.js +0 -16
  250. package/dist/src/agents/migration/cli-migrator/agent.yaml +0 -12
  251. package/dist/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
  252. package/dist/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
  253. package/dist/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
  254. package/dist/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
  255. package/dist/src/agents/migration/cli-migrator/intro.md +0 -15
  256. package/dist/src/agents/migration/cli-migrator/output-format.md +0 -164
  257. package/dist/src/agents/migration/cli-migrator/workflow.md +0 -230
  258. package/src/agents/migration/cli-migrator/agent.yaml +0 -12
  259. package/src/agents/migration/cli-migrator/anti-patterns.md +0 -158
  260. package/src/agents/migration/cli-migrator/conversion-mappings.md +0 -63
  261. package/src/agents/migration/cli-migrator/critical-reminders.md +0 -17
  262. package/src/agents/migration/cli-migrator/critical-requirements.md +0 -13
  263. package/src/agents/migration/cli-migrator/intro.md +0 -15
  264. package/src/agents/migration/cli-migrator/output-format.md +0 -164
  265. package/src/agents/migration/cli-migrator/workflow.md +0 -230
  266. /package/dist/{chunk-I52THVF6.js.map → chunk-AJJJE7F7.js.map} +0 -0
  267. /package/dist/{chunk-ZML3OCYA.js.map → chunk-AX3SZZWA.js.map} +0 -0
  268. /package/dist/{chunk-W62XVWXB.js.map → chunk-C577AJE7.js.map} +0 -0
  269. /package/dist/{chunk-G5OZQ376.js.map → chunk-K6OLORQL.js.map} +0 -0
  270. /package/dist/{chunk-U2AEK4ZL.js.map → chunk-MGNYPVOJ.js.map} +0 -0
  271. /package/dist/{chunk-37QYD33C.js.map → chunk-MMFQNJPE.js.map} +0 -0
  272. /package/dist/{chunk-34BP5BC4.js.map → chunk-SDKCQXWE.js.map} +0 -0
  273. /package/dist/{chunk-FHKNG3UA.js.map → chunk-XUDTFI4M.js.map} +0 -0
  274. /package/dist/{source-manager-Y7R6WPOW.js.map → loader-2O32KKAQ.js.map} +0 -0
  275. /package/dist/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
  276. /package/dist/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
  277. /package/dist/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
  278. /package/dist/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
  279. /package/dist/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
  280. /package/dist/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
  281. /package/dist/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
  282. /package/dist/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
  283. /package/dist/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
  284. /package/dist/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
  285. /package/dist/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
  286. /package/dist/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
  287. /package/dist/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
  288. /package/dist/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
  289. /package/dist/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
  290. /package/dist/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +0 -0
  291. /package/src/agents/developer/api-developer/{agent.yaml → metadata.yaml} +0 -0
  292. /package/src/agents/developer/cli-developer/{agent.yaml → metadata.yaml} +0 -0
  293. /package/src/agents/developer/web-architecture/{agent.yaml → metadata.yaml} +0 -0
  294. /package/src/agents/developer/web-developer/{agent.yaml → metadata.yaml} +0 -0
  295. /package/src/agents/meta/agent-summoner/{agent.yaml → metadata.yaml} +0 -0
  296. /package/src/agents/meta/skill-summoner/{agent.yaml → metadata.yaml} +0 -0
  297. /package/src/agents/pattern/pattern-scout/{agent.yaml → metadata.yaml} +0 -0
  298. /package/src/agents/pattern/web-pattern-critique/{agent.yaml → metadata.yaml} +0 -0
  299. /package/src/agents/planning/web-pm/{agent.yaml → metadata.yaml} +0 -0
  300. /package/src/agents/researcher/api-researcher/{agent.yaml → metadata.yaml} +0 -0
  301. /package/src/agents/researcher/web-researcher/{agent.yaml → metadata.yaml} +0 -0
  302. /package/src/agents/reviewer/api-reviewer/{agent.yaml → metadata.yaml} +0 -0
  303. /package/src/agents/reviewer/cli-reviewer/{agent.yaml → metadata.yaml} +0 -0
  304. /package/src/agents/reviewer/web-reviewer/{agent.yaml → metadata.yaml} +0 -0
  305. /package/src/agents/tester/cli-tester/{agent.yaml → metadata.yaml} +0 -0
  306. /package/src/agents/tester/web-tester/{agent.yaml → metadata.yaml} +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  getErrorMessage
4
- } from "./chunk-YMUWTPOM.js";
4
+ } from "./chunk-LWXRUR6B.js";
5
5
  import {
6
6
  init_esm_shims
7
7
  } from "./chunk-DHET7RCE.js";
@@ -21,10 +21,6 @@ init_esm_shims();
21
21
  import { Command, Flags } from "@oclif/core";
22
22
  var BaseCommand = class extends Command {
23
23
  static baseFlags = {
24
- "dry-run": Flags.boolean({
25
- description: "Preview operations without executing",
26
- default: false
27
- }),
28
24
  source: Flags.string({
29
25
  char: "s",
30
26
  description: "Skills source path or URL",
@@ -53,4 +49,4 @@ export {
53
49
  EXIT_CODES,
54
50
  BaseCommand
55
51
  };
56
- //# sourceMappingURL=chunk-2BVZOYJP.js.map
52
+ //# sourceMappingURL=chunk-VR3CDXDT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/lib/exit-codes.ts","../src/cli/base-command.ts"],"sourcesContent":["export const EXIT_CODES = {\n SUCCESS: 0,\n ERROR: 1,\n INVALID_ARGS: 2,\n NETWORK_ERROR: 3,\n CANCELLED: 4,\n} as const;\n","import { Command, Flags } from \"@oclif/core\";\n\nimport { getErrorMessage } from \"./utils/errors.js\";\nimport { EXIT_CODES } from \"./lib/exit-codes.js\";\nimport type { ResolvedConfig } from \"./lib/configuration/index.js\";\n\n/** Narrow interface for the sourceConfig we attach to oclif's Config in the init hook. */\nexport interface ConfigWithSource {\n sourceConfig?: ResolvedConfig;\n}\n\nexport abstract class BaseCommand extends Command {\n static baseFlags = {\n source: Flags.string({\n char: \"s\",\n description: \"Skills source path or URL\",\n required: false,\n }),\n };\n\n public get sourceConfig(): ResolvedConfig | undefined {\n // Boundary cast: oclif Config doesn't declare sourceConfig; we attach it in the init hook\n return (this.config as unknown as ConfigWithSource).sourceConfig;\n }\n\n protected handleError(error: unknown): never {\n const message = getErrorMessage(error);\n this.error(message, { exit: EXIT_CODES.ERROR });\n }\n\n protected logSuccess(message: string): void {\n this.log(`✓ ${message}`);\n }\n\n protected logWarning(message: string): void {\n this.warn(message);\n }\n\n protected logInfo(message: string): void {\n this.log(message);\n }\n}\n"],"mappings":";;;;;;;;;AAAA;AAAO,IAAM,aAAa;AAAA,EACxB,SAAS;AAAA,EACT,OAAO;AAAA,EACP,cAAc;AAAA,EACd,eAAe;AAAA,EACf,WAAW;AACb;;;ACNA;AAAA,SAAS,SAAS,aAAa;AAWxB,IAAe,cAAf,cAAmC,QAAQ;AAAA,EAChD,OAAO,YAAY;AAAA,IACjB,QAAQ,MAAM,OAAO;AAAA,MACnB,MAAM;AAAA,MACN,aAAa;AAAA,MACb,UAAU;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EAEA,IAAW,eAA2C;AAEpD,WAAQ,KAAK,OAAuC;AAAA,EACtD;AAAA,EAEU,YAAY,OAAuB;AAC3C,UAAM,UAAU,gBAAgB,KAAK;AACrC,SAAK,MAAM,SAAS,EAAE,MAAM,WAAW,MAAM,CAAC;AAAA,EAChD;AAAA,EAEU,WAAW,SAAuB;AAC1C,SAAK,IAAI,UAAK,OAAO,EAAE;AAAA,EACzB;AAAA,EAEU,WAAW,SAAuB;AAC1C,SAAK,KAAK,OAAO;AAAA,EACnB;AAAA,EAEU,QAAQ,SAAuB;AACvC,SAAK,IAAI,OAAO;AAAA,EAClB;AACF;","names":[]}
@@ -1,21 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
- getSkillDisplayLabel
4
- } from "./chunk-C7DLY64D.js";
5
- import {
3
+ deriveInstallMode,
4
+ getAvailableSkills,
6
5
  resolveAlias
7
- } from "./chunk-P2SFRDWI.js";
6
+ } from "./chunk-TZXYBG3R.js";
8
7
  import {
9
8
  typedEntries,
10
9
  typedKeys
11
10
  } from "./chunk-T4EXUIBY.js";
12
11
  import {
13
12
  warn
14
- } from "./chunk-YMUWTPOM.js";
13
+ } from "./chunk-LWXRUR6B.js";
15
14
  import {
15
+ BUILT_IN_DOMAIN_ORDER,
16
16
  DEFAULT_PRESELECTED_SKILLS,
17
- DEFAULT_PUBLIC_SOURCE_NAME
18
- } from "./chunk-LESHL6SM.js";
17
+ DEFAULT_PUBLIC_SOURCE_NAME,
18
+ SOURCE_DISPLAY_NAMES
19
+ } from "./chunk-6OWHQ7HM.js";
19
20
  import {
20
21
  init_esm_shims
21
22
  } from "./chunk-DHET7RCE.js";
@@ -24,13 +25,118 @@ import {
24
25
  init_esm_shims();
25
26
  import { unique } from "remeda";
26
27
  import { create } from "zustand";
28
+
29
+ // src/cli/lib/wizard/build-step-logic.ts
30
+ init_esm_shims();
31
+ import { sortBy } from "remeda";
32
+ var FRAMEWORK_CATEGORY_ID = "web-framework";
33
+ var WEB_DOMAIN_ID = "web";
34
+ function validateBuildStep(categories, selections) {
35
+ for (const category of categories) {
36
+ if (category.required) {
37
+ const categorySelections = selections[category.id] || [];
38
+ if (categorySelections.length === 0) {
39
+ return {
40
+ valid: false,
41
+ message: `Select at least one skill from the ${category.displayName} category. Use arrow keys to navigate, then SPACE to select.`
42
+ };
43
+ }
44
+ }
45
+ }
46
+ return { valid: true };
47
+ }
48
+ function computeOptionState(skill) {
49
+ if (skill.discouraged) {
50
+ return "discouraged";
51
+ }
52
+ if (skill.recommended) {
53
+ return "recommended";
54
+ }
55
+ return "normal";
56
+ }
57
+ function getSkillDisplayLabel(skill) {
58
+ return skill.displayName;
59
+ }
60
+ function getStateReason(skill) {
61
+ if (skill.discouraged && skill.discouragedReason) {
62
+ return skill.discouragedReason;
63
+ }
64
+ if (skill.recommended && skill.recommendedReason) {
65
+ return skill.recommendedReason;
66
+ }
67
+ return void 0;
68
+ }
69
+ function isFrameworkSelected(selections) {
70
+ const frameworkSelections = selections[FRAMEWORK_CATEGORY_ID] ?? [];
71
+ return frameworkSelections.length > 0;
72
+ }
73
+ function getSelectedFrameworks(selections, matrix) {
74
+ const frameworkSelections = selections[FRAMEWORK_CATEGORY_ID] ?? [];
75
+ return frameworkSelections.map((alias) => resolveAlias(alias, matrix));
76
+ }
77
+ function isCompatibleWithSelectedFrameworks(skillId, selectedFrameworkIds, matrix) {
78
+ const skill = matrix.skills[skillId];
79
+ if (!skill) return false;
80
+ if (skill.compatibleWith.length === 0) {
81
+ return true;
82
+ }
83
+ return selectedFrameworkIds.some((frameworkId) => skill.compatibleWith.includes(frameworkId));
84
+ }
85
+ function buildCategoriesForDomain(domain, allSelections, matrix, selections, installedSkillIds, skillConfigs) {
86
+ const frameworkSource = selections;
87
+ const frameworkSelected = isFrameworkSelected(frameworkSource);
88
+ const selectedFrameworkIds = frameworkSelected ? getSelectedFrameworks(frameworkSource, matrix) : [];
89
+ const categories = sortBy(
90
+ Object.values(matrix.categories).filter(
91
+ (cat) => cat.domain === domain
92
+ ),
93
+ (cat) => cat.order ?? 0
94
+ );
95
+ const categoryRows = categories.map((cat) => {
96
+ const skillOptions = getAvailableSkills(cat.id, allSelections, matrix);
97
+ const useFrameworkFilter = domain === WEB_DOMAIN_ID && cat.id !== FRAMEWORK_CATEGORY_ID && frameworkSelected;
98
+ const filteredSkillOptions = useFrameworkFilter ? skillOptions.filter(
99
+ (skill) => isCompatibleWithSelectedFrameworks(skill.id, selectedFrameworkIds, matrix)
100
+ ) : skillOptions;
101
+ const options = filteredSkillOptions.map((skill) => ({
102
+ id: skill.id,
103
+ label: getSkillDisplayLabel(skill),
104
+ state: computeOptionState(skill),
105
+ stateReason: getStateReason(skill),
106
+ selected: skill.selected,
107
+ local: matrix.skills[skill.id]?.local,
108
+ installed: installedSkillIds?.includes(skill.id) || false,
109
+ scope: skillConfigs?.find((sc) => sc.id === skill.id)?.scope
110
+ }));
111
+ return {
112
+ id: cat.id,
113
+ displayName: cat.displayName,
114
+ required: cat.required ?? false,
115
+ exclusive: cat.exclusive ?? true,
116
+ options
117
+ };
118
+ });
119
+ return categoryRows.filter((row) => row.options.length > 0);
120
+ }
121
+
122
+ // src/cli/stores/wizard-store.ts
27
123
  var BUILT_IN_DOMAINS = ["web", "api", "cli", "mobile", "shared"];
124
+ function createDefaultSkillConfig(id) {
125
+ return { id, scope: "project", source: DEFAULT_PUBLIC_SOURCE_NAME };
126
+ }
28
127
  function getAllDomainsFromCategories(categories) {
29
128
  const allDomains = unique(
30
129
  Object.values(categories).map((cat) => cat?.domain).filter((d) => d != null)
31
130
  );
32
131
  return [...BUILT_IN_DOMAINS, ...allDomains.filter((d) => !BUILT_IN_DOMAINS.includes(d))];
33
132
  }
133
+ function sortDomainsCanonically(domains) {
134
+ const builtInSet = new Set(BUILT_IN_DOMAIN_ORDER);
135
+ return [
136
+ ...domains.filter((d) => !builtInSet.has(d)).sort(),
137
+ ...BUILT_IN_DOMAIN_ORDER.filter((d) => domains.includes(d))
138
+ ];
139
+ }
34
140
  var DOMAIN_AGENTS = {
35
141
  web: [
36
142
  "web-developer",
@@ -41,7 +147,7 @@ var DOMAIN_AGENTS = {
41
147
  "web-architecture"
42
148
  ],
43
149
  api: ["api-developer", "api-reviewer", "api-researcher"],
44
- cli: ["cli-developer", "cli-tester", "cli-reviewer", "cli-migrator"]
150
+ cli: ["cli-developer", "cli-tester", "cli-reviewer"]
45
151
  };
46
152
  var SOURCE_SORT_TIER_LOCAL = 1;
47
153
  var SOURCE_SORT_TIER_SCOPED = 2;
@@ -53,9 +159,6 @@ function getSourceSortTier(source) {
53
159
  if (source.type === "public") return SOURCE_SORT_TIER_PUBLIC;
54
160
  return SOURCE_SORT_TIER_THIRD_PARTY;
55
161
  }
56
- var SOURCE_DISPLAY_NAMES = {
57
- local: "Local"
58
- };
59
162
  function formatSourceLabel(source) {
60
163
  const displayName = SOURCE_DISPLAY_NAMES[source.name] ?? source.name;
61
164
  const prefix = source.installed ? "\u2713 " : "";
@@ -89,11 +192,11 @@ function buildBoundSkillOptions(boundSkills, alias, selectedSource) {
89
192
  }));
90
193
  }
91
194
  function getSkillAlias(skillId, matrix) {
92
- const displayName = matrix.displayNames?.[skillId];
93
- if (displayName) return displayName;
195
+ const slug = matrix.slugMap.idToSlug[skillId];
196
+ if (slug) return slug;
94
197
  const segments = skillId.split("-");
95
198
  const fallback = segments[segments.length - 1] || skillId;
96
- warn(`No display name found for skill '${skillId}', using fallback alias '${fallback}'`);
199
+ warn(`No slug found for skill '${skillId}', using fallback alias '${fallback}'`);
97
200
  return fallback;
98
201
  }
99
202
  var createInitialState = () => ({
@@ -104,16 +207,21 @@ var createInitialState = () => ({
104
207
  selectedDomains: [],
105
208
  currentDomainIndex: 0,
106
209
  domainSelections: {},
210
+ /** Snapshot of domainSelections from populateFromStack/populateFromSkillIds, used to restore on domain re-toggle */
211
+ _stackDomainSelections: null,
107
212
  showLabels: false,
108
- expertMode: false,
109
- installMode: "local",
110
- sourceSelections: {},
213
+ skillConfigs: [],
214
+ focusedSkillId: null,
111
215
  customizeSources: false,
112
216
  showSettings: false,
113
217
  showHelp: false,
114
218
  enabledSources: {},
115
219
  selectedAgents: [],
220
+ agentConfigs: [],
221
+ focusedAgentId: null,
116
222
  boundSkills: [],
223
+ lockedSkillIds: [],
224
+ lockedAgentNames: [],
117
225
  history: []
118
226
  });
119
227
  var useWizardStore = create((set, get) => ({
@@ -128,6 +236,7 @@ var useWizardStore = create((set, get) => ({
128
236
  populateFromStack: (stack, categories) => set(() => {
129
237
  const domainSelections = {};
130
238
  const domains = /* @__PURE__ */ new Set();
239
+ const allSkillIds = /* @__PURE__ */ new Set();
131
240
  for (const agentConfig of Object.values(stack.agents)) {
132
241
  for (const [subcat, assignments] of typedEntries(
133
242
  agentConfig
@@ -147,17 +256,22 @@ var useWizardStore = create((set, get) => ({
147
256
  for (const assignment of assignments) {
148
257
  if (!domainSelections[domain][subcat].includes(assignment.id)) {
149
258
  domainSelections[domain][subcat].push(assignment.id);
259
+ allSkillIds.add(assignment.id);
150
260
  }
151
261
  }
152
262
  }
153
263
  }
264
+ const skillConfigs = [...allSkillIds].map(createDefaultSkillConfig);
154
265
  return {
155
266
  domainSelections,
156
- selectedDomains: getAllDomainsFromCategories(categories)
267
+ _stackDomainSelections: structuredClone(domainSelections),
268
+ selectedDomains: sortDomainsCanonically(getAllDomainsFromCategories(categories)),
269
+ skillConfigs
157
270
  };
158
271
  }),
159
- populateFromSkillIds: (skillIds, skills, categories) => set(() => {
272
+ populateFromSkillIds: (skillIds, skills, categories, savedConfigs) => set(() => {
160
273
  const domainSelections = {};
274
+ const resolvedSkillIds = [];
161
275
  let skippedCount = 0;
162
276
  for (const skillId of skillIds) {
163
277
  const resolved = resolveSkillForPopulation(skillId, skills, categories);
@@ -170,29 +284,72 @@ var useWizardStore = create((set, get) => ({
170
284
  if (!domainSelections[domain][subcat]) domainSelections[domain][subcat] = [];
171
285
  if (!domainSelections[domain][subcat].includes(techId)) {
172
286
  domainSelections[domain][subcat].push(techId);
287
+ resolvedSkillIds.push(techId);
173
288
  }
174
289
  }
175
290
  if (skippedCount > 0) {
176
291
  warn(`${skippedCount} installed skill(s) could not be resolved and were skipped`);
177
292
  }
178
- const selectedDomains = typedKeys(domainSelections);
179
- return { domainSelections, selectedDomains };
293
+ const selectedDomains = sortDomainsCanonically(typedKeys(domainSelections));
294
+ const skillConfigs = resolvedSkillIds.map((id) => {
295
+ const saved = savedConfigs?.find((sc) => sc.id === id);
296
+ return {
297
+ id,
298
+ scope: saved?.scope ?? "project",
299
+ source: saved?.source ?? DEFAULT_PUBLIC_SOURCE_NAME
300
+ };
301
+ });
302
+ return {
303
+ domainSelections,
304
+ _stackDomainSelections: structuredClone(domainSelections),
305
+ selectedDomains,
306
+ skillConfigs
307
+ };
180
308
  }),
181
309
  toggleDomain: (domain) => set((state) => {
182
310
  const isSelected = state.selectedDomains.includes(domain);
183
311
  if (isSelected) {
184
312
  const { [domain]: _removed, ...remainingSelections } = state.domainSelections;
313
+ const removedSkillIds = /* @__PURE__ */ new Set();
314
+ if (_removed) {
315
+ for (const skills of Object.values(_removed)) {
316
+ if (skills) {
317
+ for (const id of skills) {
318
+ removedSkillIds.add(id);
319
+ }
320
+ }
321
+ }
322
+ }
185
323
  return {
186
324
  selectedDomains: state.selectedDomains.filter((d) => d !== domain),
187
- domainSelections: remainingSelections
325
+ domainSelections: remainingSelections,
326
+ skillConfigs: state.skillConfigs.filter((sc) => !removedSkillIds.has(sc.id))
327
+ };
328
+ }
329
+ const stackSelections = state._stackDomainSelections?.[domain];
330
+ if (stackSelections) {
331
+ const restoredSkillIds = [];
332
+ for (const skills of Object.values(stackSelections)) {
333
+ if (skills) restoredSkillIds.push(...skills);
334
+ }
335
+ const existingIds = new Set(state.skillConfigs.map((sc) => sc.id));
336
+ const newConfigs = restoredSkillIds.filter((id) => !existingIds.has(id)).map(createDefaultSkillConfig);
337
+ return {
338
+ selectedDomains: sortDomainsCanonically([...state.selectedDomains, domain]),
339
+ domainSelections: {
340
+ ...state.domainSelections,
341
+ [domain]: structuredClone(stackSelections)
342
+ },
343
+ skillConfigs: [...state.skillConfigs, ...newConfigs]
188
344
  };
189
345
  }
190
346
  return {
191
- selectedDomains: [...state.selectedDomains, domain]
347
+ selectedDomains: sortDomainsCanonically([...state.selectedDomains, domain])
192
348
  };
193
349
  }),
194
- toggleTechnology: (domain, subcategory, technology, exclusive) => set((state) => {
195
- const currentSelections = state.domainSelections[domain]?.[subcategory] || [];
350
+ toggleTechnology: (domain, category, technology, exclusive) => set((state) => {
351
+ if (state.lockedSkillIds.includes(technology)) return state;
352
+ const currentSelections = state.domainSelections[domain]?.[category] || [];
196
353
  const isSelected = currentSelections.includes(technology);
197
354
  let newSelections;
198
355
  if (exclusive) {
@@ -200,12 +357,21 @@ var useWizardStore = create((set, get) => ({
200
357
  } else {
201
358
  newSelections = isSelected ? currentSelections.filter((t) => t !== technology) : [...currentSelections, technology];
202
359
  }
360
+ const removed = currentSelections.filter((id) => !newSelections.includes(id));
361
+ const added = newSelections.filter((id) => !currentSelections.includes(id));
362
+ let updatedConfigs = state.skillConfigs.filter((sc) => !removed.includes(sc.id));
363
+ for (const id of added) {
364
+ if (!updatedConfigs.some((sc) => sc.id === id)) {
365
+ updatedConfigs = [...updatedConfigs, createDefaultSkillConfig(id)];
366
+ }
367
+ }
203
368
  return {
369
+ skillConfigs: updatedConfigs,
204
370
  domainSelections: {
205
371
  ...state.domainSelections,
206
372
  [domain]: {
207
373
  ...state.domainSelections[domain],
208
- [subcategory]: newSelections
374
+ [category]: newSelections
209
375
  }
210
376
  }
211
377
  };
@@ -231,10 +397,22 @@ var useWizardStore = create((set, get) => ({
231
397
  return false;
232
398
  },
233
399
  toggleShowLabels: () => set((state) => ({ showLabels: !state.showLabels })),
234
- toggleExpertMode: () => set((state) => ({ expertMode: !state.expertMode })),
235
- toggleInstallMode: () => set((state) => ({
236
- installMode: state.installMode === "plugin" ? "local" : "plugin"
400
+ deriveInstallMode: () => {
401
+ const { skillConfigs } = get();
402
+ return deriveInstallMode(skillConfigs);
403
+ },
404
+ toggleSkillScope: (skillId) => set((state) => {
405
+ if (state.lockedSkillIds.includes(skillId)) return state;
406
+ return {
407
+ skillConfigs: state.skillConfigs.map(
408
+ (sc) => sc.id === skillId ? { ...sc, scope: sc.scope === "project" ? "global" : "project" } : sc
409
+ )
410
+ };
411
+ }),
412
+ setSkillSource: (skillId, source) => set((state) => ({
413
+ skillConfigs: state.skillConfigs.map((sc) => sc.id === skillId ? { ...sc, source } : sc)
237
414
  })),
415
+ setFocusedSkillId: (id) => set({ focusedSkillId: id }),
238
416
  setSourceSelection: (skillId, sourceId) => set((state) => {
239
417
  if (!skillId) {
240
418
  warn("Ignoring setSourceSelection call with empty skillId");
@@ -245,7 +423,9 @@ var useWizardStore = create((set, get) => ({
245
423
  return state;
246
424
  }
247
425
  return {
248
- sourceSelections: { ...state.sourceSelections, [skillId]: sourceId }
426
+ skillConfigs: state.skillConfigs.map(
427
+ (sc) => sc.id === skillId ? { ...sc, source: sourceId } : sc
428
+ )
249
429
  };
250
430
  }),
251
431
  setCustomizeSources: (customize) => set({ customizeSources: customize }),
@@ -278,11 +458,28 @@ var useWizardStore = create((set, get) => ({
278
458
  };
279
459
  }),
280
460
  toggleAgent: (agent) => set((state) => {
461
+ if (state.lockedAgentNames.includes(agent)) return state;
281
462
  const isSelected = state.selectedAgents.includes(agent);
463
+ if (isSelected) {
464
+ return {
465
+ selectedAgents: state.selectedAgents.filter((a) => a !== agent),
466
+ agentConfigs: state.agentConfigs.filter((ac) => ac.name !== agent)
467
+ };
468
+ }
282
469
  return {
283
- selectedAgents: isSelected ? state.selectedAgents.filter((a) => a !== agent) : [...state.selectedAgents, agent]
470
+ selectedAgents: [...state.selectedAgents, agent],
471
+ agentConfigs: [...state.agentConfigs, { name: agent, scope: "project" }]
284
472
  };
285
473
  }),
474
+ toggleAgentScope: (agentName) => set((state) => {
475
+ if (state.lockedAgentNames.includes(agentName)) return state;
476
+ return {
477
+ agentConfigs: state.agentConfigs.map(
478
+ (ac) => ac.name === agentName ? { ...ac, scope: ac.scope === "project" ? "global" : "project" } : ac
479
+ )
480
+ };
481
+ }),
482
+ setFocusedAgentId: (id) => set({ focusedAgentId: id }),
286
483
  preselectAgentsFromDomains: () => set(() => {
287
484
  const agents = [];
288
485
  for (const domain of get().selectedDomains) {
@@ -291,7 +488,11 @@ var useWizardStore = create((set, get) => ({
291
488
  agents.push(...domainAgents);
292
489
  }
293
490
  }
294
- return { selectedAgents: agents.sort() };
491
+ const sorted = agents.sort();
492
+ return {
493
+ selectedAgents: sorted,
494
+ agentConfigs: sorted.map((name) => ({ name, scope: "project" }))
495
+ };
295
496
  }),
296
497
  reset: () => set(createInitialState()),
297
498
  getAllSelectedTechnologies: () => {
@@ -300,8 +501,8 @@ var useWizardStore = create((set, get) => ({
300
501
  for (const domain of typedKeys(state.domainSelections)) {
301
502
  const domainSel = state.domainSelections[domain];
302
503
  if (!domainSel) continue;
303
- for (const subcategory of typedKeys(domainSel)) {
304
- const techs = domainSel[subcategory];
504
+ for (const category of typedKeys(domainSel)) {
505
+ const techs = domainSel[category];
305
506
  if (techs) technologies.push(...techs);
306
507
  }
307
508
  }
@@ -314,8 +515,8 @@ var useWizardStore = create((set, get) => ({
314
515
  const domainSel = state.domainSelections[domain];
315
516
  if (!domainSel) continue;
316
517
  const techs = [];
317
- for (const subcategory of typedKeys(domainSel)) {
318
- const subTechs = domainSel[subcategory];
518
+ for (const category of typedKeys(domainSel)) {
519
+ const subTechs = domainSel[category];
319
520
  if (subTechs) techs.push(...subTechs);
320
521
  }
321
522
  if (techs.length > 0) {
@@ -365,14 +566,34 @@ var useWizardStore = create((set, get) => ({
365
566
  const state = get();
366
567
  return state.currentDomainIndex > 0;
367
568
  },
569
+ setAllSourcesLocal: () => {
570
+ set((state) => ({
571
+ skillConfigs: state.skillConfigs.map((sc) => ({ ...sc, source: "local" }))
572
+ }));
573
+ },
574
+ setAllSourcesPlugin: (matrix) => {
575
+ set((state) => ({
576
+ skillConfigs: state.skillConfigs.map((sc) => {
577
+ const skill = matrix.skills[sc.id];
578
+ if (skill?.availableSources) {
579
+ const marketplaceSource = skill.availableSources.find((s) => s.type !== "local");
580
+ if (marketplaceSource) {
581
+ return { ...sc, source: marketplaceSource.name };
582
+ }
583
+ }
584
+ return sc;
585
+ })
586
+ }));
587
+ },
368
588
  buildSourceRows: (matrix) => {
369
589
  const state = get();
370
590
  const selectedTechnologies = get().getAllSelectedTechnologies();
371
- const { sourceSelections, boundSkills } = state;
591
+ const { skillConfigs, boundSkills } = state;
372
592
  return selectedTechnologies.map((tech) => {
373
593
  const skillId = resolveAlias(tech, matrix);
374
594
  const skill = matrix.skills[skillId];
375
- const selectedSource = sourceSelections[skillId] || skill?.activeSource?.name || DEFAULT_PUBLIC_SOURCE_NAME;
595
+ const configEntry = skillConfigs.find((sc) => sc.id === skillId);
596
+ const selectedSource = configEntry?.source || skill?.activeSource?.name || DEFAULT_PUBLIC_SOURCE_NAME;
376
597
  const alias = getSkillAlias(skillId, matrix);
377
598
  const displayLabel = skill ? getSkillDisplayLabel(skill) : skillId;
378
599
  const sortedSources = [...skill?.availableSources || []].sort(
@@ -389,11 +610,19 @@ var useWizardStore = create((set, get) => ({
389
610
  })) : [
390
611
  {
391
612
  id: DEFAULT_PUBLIC_SOURCE_NAME,
392
- label: DEFAULT_PUBLIC_SOURCE_NAME,
613
+ label: formatSourceLabel({ name: DEFAULT_PUBLIC_SOURCE_NAME, installed: false }),
393
614
  selected: selectedSource === DEFAULT_PUBLIC_SOURCE_NAME,
394
615
  installed: false
395
616
  }
396
617
  ];
618
+ if (!options.some((o) => o.id === "local")) {
619
+ options.unshift({
620
+ id: "local",
621
+ label: formatSourceLabel({ name: "local", installed: false }),
622
+ selected: selectedSource === "local",
623
+ installed: false
624
+ });
625
+ }
397
626
  options.push(...buildBoundSkillOptions(boundSkills, alias, selectedSource));
398
627
  return { skillId, displayName: displayLabel, alias, options };
399
628
  });
@@ -401,6 +630,9 @@ var useWizardStore = create((set, get) => ({
401
630
  }));
402
631
 
403
632
  export {
633
+ validateBuildStep,
634
+ getSkillDisplayLabel,
635
+ buildCategoriesForDomain,
404
636
  useWizardStore
405
637
  };
406
- //# sourceMappingURL=chunk-KPJJOLAQ.js.map
638
+ //# sourceMappingURL=chunk-WF6RM73R.js.map