agents-inc 0.152.1 → 0.154.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 (442) hide show
  1. package/CHANGELOG.md +57 -0
  2. package/README.md +31 -35
  3. package/dist/{chunk-FVDKAVOL.js → chunk-2IMYK4WN.js} +18 -51
  4. package/dist/chunk-2IMYK4WN.js.map +1 -0
  5. package/dist/{chunk-PMM2MYMA.js → chunk-4VCWL2IG.js} +649 -357
  6. package/dist/chunk-4VCWL2IG.js.map +1 -0
  7. package/dist/{chunk-PZIZNMHK.js → chunk-5MFJ24VM.js} +237 -150
  8. package/dist/chunk-5MFJ24VM.js.map +1 -0
  9. package/dist/{chunk-KXYVJGJP.js → chunk-6CNRMCFM.js} +3 -2
  10. package/dist/{chunk-KXYVJGJP.js.map → chunk-6CNRMCFM.js.map} +1 -1
  11. package/dist/chunk-7VZV4O6B.js +40 -0
  12. package/dist/chunk-7VZV4O6B.js.map +1 -0
  13. package/dist/{chunk-SX5H6TSC.js → chunk-AKQ5QISO.js} +11 -8
  14. package/dist/chunk-AKQ5QISO.js.map +1 -0
  15. package/dist/{chunk-BNSRA6HL.js → chunk-AURY6RT6.js} +39 -176
  16. package/dist/chunk-AURY6RT6.js.map +1 -0
  17. package/dist/{chunk-LZ52XEPR.js → chunk-B66SC72V.js} +7 -6
  18. package/dist/chunk-B66SC72V.js.map +1 -0
  19. package/dist/{chunk-LASI35KT.js → chunk-BZ4CZBOM.js} +14 -28
  20. package/dist/chunk-BZ4CZBOM.js.map +1 -0
  21. package/dist/chunk-CBF4ZYV3.js +18540 -0
  22. package/dist/chunk-CBF4ZYV3.js.map +1 -0
  23. package/dist/{chunk-5GUOIJSG.js → chunk-CHNA5RVS.js} +3 -15
  24. package/dist/chunk-CHNA5RVS.js.map +1 -0
  25. package/dist/{chunk-LDP5ASDM.js → chunk-DRKSYJZ2.js} +2 -19
  26. package/dist/chunk-DRKSYJZ2.js.map +1 -0
  27. package/dist/chunk-FMYHWKGG.js +325 -0
  28. package/dist/chunk-FMYHWKGG.js.map +1 -0
  29. package/dist/{chunk-SKQWRUPX.js → chunk-GUDGCFSF.js} +59 -33
  30. package/dist/chunk-GUDGCFSF.js.map +1 -0
  31. package/dist/{chunk-WKTHWQKM.js → chunk-IPJOMAWC.js} +5070 -6305
  32. package/dist/chunk-IPJOMAWC.js.map +1 -0
  33. package/dist/chunk-IXEDSKMH.js +48 -0
  34. package/dist/chunk-IXEDSKMH.js.map +1 -0
  35. package/dist/{chunk-TUPYW2IQ.js → chunk-JC7DBPRD.js} +9 -12
  36. package/dist/chunk-JC7DBPRD.js.map +1 -0
  37. package/dist/{chunk-ZL7PFNHN.js → chunk-K3O3YQYG.js} +2 -2
  38. package/dist/{chunk-QRDTLVXG.js → chunk-LA3JPESW.js} +9 -22
  39. package/dist/chunk-LA3JPESW.js.map +1 -0
  40. package/dist/{chunk-MWG4VU64.js → chunk-MJFIO5SX.js} +50 -74
  41. package/dist/chunk-MJFIO5SX.js.map +1 -0
  42. package/dist/{chunk-L7SZXUBJ.js → chunk-NFH6SA62.js} +7 -6
  43. package/dist/{chunk-L7SZXUBJ.js.map → chunk-NFH6SA62.js.map} +1 -1
  44. package/dist/{chunk-GRVKW3CC.js → chunk-NKCY2ULI.js} +3 -2
  45. package/dist/{chunk-GRVKW3CC.js.map → chunk-NKCY2ULI.js.map} +1 -1
  46. package/dist/{chunk-TJJPWUMA.js → chunk-NSJ2S7R5.js} +3 -2
  47. package/dist/{chunk-TJJPWUMA.js.map → chunk-NSJ2S7R5.js.map} +1 -1
  48. package/dist/{chunk-Q2KG7UV3.js → chunk-OJJLYHM3.js} +2 -1
  49. package/dist/{chunk-Q2KG7UV3.js.map → chunk-OJJLYHM3.js.map} +1 -1
  50. package/dist/{chunk-MJ2KHG24.js → chunk-ONWEOS77.js} +6 -6
  51. package/dist/{chunk-MJ2KHG24.js.map → chunk-ONWEOS77.js.map} +1 -1
  52. package/dist/{chunk-NR3OZGL4.js → chunk-OZXAJNLA.js} +2 -1
  53. package/dist/{chunk-NR3OZGL4.js.map → chunk-OZXAJNLA.js.map} +1 -1
  54. package/dist/{chunk-QZZJFYUQ.js → chunk-PRJD5MMQ.js} +3 -3
  55. package/dist/chunk-PRJD5MMQ.js.map +1 -0
  56. package/dist/{chunk-MM7CTTAV.js → chunk-Q5FLW4JG.js} +2 -2
  57. package/dist/{chunk-MM7CTTAV.js.map → chunk-Q5FLW4JG.js.map} +1 -1
  58. package/dist/{chunk-5UWKOOIS.js → chunk-QQTYMW7N.js} +131 -209
  59. package/dist/chunk-QQTYMW7N.js.map +1 -0
  60. package/dist/{chunk-MVR3SYMN.js → chunk-QUDQTO3O.js} +4 -3
  61. package/dist/{chunk-MVR3SYMN.js.map → chunk-QUDQTO3O.js.map} +1 -1
  62. package/dist/{chunk-76ADG7LQ.js → chunk-R54KIGN2.js} +8 -22
  63. package/dist/chunk-R54KIGN2.js.map +1 -0
  64. package/dist/{chunk-XHUODHZ4.js → chunk-R7JV22QK.js} +22 -49
  65. package/dist/chunk-R7JV22QK.js.map +1 -0
  66. package/dist/{chunk-E5X6RJ4E.js → chunk-TUQF577Z.js} +56 -53
  67. package/dist/chunk-TUQF577Z.js.map +1 -0
  68. package/dist/{chunk-IHUY4M22.js → chunk-UW44KSYL.js} +4 -4
  69. package/dist/{chunk-DTSG5XZB.js → chunk-V3ENMW7G.js} +3 -3
  70. package/dist/chunk-VZRO7RYT.js +3694 -0
  71. package/dist/chunk-VZRO7RYT.js.map +1 -0
  72. package/dist/{chunk-MQ7FLIYS.js → chunk-WRRP47PY.js} +3 -2
  73. package/dist/{chunk-MQ7FLIYS.js.map → chunk-WRRP47PY.js.map} +1 -1
  74. package/dist/{chunk-RNJWAKMO.js → chunk-XGMOXMS4.js} +9 -8
  75. package/dist/chunk-XGMOXMS4.js.map +1 -0
  76. package/dist/{chunk-STMHDOZD.js → chunk-XMEIVWAS.js} +12 -9
  77. package/dist/chunk-XMEIVWAS.js.map +1 -0
  78. package/dist/{chunk-IUQBOCSU.js → chunk-ZBPEFQ4G.js} +2 -1
  79. package/dist/{chunk-IUQBOCSU.js.map → chunk-ZBPEFQ4G.js.map} +1 -1
  80. package/dist/chunk-ZU6DAR4S.js +223 -0
  81. package/dist/chunk-ZU6DAR4S.js.map +1 -0
  82. package/dist/commands/build/marketplace.js +115 -35
  83. package/dist/commands/build/marketplace.js.map +1 -1
  84. package/dist/commands/build/plugins.js +9 -10
  85. package/dist/commands/build/plugins.js.map +1 -1
  86. package/dist/commands/compile.js +135 -70
  87. package/dist/commands/compile.js.map +1 -1
  88. package/dist/commands/doctor.js +793 -64
  89. package/dist/commands/doctor.js.map +1 -1
  90. package/dist/commands/edit.js +231 -236
  91. package/dist/commands/edit.js.map +1 -1
  92. package/dist/commands/eject.js +24 -39
  93. package/dist/commands/eject.js.map +1 -1
  94. package/dist/commands/init.js +41 -46
  95. package/dist/commands/list.js +10 -12
  96. package/dist/commands/list.js.map +1 -1
  97. package/dist/commands/search.js +35 -88
  98. package/dist/commands/search.js.map +1 -1
  99. package/dist/commands/uninstall.js +212 -167
  100. package/dist/commands/uninstall.js.map +1 -1
  101. package/dist/commands/update.js +82 -332
  102. package/dist/commands/update.js.map +1 -1
  103. package/dist/components/common/confirm.js +1 -1
  104. package/dist/components/common/prompt-confirm.js +1 -1
  105. package/dist/components/common/select-list.js +2 -2
  106. package/dist/components/common/spinner.js +1 -1
  107. package/dist/components/wizard/category-grid.js +5 -6
  108. package/dist/components/wizard/checkbox-grid.js +5 -6
  109. package/dist/components/wizard/domain-selection.js +12 -13
  110. package/dist/components/wizard/run-wizard-session.js +30 -36
  111. package/dist/components/wizard/scroll-affordance.js +2 -2
  112. package/dist/components/wizard/skill-agent-summary.js +7 -7
  113. package/dist/components/wizard/source-grid.js +6 -11
  114. package/dist/components/wizard/stack-selection.js +9 -9
  115. package/dist/components/wizard/step-agents.js +12 -12
  116. package/dist/components/wizard/step-build.js +10 -11
  117. package/dist/components/wizard/step-confirm.js +11 -11
  118. package/dist/components/wizard/step-sources.js +11 -17
  119. package/dist/components/wizard/step-stack.js +10 -10
  120. package/dist/components/wizard/summary-panel.js +10 -10
  121. package/dist/components/wizard/toast.js +2 -2
  122. package/dist/components/wizard/wizard-layout.js +15 -16
  123. package/dist/components/wizard/wizard-tabs.js +6 -12
  124. package/dist/components/wizard/wizard.js +29 -35
  125. package/dist/config-exports.js +1 -1
  126. package/dist/copy-local-skills-WVHJFRPK.js +14 -0
  127. package/dist/hooks/init.js +49 -48
  128. package/dist/hooks/init.js.map +1 -1
  129. package/dist/index.js +3 -1
  130. package/dist/index.js.map +1 -1
  131. package/dist/load-agent-defs-5OT54J5M.js +15 -0
  132. package/dist/{loader-5JP4S7CJ.js → loader-JIZDTR4G.js} +7 -5
  133. package/dist/recompile-project-agents-VREEPBDV.js +20 -0
  134. package/dist/{source-loader-MZYCPL2S.js → source-loader-OE6EJFPU.js} +6 -6
  135. package/dist/src/agents/developer/ai-developer/identity.md +4 -4
  136. package/dist/src/agents/developer/ai-developer/playbook.md +1 -1
  137. package/dist/src/agents/developer/api-developer/identity.md +4 -4
  138. package/dist/src/agents/developer/api-developer/metadata.yaml +1 -1
  139. package/dist/src/agents/developer/cli-developer/identity.md +4 -4
  140. package/dist/src/agents/developer/web-developer/identity.md +2 -2
  141. package/dist/src/agents/developer/web-developer/metadata.yaml +1 -1
  142. package/dist/src/agents/meta/agent-summoner/identity.md +4 -5
  143. package/dist/src/agents/meta/agent-summoner/output.md +2 -2
  144. package/dist/src/agents/meta/agent-summoner/playbook.md +15 -16
  145. package/dist/src/agents/meta/codex-keeper/identity.md +4 -4
  146. package/dist/src/agents/meta/codex-keeper/playbook.md +1 -1
  147. package/dist/src/agents/meta/convention-keeper/identity.md +1 -1
  148. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +0 -34
  149. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +27 -3
  150. package/dist/src/agents/meta/skill-summoner/identity.md +2 -2
  151. package/{src/agents/planning/web-pm → dist/src/agents/planning/pm}/critical-reminders.md +10 -7
  152. package/dist/src/agents/planning/{web-pm → pm}/critical-requirements.md +8 -4
  153. package/dist/src/agents/planning/pm/identity.md +47 -0
  154. package/dist/src/agents/planning/pm/metadata.yaml +12 -0
  155. package/dist/src/agents/planning/{web-pm → pm}/output.md +7 -90
  156. package/dist/src/agents/planning/pm/playbook.md +185 -0
  157. package/dist/src/agents/researcher/ai-researcher/critical-reminders.md +58 -0
  158. package/dist/src/agents/researcher/ai-researcher/critical-requirements.md +40 -0
  159. package/dist/src/agents/researcher/ai-researcher/identity.md +86 -0
  160. package/dist/src/agents/researcher/ai-researcher/metadata.yaml +10 -0
  161. package/dist/src/agents/researcher/ai-researcher/output.md +363 -0
  162. package/dist/src/agents/researcher/ai-researcher/playbook.md +545 -0
  163. package/dist/src/agents/researcher/api-researcher/critical-reminders.md +16 -0
  164. package/dist/src/agents/researcher/api-researcher/identity.md +7 -7
  165. package/dist/src/agents/researcher/cli-researcher/critical-reminders.md +50 -0
  166. package/dist/src/agents/researcher/cli-researcher/critical-requirements.md +36 -0
  167. package/dist/src/agents/researcher/cli-researcher/identity.md +87 -0
  168. package/dist/src/agents/researcher/cli-researcher/metadata.yaml +10 -0
  169. package/dist/src/agents/researcher/cli-researcher/output.md +343 -0
  170. package/dist/src/agents/researcher/cli-researcher/playbook.md +370 -0
  171. package/dist/src/agents/researcher/web-researcher/identity.md +5 -6
  172. package/dist/src/agents/reviewer/reviewer/critical-reminders.md +29 -0
  173. package/dist/src/agents/reviewer/reviewer/critical-requirements.md +31 -0
  174. package/dist/src/agents/reviewer/reviewer/identity.md +41 -0
  175. package/dist/src/agents/reviewer/reviewer/metadata.yaml +12 -0
  176. package/dist/src/agents/reviewer/reviewer/output.md +202 -0
  177. package/dist/src/agents/reviewer/reviewer/playbook.md +141 -0
  178. package/dist/src/agents/tester/ai-tester/critical-reminders.md +48 -0
  179. package/dist/src/agents/tester/ai-tester/critical-requirements.md +49 -0
  180. package/dist/src/agents/tester/ai-tester/identity.md +62 -0
  181. package/dist/src/agents/tester/ai-tester/metadata.yaml +12 -0
  182. package/dist/src/agents/tester/ai-tester/output.md +375 -0
  183. package/dist/src/agents/tester/ai-tester/playbook.md +789 -0
  184. package/dist/src/agents/tester/api-tester/identity.md +3 -3
  185. package/dist/src/agents/tester/cli-tester/critical-reminders.md +3 -3
  186. package/dist/src/agents/tester/cli-tester/critical-requirements.md +2 -2
  187. package/dist/src/agents/tester/cli-tester/identity.md +3 -3
  188. package/dist/src/agents/tester/cli-tester/output.md +4 -4
  189. package/dist/src/agents/tester/cli-tester/playbook.md +3 -3
  190. package/dist/src/agents/tester/web-tester/identity.md +3 -3
  191. package/dist/stores/wizard-store.js +8 -6
  192. package/package.json +13 -2
  193. package/src/agents/developer/ai-developer/identity.md +4 -4
  194. package/src/agents/developer/ai-developer/playbook.md +1 -1
  195. package/src/agents/developer/api-developer/identity.md +4 -4
  196. package/src/agents/developer/api-developer/metadata.yaml +1 -1
  197. package/src/agents/developer/cli-developer/identity.md +4 -4
  198. package/src/agents/developer/web-developer/identity.md +2 -2
  199. package/src/agents/developer/web-developer/metadata.yaml +1 -1
  200. package/src/agents/meta/agent-summoner/identity.md +4 -5
  201. package/src/agents/meta/agent-summoner/output.md +2 -2
  202. package/src/agents/meta/agent-summoner/playbook.md +15 -16
  203. package/src/agents/meta/codex-keeper/identity.md +4 -4
  204. package/src/agents/meta/codex-keeper/playbook.md +1 -1
  205. package/src/agents/meta/convention-keeper/identity.md +1 -1
  206. package/src/agents/meta/skill-summoner/critical-reminders.md +0 -34
  207. package/src/agents/meta/skill-summoner/critical-requirements.md +27 -3
  208. package/src/agents/meta/skill-summoner/identity.md +2 -2
  209. package/{dist/src/agents/planning/web-pm → src/agents/planning/pm}/critical-reminders.md +10 -7
  210. package/src/agents/planning/{web-pm → pm}/critical-requirements.md +8 -4
  211. package/src/agents/planning/pm/identity.md +47 -0
  212. package/src/agents/planning/pm/metadata.yaml +12 -0
  213. package/src/agents/planning/{web-pm → pm}/output.md +7 -90
  214. package/src/agents/planning/pm/playbook.md +185 -0
  215. package/src/agents/researcher/ai-researcher/critical-reminders.md +58 -0
  216. package/src/agents/researcher/ai-researcher/critical-requirements.md +40 -0
  217. package/src/agents/researcher/ai-researcher/identity.md +86 -0
  218. package/src/agents/researcher/ai-researcher/metadata.yaml +10 -0
  219. package/src/agents/researcher/ai-researcher/output.md +363 -0
  220. package/src/agents/researcher/ai-researcher/playbook.md +545 -0
  221. package/src/agents/researcher/api-researcher/critical-reminders.md +16 -0
  222. package/src/agents/researcher/api-researcher/identity.md +7 -7
  223. package/src/agents/researcher/cli-researcher/critical-reminders.md +50 -0
  224. package/src/agents/researcher/cli-researcher/critical-requirements.md +36 -0
  225. package/src/agents/researcher/cli-researcher/identity.md +87 -0
  226. package/src/agents/researcher/cli-researcher/metadata.yaml +10 -0
  227. package/src/agents/researcher/cli-researcher/output.md +343 -0
  228. package/src/agents/researcher/cli-researcher/playbook.md +370 -0
  229. package/src/agents/researcher/web-researcher/identity.md +5 -6
  230. package/src/agents/reviewer/reviewer/critical-reminders.md +29 -0
  231. package/src/agents/reviewer/reviewer/critical-requirements.md +31 -0
  232. package/src/agents/reviewer/reviewer/identity.md +41 -0
  233. package/src/agents/reviewer/reviewer/metadata.yaml +12 -0
  234. package/src/agents/reviewer/reviewer/output.md +202 -0
  235. package/src/agents/reviewer/reviewer/playbook.md +141 -0
  236. package/src/agents/tester/ai-tester/critical-reminders.md +48 -0
  237. package/src/agents/tester/ai-tester/critical-requirements.md +49 -0
  238. package/src/agents/tester/ai-tester/identity.md +62 -0
  239. package/src/agents/tester/ai-tester/metadata.yaml +12 -0
  240. package/src/agents/tester/ai-tester/output.md +375 -0
  241. package/src/agents/tester/ai-tester/playbook.md +789 -0
  242. package/src/agents/tester/api-tester/identity.md +3 -3
  243. package/src/agents/tester/cli-tester/critical-reminders.md +3 -3
  244. package/src/agents/tester/cli-tester/critical-requirements.md +2 -2
  245. package/src/agents/tester/cli-tester/identity.md +3 -3
  246. package/src/agents/tester/cli-tester/output.md +4 -4
  247. package/src/agents/tester/cli-tester/playbook.md +3 -3
  248. package/src/agents/tester/web-tester/identity.md +3 -3
  249. package/src/schemas/metadata.schema.json +31 -2
  250. package/src/schemas/plugin.schema.json +3 -0
  251. package/src/schemas/project-config.schema.json +61 -15
  252. package/src/schemas/project-source-config.schema.json +0 -47
  253. package/dist/chunk-5GUOIJSG.js.map +0 -1
  254. package/dist/chunk-5UWKOOIS.js.map +0 -1
  255. package/dist/chunk-76ADG7LQ.js.map +0 -1
  256. package/dist/chunk-BNSRA6HL.js.map +0 -1
  257. package/dist/chunk-E5X6RJ4E.js.map +0 -1
  258. package/dist/chunk-EEPELKOM.js +0 -5938
  259. package/dist/chunk-EEPELKOM.js.map +0 -1
  260. package/dist/chunk-F7T5AFFN.js +0 -20
  261. package/dist/chunk-F7T5AFFN.js.map +0 -1
  262. package/dist/chunk-FVDKAVOL.js.map +0 -1
  263. package/dist/chunk-KFB5CRXZ.js +0 -377
  264. package/dist/chunk-KFB5CRXZ.js.map +0 -1
  265. package/dist/chunk-KR65TPKC.js +0 -664
  266. package/dist/chunk-KR65TPKC.js.map +0 -1
  267. package/dist/chunk-LASI35KT.js.map +0 -1
  268. package/dist/chunk-LDP5ASDM.js.map +0 -1
  269. package/dist/chunk-LZ52XEPR.js.map +0 -1
  270. package/dist/chunk-M7HO7NBK.js +0 -88
  271. package/dist/chunk-M7HO7NBK.js.map +0 -1
  272. package/dist/chunk-MWG4VU64.js.map +0 -1
  273. package/dist/chunk-ODNDXQH2.js +0 -77
  274. package/dist/chunk-ODNDXQH2.js.map +0 -1
  275. package/dist/chunk-P44SXVH3.js +0 -80
  276. package/dist/chunk-P44SXVH3.js.map +0 -1
  277. package/dist/chunk-PMM2MYMA.js.map +0 -1
  278. package/dist/chunk-PZIZNMHK.js.map +0 -1
  279. package/dist/chunk-Q45ZU6HD.js +0 -37
  280. package/dist/chunk-Q45ZU6HD.js.map +0 -1
  281. package/dist/chunk-QRDTLVXG.js.map +0 -1
  282. package/dist/chunk-QZZJFYUQ.js.map +0 -1
  283. package/dist/chunk-R5NOI2LP.js +0 -170
  284. package/dist/chunk-R5NOI2LP.js.map +0 -1
  285. package/dist/chunk-RNJWAKMO.js.map +0 -1
  286. package/dist/chunk-SBHBBZKF.js +0 -284
  287. package/dist/chunk-SBHBBZKF.js.map +0 -1
  288. package/dist/chunk-SKQWRUPX.js.map +0 -1
  289. package/dist/chunk-STMHDOZD.js.map +0 -1
  290. package/dist/chunk-SX5H6TSC.js.map +0 -1
  291. package/dist/chunk-TUPYW2IQ.js.map +0 -1
  292. package/dist/chunk-UBEDZ4FD.js +0 -4198
  293. package/dist/chunk-UBEDZ4FD.js.map +0 -1
  294. package/dist/chunk-VY6MNOXL.js +0 -20
  295. package/dist/chunk-VY6MNOXL.js.map +0 -1
  296. package/dist/chunk-WBCPLH66.js +0 -42
  297. package/dist/chunk-WBCPLH66.js.map +0 -1
  298. package/dist/chunk-WKTHWQKM.js.map +0 -1
  299. package/dist/chunk-XHUODHZ4.js.map +0 -1
  300. package/dist/chunk-ZPPHXXAP.js +0 -252
  301. package/dist/chunk-ZPPHXXAP.js.map +0 -1
  302. package/dist/commands/import/skill.js +0 -344
  303. package/dist/commands/import/skill.js.map +0 -1
  304. package/dist/commands/new/agent.js +0 -300
  305. package/dist/commands/new/agent.js.map +0 -1
  306. package/dist/commands/new/marketplace.js +0 -310
  307. package/dist/commands/new/marketplace.js.map +0 -1
  308. package/dist/commands/new/skill.js +0 -26
  309. package/dist/commands/validate.js +0 -575
  310. package/dist/commands/validate.js.map +0 -1
  311. package/dist/components/wizard/search-modal.js +0 -13
  312. package/dist/components/wizard/selection-card.js +0 -9
  313. package/dist/components/wizard/step-settings.js +0 -18
  314. package/dist/copy-local-skills-6EMVN7RB.js +0 -14
  315. package/dist/load-agent-defs-BWOUVEAR.js +0 -15
  316. package/dist/load-agent-defs-BWOUVEAR.js.map +0 -1
  317. package/dist/loader-5JP4S7CJ.js.map +0 -1
  318. package/dist/recompile-project-agents-6DL45TDI.js +0 -19
  319. package/dist/recompile-project-agents-6DL45TDI.js.map +0 -1
  320. package/dist/source-loader-MZYCPL2S.js.map +0 -1
  321. package/dist/src/agents/developer/web-architecture/critical-reminders.md +0 -48
  322. package/dist/src/agents/developer/web-architecture/critical-requirements.md +0 -65
  323. package/dist/src/agents/developer/web-architecture/identity.md +0 -64
  324. package/dist/src/agents/developer/web-architecture/metadata.yaml +0 -12
  325. package/dist/src/agents/developer/web-architecture/output.md +0 -449
  326. package/dist/src/agents/developer/web-architecture/playbook.md +0 -481
  327. package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +0 -71
  328. package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +0 -31
  329. package/dist/src/agents/pattern/pattern-scout/identity.md +0 -25
  330. package/dist/src/agents/pattern/pattern-scout/metadata.yaml +0 -10
  331. package/dist/src/agents/pattern/pattern-scout/output.md +0 -290
  332. package/dist/src/agents/pattern/pattern-scout/playbook.md +0 -1806
  333. package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +0 -30
  334. package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +0 -28
  335. package/dist/src/agents/pattern/web-pattern-critique/identity.md +0 -41
  336. package/dist/src/agents/pattern/web-pattern-critique/metadata.yaml +0 -12
  337. package/dist/src/agents/pattern/web-pattern-critique/output.md +0 -314
  338. package/dist/src/agents/pattern/web-pattern-critique/playbook.md +0 -572
  339. package/dist/src/agents/planning/api-pm/critical-reminders.md +0 -48
  340. package/dist/src/agents/planning/api-pm/critical-requirements.md +0 -41
  341. package/dist/src/agents/planning/api-pm/identity.md +0 -39
  342. package/dist/src/agents/planning/api-pm/metadata.yaml +0 -12
  343. package/dist/src/agents/planning/api-pm/output.md +0 -475
  344. package/dist/src/agents/planning/api-pm/playbook.md +0 -129
  345. package/dist/src/agents/planning/web-pm/identity.md +0 -26
  346. package/dist/src/agents/planning/web-pm/metadata.yaml +0 -12
  347. package/dist/src/agents/planning/web-pm/playbook.md +0 -318
  348. package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +0 -40
  349. package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +0 -37
  350. package/dist/src/agents/reviewer/ai-reviewer/identity.md +0 -51
  351. package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +0 -10
  352. package/dist/src/agents/reviewer/ai-reviewer/output.md +0 -395
  353. package/dist/src/agents/reviewer/ai-reviewer/playbook.md +0 -90
  354. package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +0 -31
  355. package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +0 -27
  356. package/dist/src/agents/reviewer/api-reviewer/identity.md +0 -51
  357. package/dist/src/agents/reviewer/api-reviewer/metadata.yaml +0 -12
  358. package/dist/src/agents/reviewer/api-reviewer/output.md +0 -343
  359. package/dist/src/agents/reviewer/api-reviewer/playbook.md +0 -288
  360. package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +0 -33
  361. package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +0 -30
  362. package/dist/src/agents/reviewer/cli-reviewer/identity.md +0 -44
  363. package/dist/src/agents/reviewer/cli-reviewer/metadata.yaml +0 -12
  364. package/dist/src/agents/reviewer/cli-reviewer/output.md +0 -414
  365. package/dist/src/agents/reviewer/cli-reviewer/playbook.md +0 -218
  366. package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +0 -38
  367. package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +0 -38
  368. package/dist/src/agents/reviewer/infra-reviewer/identity.md +0 -53
  369. package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +0 -10
  370. package/dist/src/agents/reviewer/infra-reviewer/output.md +0 -364
  371. package/dist/src/agents/reviewer/infra-reviewer/playbook.md +0 -161
  372. package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +0 -31
  373. package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +0 -26
  374. package/dist/src/agents/reviewer/web-reviewer/identity.md +0 -40
  375. package/dist/src/agents/reviewer/web-reviewer/metadata.yaml +0 -12
  376. package/dist/src/agents/reviewer/web-reviewer/output.md +0 -333
  377. package/dist/src/agents/reviewer/web-reviewer/playbook.md +0 -156
  378. package/src/agents/developer/web-architecture/critical-reminders.md +0 -48
  379. package/src/agents/developer/web-architecture/critical-requirements.md +0 -65
  380. package/src/agents/developer/web-architecture/identity.md +0 -64
  381. package/src/agents/developer/web-architecture/metadata.yaml +0 -12
  382. package/src/agents/developer/web-architecture/output.md +0 -449
  383. package/src/agents/developer/web-architecture/playbook.md +0 -481
  384. package/src/agents/pattern/pattern-scout/critical-reminders.md +0 -71
  385. package/src/agents/pattern/pattern-scout/critical-requirements.md +0 -31
  386. package/src/agents/pattern/pattern-scout/identity.md +0 -25
  387. package/src/agents/pattern/pattern-scout/metadata.yaml +0 -10
  388. package/src/agents/pattern/pattern-scout/output.md +0 -290
  389. package/src/agents/pattern/pattern-scout/playbook.md +0 -1806
  390. package/src/agents/pattern/web-pattern-critique/critical-reminders.md +0 -30
  391. package/src/agents/pattern/web-pattern-critique/critical-requirements.md +0 -28
  392. package/src/agents/pattern/web-pattern-critique/identity.md +0 -41
  393. package/src/agents/pattern/web-pattern-critique/metadata.yaml +0 -12
  394. package/src/agents/pattern/web-pattern-critique/output.md +0 -314
  395. package/src/agents/pattern/web-pattern-critique/playbook.md +0 -572
  396. package/src/agents/planning/api-pm/critical-reminders.md +0 -48
  397. package/src/agents/planning/api-pm/critical-requirements.md +0 -41
  398. package/src/agents/planning/api-pm/identity.md +0 -39
  399. package/src/agents/planning/api-pm/metadata.yaml +0 -12
  400. package/src/agents/planning/api-pm/output.md +0 -475
  401. package/src/agents/planning/api-pm/playbook.md +0 -129
  402. package/src/agents/planning/web-pm/identity.md +0 -26
  403. package/src/agents/planning/web-pm/metadata.yaml +0 -12
  404. package/src/agents/planning/web-pm/playbook.md +0 -318
  405. package/src/agents/reviewer/ai-reviewer/critical-reminders.md +0 -40
  406. package/src/agents/reviewer/ai-reviewer/critical-requirements.md +0 -37
  407. package/src/agents/reviewer/ai-reviewer/identity.md +0 -51
  408. package/src/agents/reviewer/ai-reviewer/metadata.yaml +0 -10
  409. package/src/agents/reviewer/ai-reviewer/output.md +0 -395
  410. package/src/agents/reviewer/ai-reviewer/playbook.md +0 -90
  411. package/src/agents/reviewer/api-reviewer/critical-reminders.md +0 -31
  412. package/src/agents/reviewer/api-reviewer/critical-requirements.md +0 -27
  413. package/src/agents/reviewer/api-reviewer/identity.md +0 -51
  414. package/src/agents/reviewer/api-reviewer/metadata.yaml +0 -12
  415. package/src/agents/reviewer/api-reviewer/output.md +0 -343
  416. package/src/agents/reviewer/api-reviewer/playbook.md +0 -288
  417. package/src/agents/reviewer/cli-reviewer/critical-reminders.md +0 -33
  418. package/src/agents/reviewer/cli-reviewer/critical-requirements.md +0 -30
  419. package/src/agents/reviewer/cli-reviewer/identity.md +0 -44
  420. package/src/agents/reviewer/cli-reviewer/metadata.yaml +0 -12
  421. package/src/agents/reviewer/cli-reviewer/output.md +0 -414
  422. package/src/agents/reviewer/cli-reviewer/playbook.md +0 -218
  423. package/src/agents/reviewer/infra-reviewer/critical-reminders.md +0 -38
  424. package/src/agents/reviewer/infra-reviewer/critical-requirements.md +0 -38
  425. package/src/agents/reviewer/infra-reviewer/identity.md +0 -53
  426. package/src/agents/reviewer/infra-reviewer/metadata.yaml +0 -10
  427. package/src/agents/reviewer/infra-reviewer/output.md +0 -364
  428. package/src/agents/reviewer/infra-reviewer/playbook.md +0 -161
  429. package/src/agents/reviewer/web-reviewer/critical-reminders.md +0 -31
  430. package/src/agents/reviewer/web-reviewer/critical-requirements.md +0 -26
  431. package/src/agents/reviewer/web-reviewer/identity.md +0 -40
  432. package/src/agents/reviewer/web-reviewer/metadata.yaml +0 -12
  433. package/src/agents/reviewer/web-reviewer/output.md +0 -333
  434. package/src/agents/reviewer/web-reviewer/playbook.md +0 -156
  435. /package/dist/{chunk-ZL7PFNHN.js.map → chunk-K3O3YQYG.js.map} +0 -0
  436. /package/dist/{chunk-IHUY4M22.js.map → chunk-UW44KSYL.js.map} +0 -0
  437. /package/dist/{chunk-DTSG5XZB.js.map → chunk-V3ENMW7G.js.map} +0 -0
  438. /package/dist/{commands/new/skill.js.map → copy-local-skills-WVHJFRPK.js.map} +0 -0
  439. /package/dist/{components/wizard/search-modal.js.map → load-agent-defs-5OT54J5M.js.map} +0 -0
  440. /package/dist/{components/wizard/selection-card.js.map → loader-JIZDTR4G.js.map} +0 -0
  441. /package/dist/{components/wizard/step-settings.js.map → recompile-project-agents-VREEPBDV.js.map} +0 -0
  442. /package/dist/{copy-local-skills-6EMVN7RB.js.map → source-loader-OE6EJFPU.js.map} +0 -0
@@ -1,21 +1,22 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ DOMAIN_ORDER,
3
4
  deriveInstallMode,
4
5
  getAvailableSkills,
6
+ getCellState,
5
7
  getUnmetRequiredBy,
6
8
  isActiveAt,
7
- isCompatibleWithSelections,
8
9
  isGlobalTombstone,
9
10
  isProjectOwned
10
- } from "./chunk-EEPELKOM.js";
11
+ } from "./chunk-CBF4ZYV3.js";
11
12
  import {
12
13
  warn
13
- } from "./chunk-PMM2MYMA.js";
14
+ } from "./chunk-4VCWL2IG.js";
14
15
  import {
15
16
  getCategoryDomain,
16
17
  getSkillById,
17
18
  matrix
18
- } from "./chunk-WKTHWQKM.js";
19
+ } from "./chunk-IPJOMAWC.js";
19
20
  import {
20
21
  typedEntries,
21
22
  typedFromEntries,
@@ -23,14 +24,14 @@ import {
23
24
  typedValues
24
25
  } from "./chunk-VASLW636.js";
25
26
  import {
26
- BUILT_IN_DOMAIN_ORDER,
27
27
  DEFAULT_PUBLIC_SOURCE_NAME,
28
+ DEFAULT_SCRATCH_DOMAINS,
28
29
  EJECT_SOURCE,
29
- FALLBACK_DOMAIN
30
- } from "./chunk-76ADG7LQ.js";
30
+ FALLBACK_DOMAIN,
31
+ INSTALL_MODES
32
+ } from "./chunk-R54KIGN2.js";
31
33
 
32
34
  // src/cli/stores/wizard-store.ts
33
- import { flatMap } from "remeda";
34
35
  import { create } from "zustand";
35
36
 
36
37
  // src/cli/lib/wizard/build-step-logic.ts
@@ -122,9 +123,9 @@ function classifyDiffRow(skill, prevKeySet, prevSourceMap) {
122
123
  const key = skillSlotKey(skill.id, skill.scope);
123
124
  const isNew = prevKeySet === null || !prevKeySet.has(key);
124
125
  const prevSource = prevSourceMap?.get(key);
125
- const sourceChanged = !isNew && prevSource != null && prevSource !== skill.source;
126
- if (sourceChanged) {
127
- return { id: skill.id, source: skill.source, status: "source-changed" };
126
+ const modeChanged = !isNew && prevSource != null && prevSource !== skill.source;
127
+ if (modeChanged) {
128
+ return { id: skill.id, source: skill.source, status: "mode-changed" };
128
129
  }
129
130
  return { id: skill.id, source: skill.source, status: isNew ? "added" : "unchanged" };
130
131
  }
@@ -140,53 +141,48 @@ function toRemovedAgentRow(agent) {
140
141
  }
141
142
 
142
143
  // src/cli/lib/wizard/build-step-logic.ts
143
- var FRAMEWORK_CATEGORY_ID = "web-framework";
144
- var WEB_DOMAIN_ID = "web";
145
- function getSelectedFrameworks(selections) {
146
- return (selections[FRAMEWORK_CATEGORY_ID] ?? []).map((alias) => getSkillById(alias).id);
147
- }
148
- function isCompatibleWithSelectedFrameworks(skillId, selectedFrameworkIds) {
149
- return isCompatibleWithSelections(getSkillById(skillId), selectedFrameworkIds);
150
- }
151
- function buildCategoriesForDomain(domain, allSelections, selections, installedSkillIds, skillConfigs, filterIncompatible) {
152
- const selectedFrameworkIds = getSelectedFrameworks(selections);
153
- const shouldFilter = filterIncompatible && domain === WEB_DOMAIN_ID && selectedFrameworkIds.length > 0;
144
+ function buildCategoriesForDomain(domain, allSelections, installedSkillIds, skillConfigs) {
154
145
  const categories = sortBy(
155
146
  typedValues(matrix.categories).filter((cat) => cat.domain === domain),
147
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- CategoryDefinition declares this required, but an auto-synthesized category for a custom skill can arrive without it — the type is stricter than the data
156
148
  (cat) => cat.order ?? 0
157
149
  );
158
150
  const categoryRows = categories.map((cat) => {
159
151
  const skillOptions = getAvailableSkills(cat.id, allSelections);
160
- const filteredOptions = shouldFilter && cat.id !== FRAMEWORK_CATEGORY_ID ? skillOptions.filter(
161
- (skill) => isCompatibleWithSelectedFrameworks(skill.id, selectedFrameworkIds)
162
- ) : skillOptions;
163
- const isExclusive = cat.exclusive ?? true;
164
152
  const sortedOptions = sortBy(
165
- filteredOptions,
153
+ skillOptions,
166
154
  (skill) => getSkillById(skill.id).displayName.toLowerCase()
167
155
  );
168
156
  const options = sortedOptions.map((skill) => {
169
157
  const activeConfig = skillConfigs?.find((sc) => sc.id === skill.id && !sc.excluded);
170
158
  const excludedConfig = skillConfigs?.find((sc) => sc.id === skill.id && sc.excluded);
171
159
  const { secondaryScope } = deriveScopeBadges(activeConfig, excludedConfig);
160
+ const local = getSkillById(skill.id).local;
161
+ const requiredBy = skill.selected ? void 0 : getUnmetRequiredBy(skill.id, allSelections);
172
162
  return {
173
163
  id: skill.id,
174
- state: isExclusive && skill.advisoryState.status === "incompatible" ? { status: "normal" } : skill.advisoryState,
164
+ // The cell verdict, not the raw advisory: inside a pick-one category
165
+ // the shared semantics forgive what the swap resolves.
166
+ state: getCellState(skill.id, allSelections),
175
167
  selected: skill.selected,
176
- local: getSkillById(skill.id).local,
168
+ ...local !== void 0 && { local },
177
169
  installed: installedSkillIds?.includes(skill.id) || false,
178
- scope: activeConfig?.scope,
179
- secondaryScope,
180
- source: activeConfig?.source,
170
+ ...activeConfig?.scope !== void 0 && { scope: activeConfig.scope },
171
+ ...secondaryScope !== void 0 && { secondaryScope },
172
+ ...activeConfig?.source !== void 0 && { source: activeConfig.source },
181
173
  hasUnmetRequirements: skill.hasUnmetRequirements,
182
- unmetRequirementsReason: skill.unmetRequirementsReason,
183
- requiredBy: skill.selected ? void 0 : getUnmetRequiredBy(skill.id, allSelections)
174
+ ...skill.unmetRequirementsReason !== void 0 && {
175
+ unmetRequirementsReason: skill.unmetRequirementsReason
176
+ },
177
+ ...requiredBy !== void 0 && { requiredBy }
184
178
  };
185
179
  });
186
180
  return {
187
181
  id: cat.id,
188
182
  displayName: cat.displayName,
183
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- CategoryDefinition declares this required, but an auto-synthesized category for a custom skill can arrive without it — the type is stricter than the data
189
184
  required: cat.required ?? false,
185
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- CategoryDefinition declares this required, but an auto-synthesized category for a custom skill can arrive without it — the type is stricter than the data
190
186
  exclusive: cat.exclusive ?? true,
191
187
  options
192
188
  };
@@ -196,10 +192,10 @@ function buildCategoriesForDomain(domain, allSelections, selections, installedSk
196
192
 
197
193
  // src/cli/lib/wizard/domain-order.ts
198
194
  function orderDomains(domains) {
199
- const builtInSet = new Set(BUILT_IN_DOMAIN_ORDER);
195
+ const builtInSet = new Set(DOMAIN_ORDER);
200
196
  return [
201
197
  ...domains.filter((d) => !builtInSet.has(d)).sort(),
202
- ...BUILT_IN_DOMAIN_ORDER.filter((d) => domains.includes(d))
198
+ ...DOMAIN_ORDER.filter((d) => domains.includes(d))
203
199
  ];
204
200
  }
205
201
 
@@ -221,28 +217,6 @@ function createDefaultSkillConfig(id) {
221
217
  const primarySource = primarySourceName(skill);
222
218
  return { id, scope: "global", source: primarySource ?? DEFAULT_PUBLIC_SOURCE_NAME };
223
219
  }
224
- function findIncompatibleWebSkills(webSelections, skillConfigs) {
225
- const frameworkSelections = webSelections[FRAMEWORK_CATEGORY_ID] ?? [];
226
- if (frameworkSelections.length === 0) return /* @__PURE__ */ new Set();
227
- const excludedIds = new Set(skillConfigs.filter((s) => s.excluded).map((s) => s.id));
228
- const selectedFrameworkIds = frameworkSelections.map((alias) => getSkillById(alias).id);
229
- return new Set(
230
- flatMap(
231
- typedEntries(webSelections),
232
- ([cat, skills]) => cat === FRAMEWORK_CATEGORY_ID || !skills ? [] : skills.filter(
233
- (id) => !excludedIds.has(id) && !isCompatibleWithSelectedFrameworks(id, selectedFrameworkIds)
234
- )
235
- )
236
- );
237
- }
238
- function removeSkillsFromSelections(selections, toRemove) {
239
- return typedFromEntries(
240
- typedEntries(selections).map(([cat, skills]) => [
241
- cat,
242
- skills?.filter((id) => !toRemove.has(id)) ?? []
243
- ])
244
- );
245
- }
246
220
  function hasProjectActive(configs, id) {
247
221
  return configs.some((sc) => sc.id === id && isActiveAt(sc, "project"));
248
222
  }
@@ -259,7 +233,10 @@ function isDualScopePair(configs, id) {
259
233
  return hasProjectActive(configs, id) && hasGlobalTombstone(configs, id);
260
234
  }
261
235
  function isGloballyLockedSkill(installed, liveConfigs, id) {
262
- return hasGlobalActive(installed, id) || hasGlobalTombstone(installed, id) && hasGlobalActive(liveConfigs, id) || isDualScopePair(liveConfigs, id);
236
+ return hasGlobalActive(installed, id) || hasGlobalTombstone(installed, id) && hasGlobalActive(liveConfigs, id);
237
+ }
238
+ function blocksExclusiveSwap(installed, liveConfigs, id) {
239
+ return isGloballyLockedSkill(installed, liveConfigs, id) || isDualScopePair(liveConfigs, id);
263
240
  }
264
241
  function wouldOverwriteGlobalEject(config, liveConfigs, installedSkillConfigs) {
265
242
  if (config.scope !== "project" || config.source !== EJECT_SOURCE) return false;
@@ -269,6 +246,10 @@ function wouldOverwriteGlobalEject(config, liveConfigs, installedSkillConfigs) {
269
246
  if (!globalEjectInstalled) return false;
270
247
  return !liveConfigs.some((sc) => sc.id === config.id && sc.excluded);
271
248
  }
249
+ function isInheritedGlobalSlot(installed, id, scope) {
250
+ if (installed === null) return false;
251
+ return scope === "global" && hasGlobalActive(installed, id);
252
+ }
272
253
  function withActiveEntrySource(configs, id, scope, source) {
273
254
  return configs.map(
274
255
  (sc) => sc.id === id && !sc.excluded && sc.scope === scope ? { ...sc, source } : sc
@@ -308,9 +289,11 @@ function reconcileSkillConfigs(configs, added, removed, installedSkillConfigs, i
308
289
  }
309
290
  const existingExcluded = result.find((sc) => sc.id === id && sc.excluded);
310
291
  if (existingExcluded) {
311
- result = result.map(
312
- (sc) => sc.id === id && sc.excluded ? { ...sc, excluded: void 0 } : sc
313
- );
292
+ result = result.map((sc) => {
293
+ if (sc.id !== id || !sc.excluded) return sc;
294
+ const { excluded: _excluded, ...active } = sc;
295
+ return active;
296
+ });
314
297
  } else if (!result.some((sc) => sc.id === id)) {
315
298
  result = [...result, buildSkillConfigForId(id, installedSkillConfigs)];
316
299
  }
@@ -338,9 +321,11 @@ function applyAgentToggle(configs, agent, isSelected) {
338
321
  }
339
322
  const existingExcluded = configs.find((ac) => ac.name === agent && ac.excluded);
340
323
  if (existingExcluded) {
341
- return configs.map(
342
- (ac) => ac.name === agent && ac.excluded ? { ...ac, excluded: void 0 } : ac
343
- );
324
+ return configs.map((ac) => {
325
+ if (ac.name !== agent || !ac.excluded) return ac;
326
+ const { excluded: _excluded, ...active } = ac;
327
+ return active;
328
+ });
344
329
  }
345
330
  return [...configs, { name: agent, scope: "global" }];
346
331
  }
@@ -387,40 +372,26 @@ function buildAgentConfigForName(name, savedConfigs) {
387
372
  function restoreSkillConfigs(existingConfigs, restoredIds) {
388
373
  const restoredSet = new Set(restoredIds);
389
374
  const existingIds = new Set(existingConfigs.map((sc) => sc.id));
390
- const updated = existingConfigs.map(
391
- (sc) => restoredSet.has(sc.id) && sc.excluded ? { ...sc, excluded: void 0 } : sc
392
- );
375
+ const updated = existingConfigs.map((sc) => {
376
+ if (!restoredSet.has(sc.id) || !sc.excluded) return sc;
377
+ const { excluded: _excluded, ...active } = sc;
378
+ return active;
379
+ });
393
380
  const newConfigs = restoredIds.filter((id) => !existingIds.has(id)).map(createDefaultSkillConfig);
394
381
  return [...updated, ...newConfigs];
395
382
  }
396
383
  var DOMAIN_AGENTS = {
397
- web: [
398
- "web-developer",
399
- "web-reviewer",
400
- "web-researcher",
401
- "web-tester",
402
- "web-pm",
403
- "web-architecture"
404
- ],
405
- api: ["api-developer", "api-reviewer", "api-researcher"],
406
- cli: ["cli-developer", "cli-tester", "cli-reviewer"]
384
+ web: ["web-developer", "web-researcher", "web-tester", "pm", "reviewer"],
385
+ api: ["api-developer", "api-researcher", "api-tester", "pm", "reviewer"],
386
+ cli: ["cli-developer", "cli-tester", "cli-researcher", "pm", "reviewer"],
387
+ ai: ["ai-developer", "ai-researcher", "ai-tester", "pm", "reviewer"]
407
388
  };
408
- var SOURCE_SORT_TIER_LOCAL = 1;
409
- var SOURCE_SORT_TIER_SCOPED = 2;
410
- var SOURCE_SORT_TIER_PUBLIC = 3;
411
- var SOURCE_SORT_TIER_THIRD_PARTY = 4;
412
- function getSourceSortTier(source) {
413
- if (source.type === "local") return SOURCE_SORT_TIER_LOCAL;
414
- if (source.primary) return SOURCE_SORT_TIER_SCOPED;
415
- if (source.type === "public") return SOURCE_SORT_TIER_PUBLIC;
416
- return SOURCE_SORT_TIER_THIRD_PARTY;
417
- }
418
389
  function resolveSkillForPopulation(skillId) {
419
390
  const { skills } = matrix;
420
391
  const skill = skills[skillId];
421
392
  if (!skill?.category) {
422
393
  warn(
423
- `Installed skill '${skillId}' is missing from the marketplace \u2014 it may have been removed or renamed`
394
+ `Installed skill '${skillId}' is not present in the loaded source \u2014 it may have been removed or renamed`
424
395
  );
425
396
  return null;
426
397
  }
@@ -439,33 +410,17 @@ function addToDomainSelections(selections, domain, category, skillId) {
439
410
  skillList.push(skillId);
440
411
  return true;
441
412
  }
442
- function buildBoundSkillOptions(boundSkills, alias, selectedSource) {
443
- return boundSkills.filter((b) => b.boundTo === alias).map((bound) => ({
444
- id: bound.sourceName,
445
- selected: selectedSource === bound.sourceName,
446
- installed: false
447
- }));
413
+ function marketplaceSourceName(skill) {
414
+ return skill.availableSources?.find((source) => source.type !== "local")?.name ?? DEFAULT_PUBLIC_SOURCE_NAME;
448
415
  }
449
- function buildSkillSourceOptions(skill, selectedSource, boundSkills) {
450
- const sortedSources = [...skill.availableSources || []].sort(
451
- (a, b) => getSourceSortTier(a) - getSourceSortTier(b)
452
- );
453
- const baseOptions = sortedSources.length > 0 ? sortedSources.map((source) => ({
454
- id: source.name,
455
- selected: selectedSource === source.name,
456
- installed: source.installed
457
- })) : [
458
- {
459
- id: DEFAULT_PUBLIC_SOURCE_NAME,
460
- selected: selectedSource === DEFAULT_PUBLIC_SOURCE_NAME,
461
- installed: false
462
- }
463
- ];
464
- const withEject = baseOptions.some((o) => o.id === EJECT_SOURCE) ? baseOptions : [
465
- { id: EJECT_SOURCE, selected: selectedSource === EJECT_SOURCE, installed: false },
466
- ...baseOptions
467
- ];
468
- return [...withEject, ...buildBoundSkillOptions(boundSkills, skill.slug, selectedSource)];
416
+ function sourceForInstallMode(skill, mode) {
417
+ return mode === "eject" ? EJECT_SOURCE : marketplaceSourceName(skill);
418
+ }
419
+ function installModeOfSource(source) {
420
+ return source === EJECT_SOURCE ? "eject" : "plugin";
421
+ }
422
+ function buildInstallModeOptions(selectedMode) {
423
+ return INSTALL_MODES.map((mode) => ({ mode, selected: mode === selectedMode }));
469
424
  }
470
425
  function collectRemovedInstalledEntries(installedSkillConfigs, skillConfigs) {
471
426
  if (!installedSkillConfigs) return [];
@@ -483,10 +438,11 @@ function collectInstalledSkillSlots(installedSkillConfigs) {
483
438
  function addedSlotFlag(installedSkillSlots, id, scope) {
484
439
  return installedSkillSlots.has(skillSlotKey(id, scope)) ? {} : { added: true };
485
440
  }
486
- function withSelectedSource(options, sourceId) {
487
- return options.map((option) => ({ ...option, selected: option.id === sourceId }));
441
+ function withSelectedMode(options, source) {
442
+ const mode = installModeOfSource(source);
443
+ return options.map((option) => ({ ...option, selected: option.mode === mode }));
488
444
  }
489
- function resolveSkillRowInputs(id, skillConfigs, boundSkills) {
445
+ function resolveSkillRowInputs(id, skillConfigs) {
490
446
  const skill = getSkillById(id);
491
447
  const configEntry = skillConfigs.find((sc) => sc.id === skill.id);
492
448
  const selectedSource = resolveEffectiveSource(
@@ -497,13 +453,13 @@ function resolveSkillRowInputs(id, skillConfigs, boundSkills) {
497
453
  return {
498
454
  skillId: skill.id,
499
455
  configEntry,
500
- options: buildSkillSourceOptions(skill, selectedSource, boundSkills)
456
+ options: buildInstallModeOptions(installModeOfSource(selectedSource))
501
457
  };
502
458
  }
503
459
  function toPendingRemovalRow(skillId, options, removedInstalledEntry) {
504
460
  return {
505
461
  skillId,
506
- options: withSelectedSource(options, removedInstalledEntry.source),
462
+ options: withSelectedMode(options, removedInstalledEntry.source),
507
463
  scope: removedInstalledEntry.scope,
508
464
  disabled: true
509
465
  };
@@ -515,7 +471,7 @@ function isSlotAlreadyRendered(rows, removedInstalledEntry) {
515
471
  function toLockedGlobalRow(skillId, options, installedSource, installedSkillSlots) {
516
472
  return {
517
473
  skillId,
518
- options: withSelectedSource(options, installedSource),
474
+ options: withSelectedMode(options, installedSource),
519
475
  scope: "global",
520
476
  readOnly: true,
521
477
  ...addedSlotFlag(installedSkillSlots, skillId, "global")
@@ -551,7 +507,7 @@ function classifySkillSourceRows(skillId, options, context) {
551
507
  {
552
508
  skillId,
553
509
  options,
554
- scope: configEntry?.scope,
510
+ ...configEntry?.scope !== void 0 && { scope: configEntry.scope },
555
511
  ...readOnly ? { readOnly: true } : {},
556
512
  ...addedSlotFlag(installedSkillSlots, skillId, configEntry?.scope)
557
513
  }
@@ -570,6 +526,17 @@ var WIZARD_STEP_ORDER = [
570
526
  "agents",
571
527
  "confirm"
572
528
  ];
529
+ function offersStacks() {
530
+ return matrix.suggestedStacks.length > 0;
531
+ }
532
+ function getActiveStepFlow() {
533
+ if (offersStacks()) return [...WIZARD_STEP_ORDER];
534
+ return WIZARD_STEP_ORDER.filter((step) => step !== "stack");
535
+ }
536
+ function stepsBefore(flow, step) {
537
+ const index = flow.indexOf(step);
538
+ return index < 0 ? [] : flow.slice(0, index);
539
+ }
573
540
  var createInitialState = (overrides) => ({
574
541
  step: "stack",
575
542
  approach: null,
@@ -581,17 +548,13 @@ var createInitialState = (overrides) => ({
581
548
  /** Snapshot of domainSelections from populateFromSkillIds, used to restore on domain re-toggle */
582
549
  _stackDomainSelections: null,
583
550
  showLabels: false,
584
- filterIncompatible: false,
585
551
  skillConfigs: [],
586
552
  focusedSkillId: null,
587
553
  unresolvableSkillIds: [],
588
- customizeSources: false,
589
- showSettings: false,
590
554
  showInfo: false,
591
555
  selectedAgents: [],
592
556
  agentConfigs: [],
593
557
  focusedAgentId: null,
594
- boundSkills: [],
595
558
  installedSkillConfigs: null,
596
559
  installedAgentConfigs: null,
597
560
  isInitMode: false,
@@ -620,11 +583,30 @@ var useWizardStore = create((set, get) => ({
620
583
  skillConfigs: [],
621
584
  selectedAgents: [],
622
585
  agentConfigs: [],
623
- boundSkills: [],
624
586
  currentDomainIndex: 0,
625
587
  stackAction: null
626
588
  }),
627
589
  setStackAction: (action) => set({ stackAction: action }),
590
+ startFromScratch: () => {
591
+ get().selectStack(null);
592
+ get().setApproach("scratch");
593
+ const { globalAgentPreselections, globalPreselections } = get();
594
+ if (globalAgentPreselections) {
595
+ set({
596
+ selectedAgents: globalAgentPreselections.agents,
597
+ agentConfigs: globalAgentPreselections.configs
598
+ });
599
+ }
600
+ if (globalPreselections?.length) {
601
+ get().populateFromSkillIds(
602
+ globalPreselections.map((skill) => skill.id),
603
+ globalPreselections
604
+ );
605
+ }
606
+ for (const domain of DEFAULT_SCRATCH_DOMAINS) {
607
+ if (!get().selectedDomains.includes(domain)) get().toggleDomain(domain);
608
+ }
609
+ },
628
610
  populateFromSkillIds: (skillIds, savedConfigs) => set(() => {
629
611
  const domainSelections = {};
630
612
  const resolvedSkillIds = [];
@@ -640,11 +622,6 @@ var useWizardStore = create((set, get) => ({
640
622
  resolvedSkillIds.push(techId);
641
623
  }
642
624
  }
643
- if (unresolvableSkillIds.length > 0) {
644
- warn(
645
- `${unresolvableSkillIds.length} installed skill(s) could not be resolved and were skipped`
646
- );
647
- }
648
625
  const selectedDomains = orderDomains(typedKeys(domainSelections));
649
626
  const skillConfigs = resolvedSkillIds.map(
650
627
  (id) => buildSkillConfigForId(id, savedConfigs)
@@ -701,7 +678,7 @@ var useWizardStore = create((set, get) => ({
701
678
  }
702
679
  if (isSelected) {
703
680
  const categoryDef = matrix.categories[category];
704
- if (categoryDef?.exclusive && categoryDef?.required) {
681
+ if (categoryDef?.exclusive && categoryDef.required) {
705
682
  const categorySkillCount = typedValues(matrix.skills).filter(
706
683
  (s) => s.category === category
707
684
  ).length;
@@ -712,7 +689,7 @@ var useWizardStore = create((set, get) => ({
712
689
  }
713
690
  if (exclusive && !isSelected) {
714
691
  const wouldDropLockedSkill = currentSelections.some(
715
- (selectedId) => isGloballyLockedSkill(installed, state.skillConfigs, selectedId)
692
+ (selectedId) => blocksExclusiveSwap(installed, state.skillConfigs, selectedId)
716
693
  );
717
694
  if (wouldDropLockedSkill && !state.isEditingFromGlobalScope) {
718
695
  return { toastMessage: TOAST_MESSAGES.GLOBAL_SKILLS_LOCKED };
@@ -776,33 +753,6 @@ var useWizardStore = create((set, get) => ({
776
753
  }
777
754
  },
778
755
  toggleShowLabels: () => set((state) => ({ showLabels: !state.showLabels })),
779
- toggleFilterIncompatible: () => set((state) => {
780
- if (state.filterIncompatible) return { filterIncompatible: false };
781
- const webSelections = state.domainSelections.web;
782
- if (!webSelections) return { filterIncompatible: true };
783
- const removed = findIncompatibleWebSkills(webSelections, state.skillConfigs);
784
- if (removed.size === 0) return { filterIncompatible: true };
785
- const installed = state.installedSkillConfigs ?? [];
786
- const removesLockedGlobal = [...removed].some(
787
- (id) => hasGlobalActive(installed, id) || hasGlobalTombstone(installed, id) && hasGlobalActive(state.skillConfigs, id)
788
- );
789
- if (removesLockedGlobal && !state.isEditingFromGlobalScope) {
790
- return { toastMessage: TOAST_MESSAGES.GLOBAL_SKILLS_LOCKED };
791
- }
792
- return {
793
- filterIncompatible: true,
794
- domainSelections: {
795
- ...state.domainSelections,
796
- web: removeSkillsFromSelections(webSelections, removed)
797
- },
798
- // Global-scope edit: clean uninstall, no tombstone (D-233 Scenario C).
799
- skillConfigs: applySkillRemoval(
800
- state.skillConfigs,
801
- removed,
802
- state.isEditingFromGlobalScope ? null : state.installedSkillConfigs
803
- )
804
- };
805
- }),
806
756
  deriveInstallMode: () => {
807
757
  const { skillConfigs } = get();
808
758
  return deriveInstallMode(skillConfigs);
@@ -837,40 +787,26 @@ var useWizardStore = create((set, get) => ({
837
787
  const categories = buildCategoriesForDomain(
838
788
  domain,
839
789
  state.getAllSelectedTechnologies(),
840
- state.domainSelections[domain] ?? {},
841
790
  void 0,
842
- state.skillConfigs,
843
- state.filterIncompatible
791
+ state.skillConfigs
844
792
  );
845
793
  set({ focusedSkillId: categories[0]?.options[0]?.id ?? null });
846
794
  },
847
- setSourceSelection: (skillId, sourceId, scope) => set((state) => {
795
+ setInstallMode: (skillId, mode, scope) => set((state) => {
848
796
  if (!skillId) {
849
- warn("Ignoring setSourceSelection call with empty skillId");
797
+ warn("Ignoring setInstallMode call with empty skillId");
850
798
  return state;
851
799
  }
852
- if (!sourceId) {
853
- warn(`Ignoring setSourceSelection call with empty sourceId for skill '${skillId}'`);
800
+ if (isInheritedGlobalSlot(state.installedSkillConfigs, skillId, scope) && !state.isEditingFromGlobalScope) {
854
801
  return state;
855
802
  }
803
+ const source = sourceForInstallMode(getSkillById(skillId), mode);
856
804
  return {
857
- skillConfigs: withActiveEntrySource(state.skillConfigs, skillId, scope, sourceId)
805
+ skillConfigs: withActiveEntrySource(state.skillConfigs, skillId, scope, source)
858
806
  };
859
807
  }),
860
- setCustomizeSources: (customize) => set({ customizeSources: customize }),
861
- toggleSettings: () => set((state) => ({ showSettings: !state.showSettings })),
862
808
  toggleInfo: () => set((state) => ({ showInfo: !state.showInfo })),
863
809
  setToastMessage: (message) => set({ toastMessage: message }),
864
- bindSkill: (skill) => set((state) => {
865
- const exists = state.boundSkills.some(
866
- (b) => b.id === skill.id && b.sourceUrl === skill.sourceUrl
867
- );
868
- if (exists) {
869
- warn(`Skill '${skill.id}' from '${skill.sourceUrl}' is already bound \u2014 skipping duplicate`);
870
- return state;
871
- }
872
- return { boundSkills: [...state.boundSkills, skill] };
873
- }),
874
810
  goBack: () => set((state) => {
875
811
  if (state.history.length === 0) return state;
876
812
  const history = [...state.history];
@@ -923,7 +859,10 @@ var useWizardStore = create((set, get) => ({
923
859
  }),
924
860
  setFocusedAgentId: (id) => set({ focusedAgentId: id }),
925
861
  preselectAgentsFromDomains: () => set((state) => {
926
- const sorted = state.selectedDomains.flatMap((domain) => DOMAIN_AGENTS[domain] ?? []).sort();
862
+ if (state.selectedStackId) return state;
863
+ const sorted = [
864
+ ...new Set(state.selectedDomains.flatMap((domain) => DOMAIN_AGENTS[domain] ?? []))
865
+ ].sort();
927
866
  const roster = new Set(sorted);
928
867
  const merged = sorted.map((name) => buildAgentConfigForName(name, state.agentConfigs));
929
868
  const retained = state.agentConfigs.filter((ac) => survivesRosterRebuild(ac, roster));
@@ -962,7 +901,7 @@ var useWizardStore = create((set, get) => ({
962
901
  const state = get();
963
902
  const isStackDefaults = state.approach === "stack" && !!state.selectedStackId && state.stackAction === "defaults";
964
903
  const skippedSteps = isStackDefaults ? ["build", "sources", "agents"] : [];
965
- const precedingSteps = WIZARD_STEP_ORDER.slice(0, WIZARD_STEP_ORDER.indexOf(state.step));
904
+ const precedingSteps = stepsBefore(getActiveStepFlow(), state.step);
966
905
  const completedSteps = precedingSteps.filter((step) => !skippedSteps.includes(step));
967
906
  return { completedSteps, skippedSteps };
968
907
  },
@@ -974,40 +913,17 @@ var useWizardStore = create((set, get) => ({
974
913
  const state = get();
975
914
  return state.currentDomainIndex > 0;
976
915
  },
977
- setAllSourcesEject: () => {
978
- set((state) => ({
979
- // Never touch tombstones — a dual-scope skill's excluded global tombstone keeps describing
980
- // the masked global install. The bulk set-all applies only to active entries, mirroring the
981
- // D-262 per-skill setSkillSource/setSourceSelection guard (D-265).
982
- skillConfigs: state.skillConfigs.map(
983
- (sc) => sc.excluded ? sc : { ...sc, source: EJECT_SOURCE }
984
- )
985
- }));
986
- },
987
- setAllSourcesPlugin: () => {
988
- set((state) => ({
989
- // Never touch tombstones (see setAllSourcesEject) — the excluded global tombstone keeps its
990
- // marketplace source describing the masked global install (D-265).
991
- skillConfigs: state.skillConfigs.map((sc) => {
992
- if (sc.excluded) return sc;
993
- const marketplaceSource = getSkillById(sc.id).availableSources?.find(
994
- (source) => source.type !== "local"
995
- );
996
- return marketplaceSource ? { ...sc, source: marketplaceSource.name } : sc;
997
- })
998
- }));
999
- },
1000
916
  buildSourceRows: () => {
1001
917
  const state = get();
1002
918
  const selectedTechnologies = get().getAllSelectedTechnologies();
1003
- const { skillConfigs, boundSkills } = state;
919
+ const { skillConfigs } = state;
1004
920
  const selectedSet = new Set(selectedTechnologies);
1005
921
  const inheritedSkillIds = skillConfigs.filter((sc) => !sc.excluded && !selectedSet.has(sc.id)).map((sc) => sc.id);
1006
922
  const allActiveIds = /* @__PURE__ */ new Set([...inheritedSkillIds, ...selectedTechnologies]);
1007
923
  const excludedGlobalIds = skillConfigs.filter((sc) => isGlobalTombstone(sc) && !allActiveIds.has(sc.id)).map((sc) => sc.id);
1008
924
  const liveSkillIds = [...inheritedSkillIds, ...selectedTechnologies, ...excludedGlobalIds];
1009
925
  const installedSkillSlots = collectInstalledSkillSlots(state.installedSkillConfigs);
1010
- const resolveRowInputs = (id) => resolveSkillRowInputs(id, skillConfigs, boundSkills);
926
+ const resolveRowInputs = (id) => resolveSkillRowInputs(id, skillConfigs);
1011
927
  const liveRows = liveSkillIds.flatMap((id) => {
1012
928
  const { skillId, configEntry, options } = resolveRowInputs(id);
1013
929
  return classifySkillSourceRows(skillId, options, {
@@ -1071,6 +987,7 @@ function hydrateForEdit(initialStep, options) {
1071
987
  });
1072
988
  useWizardStore.getState().seedFocusedSkillForActiveDomain();
1073
989
  }
990
+ var FIRST_STEP_WITHOUT_STACKS = "domains";
1074
991
  function hydrateForInit(options) {
1075
992
  const {
1076
993
  initialDomains,
@@ -1098,6 +1015,10 @@ function hydrateForInit(options) {
1098
1015
  }
1099
1016
  } : {}
1100
1017
  });
1018
+ if (!offersStacks()) {
1019
+ useWizardStore.getState().startFromScratch();
1020
+ useWizardStore.setState({ step: FIRST_STEP_WITHOUT_STACKS, history: [] });
1021
+ }
1101
1022
  useWizardStore.getState().seedFocusedSkillForActiveDomain();
1102
1023
  }
1103
1024
 
@@ -1108,8 +1029,9 @@ export {
1108
1029
  buildCategoriesForDomain,
1109
1030
  orderDomains,
1110
1031
  WIZARD_STEP_ORDER,
1032
+ getActiveStepFlow,
1111
1033
  createInitialState,
1112
1034
  useWizardStore,
1113
1035
  hydrateWizardStore
1114
1036
  };
1115
- //# sourceMappingURL=chunk-5UWKOOIS.js.map
1037
+ //# sourceMappingURL=chunk-QQTYMW7N.js.map