@agents-inc/cli 0.32.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 (497) hide show
  1. package/CHANGELOG.md +462 -0
  2. package/LICENSE +21 -0
  3. package/README.md +179 -0
  4. package/config/skills-matrix.yaml +926 -0
  5. package/config/stacks.yaml +2186 -0
  6. package/dist/chunk-3ZOIOVKT.js +365 -0
  7. package/dist/chunk-3ZOIOVKT.js.map +1 -0
  8. package/dist/chunk-4RAY5AOI.js +78 -0
  9. package/dist/chunk-4RAY5AOI.js.map +1 -0
  10. package/dist/chunk-5PIKNCZX.js +234 -0
  11. package/dist/chunk-5PIKNCZX.js.map +1 -0
  12. package/dist/chunk-66UDJBF6.js +96 -0
  13. package/dist/chunk-66UDJBF6.js.map +1 -0
  14. package/dist/chunk-7SOPVGDV.js +24 -0
  15. package/dist/chunk-7SOPVGDV.js.map +1 -0
  16. package/dist/chunk-A27LOC4Z.js +95 -0
  17. package/dist/chunk-A27LOC4Z.js.map +1 -0
  18. package/dist/chunk-B2UBHA66.js +301 -0
  19. package/dist/chunk-B2UBHA66.js.map +1 -0
  20. package/dist/chunk-BZN2Z5P7.js +882 -0
  21. package/dist/chunk-BZN2Z5P7.js.map +1 -0
  22. package/dist/chunk-BZQBJP34.js +186 -0
  23. package/dist/chunk-BZQBJP34.js.map +1 -0
  24. package/dist/chunk-DC5AK3LW.js +105 -0
  25. package/dist/chunk-DC5AK3LW.js.map +1 -0
  26. package/dist/chunk-DHET7RCE.js +50 -0
  27. package/dist/chunk-DHET7RCE.js.map +1 -0
  28. package/dist/chunk-EMJ2ZKS7.js +346 -0
  29. package/dist/chunk-EMJ2ZKS7.js.map +1 -0
  30. package/dist/chunk-FJQRVFMB.js +48 -0
  31. package/dist/chunk-FJQRVFMB.js.map +1 -0
  32. package/dist/chunk-FZGYSLJL.js +85 -0
  33. package/dist/chunk-FZGYSLJL.js.map +1 -0
  34. package/dist/chunk-H566H3MQ.js +87 -0
  35. package/dist/chunk-H566H3MQ.js.map +1 -0
  36. package/dist/chunk-IYG2LAIM.js +90 -0
  37. package/dist/chunk-IYG2LAIM.js.map +1 -0
  38. package/dist/chunk-IZZ4IIEG.js +29 -0
  39. package/dist/chunk-IZZ4IIEG.js.map +1 -0
  40. package/dist/chunk-JMVWYAHT.js +63 -0
  41. package/dist/chunk-JMVWYAHT.js.map +1 -0
  42. package/dist/chunk-LAPCUV4D.js +191 -0
  43. package/dist/chunk-LAPCUV4D.js.map +1 -0
  44. package/dist/chunk-LGUI3PMO.js +109 -0
  45. package/dist/chunk-LGUI3PMO.js.map +1 -0
  46. package/dist/chunk-MM7NK5N2.js +4542 -0
  47. package/dist/chunk-MM7NK5N2.js.map +1 -0
  48. package/dist/chunk-N6S7ZRIL.js +31 -0
  49. package/dist/chunk-N6S7ZRIL.js.map +1 -0
  50. package/dist/chunk-O4D67NN7.js +24 -0
  51. package/dist/chunk-O4D67NN7.js.map +1 -0
  52. package/dist/chunk-ODUOU55D.js +56 -0
  53. package/dist/chunk-ODUOU55D.js.map +1 -0
  54. package/dist/chunk-OGJIZ6QH.js +497 -0
  55. package/dist/chunk-OGJIZ6QH.js.map +1 -0
  56. package/dist/chunk-OMV7TLWD.js +340 -0
  57. package/dist/chunk-OMV7TLWD.js.map +1 -0
  58. package/dist/chunk-PBEHPQLK.js +146 -0
  59. package/dist/chunk-PBEHPQLK.js.map +1 -0
  60. package/dist/chunk-QPTOIZAT.js +32 -0
  61. package/dist/chunk-QPTOIZAT.js.map +1 -0
  62. package/dist/chunk-R3XFQKPG.js +111 -0
  63. package/dist/chunk-R3XFQKPG.js.map +1 -0
  64. package/dist/chunk-R74PZWQS.js +69 -0
  65. package/dist/chunk-R74PZWQS.js.map +1 -0
  66. package/dist/chunk-SO22IQPY.js +45 -0
  67. package/dist/chunk-SO22IQPY.js.map +1 -0
  68. package/dist/chunk-T4EXUIBY.js +19 -0
  69. package/dist/chunk-T4EXUIBY.js.map +1 -0
  70. package/dist/chunk-U3IGFMCY.js +31 -0
  71. package/dist/chunk-U3IGFMCY.js.map +1 -0
  72. package/dist/chunk-UICL22RT.js +318 -0
  73. package/dist/chunk-UICL22RT.js.map +1 -0
  74. package/dist/chunk-UX2H2K2G.js +183 -0
  75. package/dist/chunk-UX2H2K2G.js.map +1 -0
  76. package/dist/chunk-W2ZSCZ2U.js +93 -0
  77. package/dist/chunk-W2ZSCZ2U.js.map +1 -0
  78. package/dist/chunk-WEUVWHMA.js +189 -0
  79. package/dist/chunk-WEUVWHMA.js.map +1 -0
  80. package/dist/chunk-XY3XDVMI.js +15599 -0
  81. package/dist/chunk-XY3XDVMI.js.map +1 -0
  82. package/dist/chunk-YND42IXK.js +233 -0
  83. package/dist/chunk-YND42IXK.js.map +1 -0
  84. package/dist/chunk-YZTWZVGX.js +41 -0
  85. package/dist/chunk-YZTWZVGX.js.map +1 -0
  86. package/dist/chunk-Z4TWOP3H.js +81 -0
  87. package/dist/chunk-Z4TWOP3H.js.map +1 -0
  88. package/dist/cli/defaults/agent-mappings.yaml +271 -0
  89. package/dist/commands/build/marketplace.js +252 -0
  90. package/dist/commands/build/marketplace.js.map +1 -0
  91. package/dist/commands/build/plugins.js +114 -0
  92. package/dist/commands/build/plugins.js.map +1 -0
  93. package/dist/commands/build/stack.js +153 -0
  94. package/dist/commands/build/stack.js.map +1 -0
  95. package/dist/commands/compile.js +354 -0
  96. package/dist/commands/compile.js.map +1 -0
  97. package/dist/commands/config/get.js +61 -0
  98. package/dist/commands/config/get.js.map +1 -0
  99. package/dist/commands/config/index.js +23 -0
  100. package/dist/commands/config/index.js.map +1 -0
  101. package/dist/commands/config/path.js +34 -0
  102. package/dist/commands/config/path.js.map +1 -0
  103. package/dist/commands/config/set-project.js +61 -0
  104. package/dist/commands/config/set-project.js.map +1 -0
  105. package/dist/commands/config/show.js +14 -0
  106. package/dist/commands/config/show.js.map +1 -0
  107. package/dist/commands/config/unset-project.js +57 -0
  108. package/dist/commands/config/unset-project.js.map +1 -0
  109. package/dist/commands/diff.js +742 -0
  110. package/dist/commands/diff.js.map +1 -0
  111. package/dist/commands/doctor.js +370 -0
  112. package/dist/commands/doctor.js.map +1 -0
  113. package/dist/commands/edit.js +301 -0
  114. package/dist/commands/edit.js.map +1 -0
  115. package/dist/commands/eject.js +262 -0
  116. package/dist/commands/eject.js.map +1 -0
  117. package/dist/commands/import/skill.js +361 -0
  118. package/dist/commands/import/skill.js.map +1 -0
  119. package/dist/commands/info.js +217 -0
  120. package/dist/commands/info.js.map +1 -0
  121. package/dist/commands/init.js +443 -0
  122. package/dist/commands/init.js.map +1 -0
  123. package/dist/commands/list.js +49 -0
  124. package/dist/commands/list.js.map +1 -0
  125. package/dist/commands/new/agent.js +224 -0
  126. package/dist/commands/new/agent.js.map +1 -0
  127. package/dist/commands/new/skill.js +199 -0
  128. package/dist/commands/new/skill.js.map +1 -0
  129. package/dist/commands/outdated.js +176 -0
  130. package/dist/commands/outdated.js.map +1 -0
  131. package/dist/commands/search.js +288 -0
  132. package/dist/commands/search.js.map +1 -0
  133. package/dist/commands/uninstall.js +302 -0
  134. package/dist/commands/uninstall.js.map +1 -0
  135. package/dist/commands/update.js +304 -0
  136. package/dist/commands/update.js.map +1 -0
  137. package/dist/commands/validate.js +389 -0
  138. package/dist/commands/validate.js.map +1 -0
  139. package/dist/commands/version/bump.js +79 -0
  140. package/dist/commands/version/bump.js.map +1 -0
  141. package/dist/commands/version/index.js +54 -0
  142. package/dist/commands/version/index.js.map +1 -0
  143. package/dist/commands/version/set.js +86 -0
  144. package/dist/commands/version/set.js.map +1 -0
  145. package/dist/commands/version/show.js +54 -0
  146. package/dist/commands/version/show.js.map +1 -0
  147. package/dist/components/common/confirm.js +9 -0
  148. package/dist/components/common/confirm.js.map +1 -0
  149. package/dist/components/common/confirm.test.js +203 -0
  150. package/dist/components/common/confirm.test.js.map +1 -0
  151. package/dist/components/common/message.js +20 -0
  152. package/dist/components/common/message.js.map +1 -0
  153. package/dist/components/common/spinner.js +14 -0
  154. package/dist/components/common/spinner.js.map +1 -0
  155. package/dist/components/skill-search/skill-search.js +12 -0
  156. package/dist/components/skill-search/skill-search.js.map +1 -0
  157. package/dist/components/wizard/category-grid.js +11 -0
  158. package/dist/components/wizard/category-grid.js.map +1 -0
  159. package/dist/components/wizard/category-grid.test.js +997 -0
  160. package/dist/components/wizard/category-grid.test.js.map +1 -0
  161. package/dist/components/wizard/domain-selection.js +14 -0
  162. package/dist/components/wizard/domain-selection.js.map +1 -0
  163. package/dist/components/wizard/help-modal.js +10 -0
  164. package/dist/components/wizard/help-modal.js.map +1 -0
  165. package/dist/components/wizard/menu-item.js +10 -0
  166. package/dist/components/wizard/menu-item.js.map +1 -0
  167. package/dist/components/wizard/search-modal.js +11 -0
  168. package/dist/components/wizard/search-modal.js.map +1 -0
  169. package/dist/components/wizard/search-modal.test.js +218 -0
  170. package/dist/components/wizard/search-modal.test.js.map +1 -0
  171. package/dist/components/wizard/section-progress.js +10 -0
  172. package/dist/components/wizard/section-progress.js.map +1 -0
  173. package/dist/components/wizard/section-progress.test.js +192 -0
  174. package/dist/components/wizard/section-progress.test.js.map +1 -0
  175. package/dist/components/wizard/source-grid.js +14 -0
  176. package/dist/components/wizard/source-grid.js.map +1 -0
  177. package/dist/components/wizard/source-grid.test.js +504 -0
  178. package/dist/components/wizard/source-grid.test.js.map +1 -0
  179. package/dist/components/wizard/stack-selection.js +17 -0
  180. package/dist/components/wizard/stack-selection.js.map +1 -0
  181. package/dist/components/wizard/step-build.js +17 -0
  182. package/dist/components/wizard/step-build.js.map +1 -0
  183. package/dist/components/wizard/step-build.test.js +600 -0
  184. package/dist/components/wizard/step-build.test.js.map +1 -0
  185. package/dist/components/wizard/step-confirm.js +12 -0
  186. package/dist/components/wizard/step-confirm.js.map +1 -0
  187. package/dist/components/wizard/step-confirm.test.js +366 -0
  188. package/dist/components/wizard/step-confirm.test.js.map +1 -0
  189. package/dist/components/wizard/step-refine.js +10 -0
  190. package/dist/components/wizard/step-refine.js.map +1 -0
  191. package/dist/components/wizard/step-refine.test.js +237 -0
  192. package/dist/components/wizard/step-refine.test.js.map +1 -0
  193. package/dist/components/wizard/step-settings.js +17 -0
  194. package/dist/components/wizard/step-settings.js.map +1 -0
  195. package/dist/components/wizard/step-settings.test.js +243 -0
  196. package/dist/components/wizard/step-settings.test.js.map +1 -0
  197. package/dist/components/wizard/step-sources.js +20 -0
  198. package/dist/components/wizard/step-sources.js.map +1 -0
  199. package/dist/components/wizard/step-sources.test.js +294 -0
  200. package/dist/components/wizard/step-sources.test.js.map +1 -0
  201. package/dist/components/wizard/step-stack.js +19 -0
  202. package/dist/components/wizard/step-stack.js.map +1 -0
  203. package/dist/components/wizard/step-stack.test.js +357 -0
  204. package/dist/components/wizard/step-stack.test.js.map +1 -0
  205. package/dist/components/wizard/view-title.js +10 -0
  206. package/dist/components/wizard/view-title.js.map +1 -0
  207. package/dist/components/wizard/wizard-layout.js +16 -0
  208. package/dist/components/wizard/wizard-layout.js.map +1 -0
  209. package/dist/components/wizard/wizard-tabs.js +14 -0
  210. package/dist/components/wizard/wizard-tabs.js.map +1 -0
  211. package/dist/components/wizard/wizard-tabs.test.js +294 -0
  212. package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
  213. package/dist/components/wizard/wizard.js +35 -0
  214. package/dist/components/wizard/wizard.js.map +1 -0
  215. package/dist/config/skills-matrix.yaml +926 -0
  216. package/dist/config/stacks.yaml +2186 -0
  217. package/dist/hooks/init.js +40 -0
  218. package/dist/hooks/init.js.map +1 -0
  219. package/dist/index.js +10 -0
  220. package/dist/index.js.map +1 -0
  221. package/dist/magic-string.es-RGXYGAW3.js +1316 -0
  222. package/dist/magic-string.es-RGXYGAW3.js.map +1 -0
  223. package/dist/source-manager-SBPPLOQQ.js +16 -0
  224. package/dist/source-manager-SBPPLOQQ.js.map +1 -0
  225. package/dist/src/agents/_templates/agent.liquid +140 -0
  226. package/dist/src/agents/developer/api-developer/agent.yaml +12 -0
  227. package/dist/src/agents/developer/api-developer/critical-reminders.md +23 -0
  228. package/dist/src/agents/developer/api-developer/critical-requirements.md +11 -0
  229. package/dist/src/agents/developer/api-developer/examples.md +72 -0
  230. package/dist/src/agents/developer/api-developer/intro.md +22 -0
  231. package/dist/src/agents/developer/api-developer/output-format.md +359 -0
  232. package/dist/src/agents/developer/api-developer/workflow.md +471 -0
  233. package/dist/src/agents/developer/cli-developer/agent.yaml +12 -0
  234. package/dist/src/agents/developer/cli-developer/critical-reminders.md +28 -0
  235. package/dist/src/agents/developer/cli-developer/critical-requirements.md +15 -0
  236. package/dist/src/agents/developer/cli-developer/examples.md +68 -0
  237. package/dist/src/agents/developer/cli-developer/intro.md +23 -0
  238. package/dist/src/agents/developer/cli-developer/output-format.md +216 -0
  239. package/dist/src/agents/developer/cli-developer/workflow.md +509 -0
  240. package/dist/src/agents/developer/web-architecture/agent.yaml +12 -0
  241. package/dist/src/agents/developer/web-architecture/critical-reminders.md +27 -0
  242. package/dist/src/agents/developer/web-architecture/critical-requirements.md +35 -0
  243. package/dist/src/agents/developer/web-architecture/examples.md +187 -0
  244. package/dist/src/agents/developer/web-architecture/intro.md +35 -0
  245. package/dist/src/agents/developer/web-architecture/output-format.md +261 -0
  246. package/dist/src/agents/developer/web-architecture/workflow.md +599 -0
  247. package/dist/src/agents/developer/web-developer/agent.yaml +12 -0
  248. package/dist/src/agents/developer/web-developer/critical-reminders.md +17 -0
  249. package/dist/src/agents/developer/web-developer/critical-requirements.md +15 -0
  250. package/dist/src/agents/developer/web-developer/examples.md +109 -0
  251. package/dist/src/agents/developer/web-developer/intro.md +5 -0
  252. package/dist/src/agents/developer/web-developer/output-format.md +213 -0
  253. package/dist/src/agents/developer/web-developer/workflow.md +459 -0
  254. package/dist/src/agents/meta/agent-summoner/agent.yaml +12 -0
  255. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +31 -0
  256. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +27 -0
  257. package/dist/src/agents/meta/agent-summoner/examples.md +176 -0
  258. package/dist/src/agents/meta/agent-summoner/intro.md +9 -0
  259. package/dist/src/agents/meta/agent-summoner/output-format.md +115 -0
  260. package/dist/src/agents/meta/agent-summoner/workflow.md +1540 -0
  261. package/dist/src/agents/meta/documentor/agent.yaml +11 -0
  262. package/dist/src/agents/meta/documentor/critical-reminders.md +23 -0
  263. package/dist/src/agents/meta/documentor/critical-requirements.md +13 -0
  264. package/dist/src/agents/meta/documentor/examples.md +147 -0
  265. package/dist/src/agents/meta/documentor/intro.md +11 -0
  266. package/dist/src/agents/meta/documentor/output-format.md +237 -0
  267. package/dist/src/agents/meta/documentor/workflow.md +1271 -0
  268. package/dist/src/agents/meta/skill-summoner/agent.yaml +13 -0
  269. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +73 -0
  270. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
  271. package/dist/src/agents/meta/skill-summoner/examples.md +116 -0
  272. package/dist/src/agents/meta/skill-summoner/intro.md +5 -0
  273. package/dist/src/agents/meta/skill-summoner/output-format.md +279 -0
  274. package/dist/src/agents/meta/skill-summoner/workflow.md +1485 -0
  275. package/dist/src/agents/migration/cli-migrator/agent.yaml +12 -0
  276. package/dist/src/agents/migration/cli-migrator/anti-patterns.md +158 -0
  277. package/dist/src/agents/migration/cli-migrator/conversion-mappings.md +63 -0
  278. package/dist/src/agents/migration/cli-migrator/critical-reminders.md +17 -0
  279. package/dist/src/agents/migration/cli-migrator/critical-requirements.md +13 -0
  280. package/dist/src/agents/migration/cli-migrator/intro.md +15 -0
  281. package/dist/src/agents/migration/cli-migrator/output-format.md +164 -0
  282. package/dist/src/agents/migration/cli-migrator/workflow.md +230 -0
  283. package/dist/src/agents/pattern/pattern-scout/agent.yaml +10 -0
  284. package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +58 -0
  285. package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +17 -0
  286. package/dist/src/agents/pattern/pattern-scout/examples.md +93 -0
  287. package/dist/src/agents/pattern/pattern-scout/intro.md +3 -0
  288. package/dist/src/agents/pattern/pattern-scout/output-format.md +196 -0
  289. package/dist/src/agents/pattern/pattern-scout/workflow.md +1901 -0
  290. package/dist/src/agents/pattern/web-pattern-critique/agent.yaml +12 -0
  291. package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +13 -0
  292. package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +11 -0
  293. package/dist/src/agents/pattern/web-pattern-critique/examples.md +56 -0
  294. package/dist/src/agents/pattern/web-pattern-critique/intro.md +5 -0
  295. package/dist/src/agents/pattern/web-pattern-critique/output-format.md +257 -0
  296. package/dist/src/agents/pattern/web-pattern-critique/workflow.md +674 -0
  297. package/dist/src/agents/planning/web-pm/agent.yaml +12 -0
  298. package/dist/src/agents/planning/web-pm/critical-reminders.md +21 -0
  299. package/dist/src/agents/planning/web-pm/critical-requirements.md +17 -0
  300. package/dist/src/agents/planning/web-pm/examples.md +85 -0
  301. package/dist/src/agents/planning/web-pm/intro.md +3 -0
  302. package/dist/src/agents/planning/web-pm/output-format.md +228 -0
  303. package/dist/src/agents/planning/web-pm/workflow.md +393 -0
  304. package/dist/src/agents/researcher/api-researcher/agent.yaml +10 -0
  305. package/dist/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
  306. package/dist/src/agents/researcher/api-researcher/critical-requirements.md +13 -0
  307. package/dist/src/agents/researcher/api-researcher/examples.md +116 -0
  308. package/dist/src/agents/researcher/api-researcher/intro.md +32 -0
  309. package/dist/src/agents/researcher/api-researcher/output-format.md +135 -0
  310. package/dist/src/agents/researcher/api-researcher/workflow.md +261 -0
  311. package/dist/src/agents/researcher/web-researcher/agent.yaml +10 -0
  312. package/dist/src/agents/researcher/web-researcher/critical-reminders.md +23 -0
  313. package/dist/src/agents/researcher/web-researcher/critical-requirements.md +11 -0
  314. package/dist/src/agents/researcher/web-researcher/examples.md +126 -0
  315. package/dist/src/agents/researcher/web-researcher/intro.md +31 -0
  316. package/dist/src/agents/researcher/web-researcher/output-format.md +112 -0
  317. package/dist/src/agents/researcher/web-researcher/workflow.md +322 -0
  318. package/dist/src/agents/reviewer/api-reviewer/agent.yaml +12 -0
  319. package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +16 -0
  320. package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +13 -0
  321. package/dist/src/agents/reviewer/api-reviewer/examples.md +54 -0
  322. package/dist/src/agents/reviewer/api-reviewer/intro.md +22 -0
  323. package/dist/src/agents/reviewer/api-reviewer/output-format.md +288 -0
  324. package/dist/src/agents/reviewer/api-reviewer/workflow.md +369 -0
  325. package/dist/src/agents/reviewer/cli-reviewer/agent.yaml +12 -0
  326. package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +17 -0
  327. package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +13 -0
  328. package/dist/src/agents/reviewer/cli-reviewer/examples.md +83 -0
  329. package/dist/src/agents/reviewer/cli-reviewer/intro.md +21 -0
  330. package/dist/src/agents/reviewer/cli-reviewer/output-format.md +330 -0
  331. package/dist/src/agents/reviewer/cli-reviewer/workflow.md +294 -0
  332. package/dist/src/agents/reviewer/web-reviewer/agent.yaml +12 -0
  333. package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +17 -0
  334. package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +11 -0
  335. package/dist/src/agents/reviewer/web-reviewer/examples.md +79 -0
  336. package/dist/src/agents/reviewer/web-reviewer/intro.md +20 -0
  337. package/dist/src/agents/reviewer/web-reviewer/output-format.md +253 -0
  338. package/dist/src/agents/reviewer/web-reviewer/workflow.md +228 -0
  339. package/dist/src/agents/tester/cli-tester/agent.yaml +12 -0
  340. package/dist/src/agents/tester/cli-tester/critical-reminders.md +19 -0
  341. package/dist/src/agents/tester/cli-tester/critical-requirements.md +17 -0
  342. package/dist/src/agents/tester/cli-tester/examples.md +80 -0
  343. package/dist/src/agents/tester/cli-tester/intro.md +19 -0
  344. package/dist/src/agents/tester/cli-tester/output-format.md +232 -0
  345. package/dist/src/agents/tester/cli-tester/workflow.md +304 -0
  346. package/dist/src/agents/tester/web-tester/agent.yaml +12 -0
  347. package/dist/src/agents/tester/web-tester/critical-reminders.md +15 -0
  348. package/dist/src/agents/tester/web-tester/critical-requirements.md +11 -0
  349. package/dist/src/agents/tester/web-tester/examples.md +68 -0
  350. package/dist/src/agents/tester/web-tester/intro.md +18 -0
  351. package/dist/src/agents/tester/web-tester/output-format.md +252 -0
  352. package/dist/src/agents/tester/web-tester/workflow.md +507 -0
  353. package/dist/stores/wizard-store.js +13 -0
  354. package/dist/stores/wizard-store.js.map +1 -0
  355. package/dist/stores/wizard-store.test.js +689 -0
  356. package/dist/stores/wizard-store.test.js.map +1 -0
  357. package/package.json +134 -0
  358. package/src/agents/_templates/agent.liquid +140 -0
  359. package/src/agents/developer/api-developer/agent.yaml +12 -0
  360. package/src/agents/developer/api-developer/critical-reminders.md +23 -0
  361. package/src/agents/developer/api-developer/critical-requirements.md +11 -0
  362. package/src/agents/developer/api-developer/examples.md +72 -0
  363. package/src/agents/developer/api-developer/intro.md +22 -0
  364. package/src/agents/developer/api-developer/output-format.md +359 -0
  365. package/src/agents/developer/api-developer/workflow.md +471 -0
  366. package/src/agents/developer/cli-developer/agent.yaml +12 -0
  367. package/src/agents/developer/cli-developer/critical-reminders.md +28 -0
  368. package/src/agents/developer/cli-developer/critical-requirements.md +15 -0
  369. package/src/agents/developer/cli-developer/examples.md +68 -0
  370. package/src/agents/developer/cli-developer/intro.md +23 -0
  371. package/src/agents/developer/cli-developer/output-format.md +216 -0
  372. package/src/agents/developer/cli-developer/workflow.md +509 -0
  373. package/src/agents/developer/web-architecture/agent.yaml +12 -0
  374. package/src/agents/developer/web-architecture/critical-reminders.md +27 -0
  375. package/src/agents/developer/web-architecture/critical-requirements.md +35 -0
  376. package/src/agents/developer/web-architecture/examples.md +187 -0
  377. package/src/agents/developer/web-architecture/intro.md +35 -0
  378. package/src/agents/developer/web-architecture/output-format.md +261 -0
  379. package/src/agents/developer/web-architecture/workflow.md +599 -0
  380. package/src/agents/developer/web-developer/agent.yaml +12 -0
  381. package/src/agents/developer/web-developer/critical-reminders.md +17 -0
  382. package/src/agents/developer/web-developer/critical-requirements.md +15 -0
  383. package/src/agents/developer/web-developer/examples.md +109 -0
  384. package/src/agents/developer/web-developer/intro.md +5 -0
  385. package/src/agents/developer/web-developer/output-format.md +213 -0
  386. package/src/agents/developer/web-developer/workflow.md +459 -0
  387. package/src/agents/meta/agent-summoner/agent.yaml +12 -0
  388. package/src/agents/meta/agent-summoner/critical-reminders.md +31 -0
  389. package/src/agents/meta/agent-summoner/critical-requirements.md +27 -0
  390. package/src/agents/meta/agent-summoner/examples.md +176 -0
  391. package/src/agents/meta/agent-summoner/intro.md +9 -0
  392. package/src/agents/meta/agent-summoner/output-format.md +115 -0
  393. package/src/agents/meta/agent-summoner/workflow.md +1540 -0
  394. package/src/agents/meta/documentor/agent.yaml +11 -0
  395. package/src/agents/meta/documentor/critical-reminders.md +23 -0
  396. package/src/agents/meta/documentor/critical-requirements.md +13 -0
  397. package/src/agents/meta/documentor/examples.md +147 -0
  398. package/src/agents/meta/documentor/intro.md +11 -0
  399. package/src/agents/meta/documentor/output-format.md +237 -0
  400. package/src/agents/meta/documentor/workflow.md +1271 -0
  401. package/src/agents/meta/skill-summoner/agent.yaml +13 -0
  402. package/src/agents/meta/skill-summoner/critical-reminders.md +73 -0
  403. package/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
  404. package/src/agents/meta/skill-summoner/examples.md +116 -0
  405. package/src/agents/meta/skill-summoner/intro.md +5 -0
  406. package/src/agents/meta/skill-summoner/output-format.md +279 -0
  407. package/src/agents/meta/skill-summoner/workflow.md +1485 -0
  408. package/src/agents/migration/cli-migrator/agent.yaml +12 -0
  409. package/src/agents/migration/cli-migrator/anti-patterns.md +158 -0
  410. package/src/agents/migration/cli-migrator/conversion-mappings.md +63 -0
  411. package/src/agents/migration/cli-migrator/critical-reminders.md +17 -0
  412. package/src/agents/migration/cli-migrator/critical-requirements.md +13 -0
  413. package/src/agents/migration/cli-migrator/intro.md +15 -0
  414. package/src/agents/migration/cli-migrator/output-format.md +164 -0
  415. package/src/agents/migration/cli-migrator/workflow.md +230 -0
  416. package/src/agents/pattern/pattern-scout/agent.yaml +10 -0
  417. package/src/agents/pattern/pattern-scout/critical-reminders.md +58 -0
  418. package/src/agents/pattern/pattern-scout/critical-requirements.md +17 -0
  419. package/src/agents/pattern/pattern-scout/examples.md +93 -0
  420. package/src/agents/pattern/pattern-scout/intro.md +3 -0
  421. package/src/agents/pattern/pattern-scout/output-format.md +196 -0
  422. package/src/agents/pattern/pattern-scout/workflow.md +1901 -0
  423. package/src/agents/pattern/web-pattern-critique/agent.yaml +12 -0
  424. package/src/agents/pattern/web-pattern-critique/critical-reminders.md +13 -0
  425. package/src/agents/pattern/web-pattern-critique/critical-requirements.md +11 -0
  426. package/src/agents/pattern/web-pattern-critique/examples.md +56 -0
  427. package/src/agents/pattern/web-pattern-critique/intro.md +5 -0
  428. package/src/agents/pattern/web-pattern-critique/output-format.md +257 -0
  429. package/src/agents/pattern/web-pattern-critique/workflow.md +674 -0
  430. package/src/agents/planning/web-pm/agent.yaml +12 -0
  431. package/src/agents/planning/web-pm/critical-reminders.md +21 -0
  432. package/src/agents/planning/web-pm/critical-requirements.md +17 -0
  433. package/src/agents/planning/web-pm/examples.md +85 -0
  434. package/src/agents/planning/web-pm/intro.md +3 -0
  435. package/src/agents/planning/web-pm/output-format.md +228 -0
  436. package/src/agents/planning/web-pm/workflow.md +393 -0
  437. package/src/agents/researcher/api-researcher/agent.yaml +10 -0
  438. package/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
  439. package/src/agents/researcher/api-researcher/critical-requirements.md +13 -0
  440. package/src/agents/researcher/api-researcher/examples.md +116 -0
  441. package/src/agents/researcher/api-researcher/intro.md +32 -0
  442. package/src/agents/researcher/api-researcher/output-format.md +135 -0
  443. package/src/agents/researcher/api-researcher/workflow.md +261 -0
  444. package/src/agents/researcher/web-researcher/agent.yaml +10 -0
  445. package/src/agents/researcher/web-researcher/critical-reminders.md +23 -0
  446. package/src/agents/researcher/web-researcher/critical-requirements.md +11 -0
  447. package/src/agents/researcher/web-researcher/examples.md +126 -0
  448. package/src/agents/researcher/web-researcher/intro.md +31 -0
  449. package/src/agents/researcher/web-researcher/output-format.md +112 -0
  450. package/src/agents/researcher/web-researcher/workflow.md +322 -0
  451. package/src/agents/reviewer/api-reviewer/agent.yaml +12 -0
  452. package/src/agents/reviewer/api-reviewer/critical-reminders.md +16 -0
  453. package/src/agents/reviewer/api-reviewer/critical-requirements.md +13 -0
  454. package/src/agents/reviewer/api-reviewer/examples.md +54 -0
  455. package/src/agents/reviewer/api-reviewer/intro.md +22 -0
  456. package/src/agents/reviewer/api-reviewer/output-format.md +288 -0
  457. package/src/agents/reviewer/api-reviewer/workflow.md +369 -0
  458. package/src/agents/reviewer/cli-reviewer/agent.yaml +12 -0
  459. package/src/agents/reviewer/cli-reviewer/critical-reminders.md +17 -0
  460. package/src/agents/reviewer/cli-reviewer/critical-requirements.md +13 -0
  461. package/src/agents/reviewer/cli-reviewer/examples.md +83 -0
  462. package/src/agents/reviewer/cli-reviewer/intro.md +21 -0
  463. package/src/agents/reviewer/cli-reviewer/output-format.md +330 -0
  464. package/src/agents/reviewer/cli-reviewer/workflow.md +294 -0
  465. package/src/agents/reviewer/web-reviewer/agent.yaml +12 -0
  466. package/src/agents/reviewer/web-reviewer/critical-reminders.md +17 -0
  467. package/src/agents/reviewer/web-reviewer/critical-requirements.md +11 -0
  468. package/src/agents/reviewer/web-reviewer/examples.md +79 -0
  469. package/src/agents/reviewer/web-reviewer/intro.md +20 -0
  470. package/src/agents/reviewer/web-reviewer/output-format.md +253 -0
  471. package/src/agents/reviewer/web-reviewer/workflow.md +228 -0
  472. package/src/agents/tester/cli-tester/agent.yaml +12 -0
  473. package/src/agents/tester/cli-tester/critical-reminders.md +19 -0
  474. package/src/agents/tester/cli-tester/critical-requirements.md +17 -0
  475. package/src/agents/tester/cli-tester/examples.md +80 -0
  476. package/src/agents/tester/cli-tester/intro.md +19 -0
  477. package/src/agents/tester/cli-tester/output-format.md +232 -0
  478. package/src/agents/tester/cli-tester/workflow.md +304 -0
  479. package/src/agents/tester/web-tester/agent.yaml +12 -0
  480. package/src/agents/tester/web-tester/critical-reminders.md +15 -0
  481. package/src/agents/tester/web-tester/critical-requirements.md +11 -0
  482. package/src/agents/tester/web-tester/examples.md +68 -0
  483. package/src/agents/tester/web-tester/intro.md +18 -0
  484. package/src/agents/tester/web-tester/output-format.md +252 -0
  485. package/src/agents/tester/web-tester/workflow.md +507 -0
  486. package/src/schemas/agent-frontmatter.schema.json +84 -0
  487. package/src/schemas/agent.schema.json +93 -0
  488. package/src/schemas/hooks.schema.json +47 -0
  489. package/src/schemas/marketplace.schema.json +119 -0
  490. package/src/schemas/metadata.schema.json +113 -0
  491. package/src/schemas/plugin.schema.json +130 -0
  492. package/src/schemas/project-config.schema.json +125 -0
  493. package/src/schemas/project-source-config.schema.json +81 -0
  494. package/src/schemas/skill-frontmatter.schema.json +42 -0
  495. package/src/schemas/skills-matrix.schema.json +467 -0
  496. package/src/schemas/stack.schema.json +191 -0
  497. package/src/schemas/stacks.schema.json +111 -0
@@ -0,0 +1,689 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ createMockCategory
4
+ } from "../chunk-BZQBJP34.js";
5
+ import {
6
+ beforeEach,
7
+ describe,
8
+ globalExpect,
9
+ it
10
+ } from "../chunk-XY3XDVMI.js";
11
+ import {
12
+ useWizardStore
13
+ } from "../chunk-3ZOIOVKT.js";
14
+ import "../chunk-MM7NK5N2.js";
15
+ import "../chunk-T4EXUIBY.js";
16
+ import "../chunk-BZN2Z5P7.js";
17
+ import {
18
+ DEFAULT_PRESELECTED_SKILLS
19
+ } from "../chunk-LAPCUV4D.js";
20
+ import {
21
+ init_esm_shims
22
+ } from "../chunk-DHET7RCE.js";
23
+
24
+ // src/cli/stores/wizard-store.test.ts
25
+ init_esm_shims();
26
+ function sa(id, preloaded = false) {
27
+ return { id, preloaded };
28
+ }
29
+ describe("WizardStore", () => {
30
+ beforeEach(() => {
31
+ useWizardStore.getState().reset();
32
+ });
33
+ describe("initial state", () => {
34
+ it("should start at stack step", () => {
35
+ const { step } = useWizardStore.getState();
36
+ globalExpect(step).toBe("stack");
37
+ });
38
+ it("should have no approach selected", () => {
39
+ const { approach } = useWizardStore.getState();
40
+ globalExpect(approach).toBeNull();
41
+ });
42
+ it("should have no selected stack", () => {
43
+ const { selectedStackId } = useWizardStore.getState();
44
+ globalExpect(selectedStackId).toBeNull();
45
+ });
46
+ it("should have expert mode off", () => {
47
+ const { expertMode } = useWizardStore.getState();
48
+ globalExpect(expertMode).toBe(false);
49
+ });
50
+ it("should default to local install mode", () => {
51
+ const { installMode } = useWizardStore.getState();
52
+ globalExpect(installMode).toBe("local");
53
+ });
54
+ it("should have empty navigation history", () => {
55
+ const { history } = useWizardStore.getState();
56
+ globalExpect(history).toEqual([]);
57
+ });
58
+ it("should have empty selected domains", () => {
59
+ const { selectedDomains } = useWizardStore.getState();
60
+ globalExpect(selectedDomains).toEqual([]);
61
+ });
62
+ it("should have empty domain selections", () => {
63
+ const { domainSelections } = useWizardStore.getState();
64
+ globalExpect(domainSelections).toEqual({});
65
+ });
66
+ });
67
+ describe("step navigation", () => {
68
+ it("should update step with setStep", () => {
69
+ const store = useWizardStore.getState();
70
+ store.setStep("stack");
71
+ const { step } = useWizardStore.getState();
72
+ globalExpect(step).toBe("stack");
73
+ });
74
+ it("should track navigation history when setting step", () => {
75
+ const store = useWizardStore.getState();
76
+ store.setStep("build");
77
+ store.setStep("confirm");
78
+ const { history } = useWizardStore.getState();
79
+ globalExpect(history).toEqual(["stack", "build"]);
80
+ });
81
+ it("should go back through history", () => {
82
+ const store = useWizardStore.getState();
83
+ store.setStep("build");
84
+ store.setStep("confirm");
85
+ store.goBack();
86
+ const { step, history } = useWizardStore.getState();
87
+ globalExpect(step).toBe("build");
88
+ globalExpect(history).toEqual(["stack"]);
89
+ });
90
+ it("when goBack is called with empty history, should return to stack step", () => {
91
+ const store = useWizardStore.getState();
92
+ store.setStep("build");
93
+ store.goBack();
94
+ store.goBack();
95
+ const { step } = useWizardStore.getState();
96
+ globalExpect(step).toBe("stack");
97
+ });
98
+ });
99
+ describe("approach selection", () => {
100
+ it("should set approach to stack", () => {
101
+ const store = useWizardStore.getState();
102
+ store.setApproach("stack");
103
+ const { approach } = useWizardStore.getState();
104
+ globalExpect(approach).toBe("stack");
105
+ });
106
+ it("should set approach to scratch", () => {
107
+ const store = useWizardStore.getState();
108
+ store.setApproach("scratch");
109
+ const { approach } = useWizardStore.getState();
110
+ globalExpect(approach).toBe("scratch");
111
+ });
112
+ });
113
+ describe("stack selection", () => {
114
+ it("should select stack by id", () => {
115
+ const store = useWizardStore.getState();
116
+ store.selectStack("nextjs-fullstack");
117
+ const { selectedStackId } = useWizardStore.getState();
118
+ globalExpect(selectedStackId).toBe("nextjs-fullstack");
119
+ });
120
+ it("when selectStack is called with null, should clear previously selected stack", () => {
121
+ const store = useWizardStore.getState();
122
+ store.selectStack("nextjs-fullstack");
123
+ store.selectStack(null);
124
+ const { selectedStackId } = useWizardStore.getState();
125
+ globalExpect(selectedStackId).toBeNull();
126
+ });
127
+ });
128
+ describe("domain selection", () => {
129
+ it("should toggle domain on", () => {
130
+ const store = useWizardStore.getState();
131
+ store.toggleDomain("web");
132
+ const { selectedDomains } = useWizardStore.getState();
133
+ globalExpect(selectedDomains).toContain("web");
134
+ });
135
+ it("should toggle domain off", () => {
136
+ const store = useWizardStore.getState();
137
+ store.toggleDomain("web");
138
+ store.toggleDomain("web");
139
+ const { selectedDomains } = useWizardStore.getState();
140
+ globalExpect(selectedDomains).not.toContain("web");
141
+ });
142
+ it("should allow multiple domain selection", () => {
143
+ const store = useWizardStore.getState();
144
+ store.toggleDomain("web");
145
+ store.toggleDomain("api");
146
+ store.toggleDomain("cli");
147
+ const { selectedDomains } = useWizardStore.getState();
148
+ globalExpect(selectedDomains).toEqual(["web", "api", "cli"]);
149
+ });
150
+ });
151
+ describe("technology selection", () => {
152
+ it("should toggle technology in exclusive mode", () => {
153
+ const store = useWizardStore.getState();
154
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
155
+ const { domainSelections } = useWizardStore.getState();
156
+ globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
157
+ });
158
+ it("should replace technology in exclusive mode", () => {
159
+ const store = useWizardStore.getState();
160
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
161
+ store.toggleTechnology("web", "framework", "web-framework-vue", true);
162
+ const { domainSelections } = useWizardStore.getState();
163
+ globalExpect(domainSelections.web.framework).toEqual(["web-framework-vue"]);
164
+ });
165
+ it("should toggle off technology in exclusive mode", () => {
166
+ const store = useWizardStore.getState();
167
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
168
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
169
+ const { domainSelections } = useWizardStore.getState();
170
+ globalExpect(domainSelections.web.framework).toEqual([]);
171
+ });
172
+ it("should allow multiple selections in non-exclusive mode", () => {
173
+ const store = useWizardStore.getState();
174
+ store.toggleTechnology("web", "testing", "web-testing-vitest", false);
175
+ store.toggleTechnology("web", "testing", "web-testing-playwright-e2e", false);
176
+ const { domainSelections } = useWizardStore.getState();
177
+ globalExpect(domainSelections.web.testing).toEqual([
178
+ "web-testing-vitest",
179
+ "web-testing-playwright-e2e"
180
+ ]);
181
+ });
182
+ it("should toggle off technology in non-exclusive mode", () => {
183
+ const store = useWizardStore.getState();
184
+ store.toggleTechnology("web", "testing", "web-testing-vitest", false);
185
+ store.toggleTechnology("web", "testing", "web-testing-playwright-e2e", false);
186
+ store.toggleTechnology("web", "testing", "web-testing-vitest", false);
187
+ const { domainSelections } = useWizardStore.getState();
188
+ globalExpect(domainSelections.web.testing).toEqual(["web-testing-playwright-e2e"]);
189
+ });
190
+ });
191
+ describe("domain navigation", () => {
192
+ it("should move to next domain", () => {
193
+ const store = useWizardStore.getState();
194
+ store.toggleDomain("web");
195
+ store.toggleDomain("api");
196
+ const result = store.nextDomain();
197
+ const { currentDomainIndex } = useWizardStore.getState();
198
+ globalExpect(result).toBe(true);
199
+ globalExpect(currentDomainIndex).toBe(1);
200
+ });
201
+ it("when already at the last domain, should return false from nextDomain", () => {
202
+ const store = useWizardStore.getState();
203
+ store.toggleDomain("web");
204
+ const result = store.nextDomain();
205
+ globalExpect(result).toBe(false);
206
+ });
207
+ it("should move to previous domain", () => {
208
+ const store = useWizardStore.getState();
209
+ store.toggleDomain("web");
210
+ store.toggleDomain("api");
211
+ store.nextDomain();
212
+ const result = store.prevDomain();
213
+ const { currentDomainIndex } = useWizardStore.getState();
214
+ globalExpect(result).toBe(true);
215
+ globalExpect(currentDomainIndex).toBe(0);
216
+ });
217
+ it("when already at the first domain, should return false from prevDomain", () => {
218
+ const store = useWizardStore.getState();
219
+ store.toggleDomain("web");
220
+ const result = store.prevDomain();
221
+ globalExpect(result).toBe(false);
222
+ });
223
+ it("should get current domain", () => {
224
+ const store = useWizardStore.getState();
225
+ store.toggleDomain("web");
226
+ store.toggleDomain("api");
227
+ store.nextDomain();
228
+ const domain = store.getCurrentDomain();
229
+ globalExpect(domain).toBe("api");
230
+ });
231
+ it("should return null when no domains selected", () => {
232
+ const store = useWizardStore.getState();
233
+ const domain = store.getCurrentDomain();
234
+ globalExpect(domain).toBeNull();
235
+ });
236
+ });
237
+ describe("mode toggles", () => {
238
+ it("should toggle expert mode on", () => {
239
+ const store = useWizardStore.getState();
240
+ store.toggleExpertMode();
241
+ const { expertMode } = useWizardStore.getState();
242
+ globalExpect(expertMode).toBe(true);
243
+ });
244
+ it("should toggle expert mode off", () => {
245
+ const store = useWizardStore.getState();
246
+ store.toggleExpertMode();
247
+ store.toggleExpertMode();
248
+ const { expertMode } = useWizardStore.getState();
249
+ globalExpect(expertMode).toBe(false);
250
+ });
251
+ it("should toggle install mode to plugin", () => {
252
+ const store = useWizardStore.getState();
253
+ store.toggleInstallMode();
254
+ const { installMode } = useWizardStore.getState();
255
+ globalExpect(installMode).toBe("plugin");
256
+ });
257
+ it("should toggle install mode back to local", () => {
258
+ const store = useWizardStore.getState();
259
+ store.toggleInstallMode();
260
+ store.toggleInstallMode();
261
+ const { installMode } = useWizardStore.getState();
262
+ globalExpect(installMode).toBe("local");
263
+ });
264
+ it("should toggle show descriptions", () => {
265
+ const store = useWizardStore.getState();
266
+ store.toggleShowDescriptions();
267
+ const { showDescriptions } = useWizardStore.getState();
268
+ globalExpect(showDescriptions).toBe(true);
269
+ });
270
+ it("should toggle help on", () => {
271
+ const store = useWizardStore.getState();
272
+ store.toggleHelp();
273
+ const { showHelp } = useWizardStore.getState();
274
+ globalExpect(showHelp).toBe(true);
275
+ });
276
+ it("should toggle help off (show then hide)", () => {
277
+ const store = useWizardStore.getState();
278
+ store.toggleHelp();
279
+ store.toggleHelp();
280
+ const { showHelp } = useWizardStore.getState();
281
+ globalExpect(showHelp).toBe(false);
282
+ });
283
+ it("should toggle settings on", () => {
284
+ const store = useWizardStore.getState();
285
+ store.toggleSettings();
286
+ const { showSettings } = useWizardStore.getState();
287
+ globalExpect(showSettings).toBe(true);
288
+ });
289
+ it("should toggle settings off (show then hide)", () => {
290
+ const store = useWizardStore.getState();
291
+ store.toggleSettings();
292
+ store.toggleSettings();
293
+ const { showSettings } = useWizardStore.getState();
294
+ globalExpect(showSettings).toBe(false);
295
+ });
296
+ it("should start with showHelp false", () => {
297
+ const { showHelp } = useWizardStore.getState();
298
+ globalExpect(showHelp).toBe(false);
299
+ });
300
+ it("should start with showSettings false", () => {
301
+ const { showSettings } = useWizardStore.getState();
302
+ globalExpect(showSettings).toBe(false);
303
+ });
304
+ it("should reset showHelp to false after reset", () => {
305
+ const store = useWizardStore.getState();
306
+ store.toggleHelp();
307
+ store.reset();
308
+ const { showHelp } = useWizardStore.getState();
309
+ globalExpect(showHelp).toBe(false);
310
+ });
311
+ it("should reset showSettings to false after reset", () => {
312
+ const store = useWizardStore.getState();
313
+ store.toggleSettings();
314
+ store.reset();
315
+ const { showSettings } = useWizardStore.getState();
316
+ globalExpect(showSettings).toBe(false);
317
+ });
318
+ });
319
+ describe("install mode auto-defaulting", () => {
320
+ it("should default installMode to plugin when set via setState (marketplace available)", () => {
321
+ useWizardStore.setState({ installMode: "plugin" });
322
+ const { installMode } = useWizardStore.getState();
323
+ globalExpect(installMode).toBe("plugin");
324
+ });
325
+ it("should keep installMode as local when set via setState (no marketplace)", () => {
326
+ useWizardStore.setState({ installMode: "local" });
327
+ const { installMode } = useWizardStore.getState();
328
+ globalExpect(installMode).toBe("local");
329
+ });
330
+ it("should allow toggling installMode after auto-defaulting to plugin", () => {
331
+ useWizardStore.setState({ installMode: "plugin" });
332
+ useWizardStore.getState().toggleInstallMode();
333
+ const { installMode } = useWizardStore.getState();
334
+ globalExpect(installMode).toBe("local");
335
+ });
336
+ it("should reset installMode to local after reset even if previously set to plugin", () => {
337
+ useWizardStore.setState({ installMode: "plugin" });
338
+ useWizardStore.getState().reset();
339
+ const { installMode } = useWizardStore.getState();
340
+ globalExpect(installMode).toBe("local");
341
+ });
342
+ });
343
+ describe("computed getters", () => {
344
+ it("should get all selected technologies", () => {
345
+ const store = useWizardStore.getState();
346
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
347
+ store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
348
+ store.toggleTechnology("api", "api", "api-framework-hono", true);
349
+ const technologies = store.getAllSelectedTechnologies();
350
+ globalExpect(technologies).toContain("web-framework-react");
351
+ globalExpect(technologies).toContain("web-styling-scss-modules");
352
+ globalExpect(technologies).toContain("api-framework-hono");
353
+ });
354
+ it("should get default methodology skills", () => {
355
+ const store = useWizardStore.getState();
356
+ const skills = store.getDefaultMethodologySkills();
357
+ for (const skill of DEFAULT_PRESELECTED_SKILLS) {
358
+ globalExpect(skills).toContain(skill);
359
+ }
360
+ });
361
+ it("should get selected technologies per domain", () => {
362
+ const store = useWizardStore.getState();
363
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
364
+ store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
365
+ store.toggleTechnology("api", "api", "api-framework-hono", true);
366
+ const perDomain = store.getSelectedTechnologiesPerDomain();
367
+ globalExpect(perDomain.web).toEqual(["web-framework-react", "web-styling-scss-modules"]);
368
+ globalExpect(perDomain.api).toEqual(["api-framework-hono"]);
369
+ globalExpect(perDomain.cli).toBeUndefined();
370
+ });
371
+ it("should return empty object for getSelectedTechnologiesPerDomain with no selections", () => {
372
+ const store = useWizardStore.getState();
373
+ const perDomain = store.getSelectedTechnologiesPerDomain();
374
+ globalExpect(perDomain).toEqual({});
375
+ });
376
+ it("should omit domains with empty subcategory arrays from getSelectedTechnologiesPerDomain", () => {
377
+ const store = useWizardStore.getState();
378
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
379
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
380
+ const perDomain = store.getSelectedTechnologiesPerDomain();
381
+ globalExpect(perDomain.web).toBeUndefined();
382
+ });
383
+ it("should get technology count", () => {
384
+ const store = useWizardStore.getState();
385
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
386
+ store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
387
+ store.toggleTechnology("api", "api", "api-framework-hono", true);
388
+ globalExpect(store.getTechnologyCount()).toBe(3);
389
+ });
390
+ it("should return 0 for getTechnologyCount with no selections", () => {
391
+ const store = useWizardStore.getState();
392
+ globalExpect(store.getTechnologyCount()).toBe(0);
393
+ });
394
+ });
395
+ describe("navigation guards", () => {
396
+ it("canGoToNextDomain should return true when not at last domain", () => {
397
+ const store = useWizardStore.getState();
398
+ store.toggleDomain("web");
399
+ store.toggleDomain("api");
400
+ globalExpect(store.canGoToNextDomain()).toBe(true);
401
+ });
402
+ it("canGoToNextDomain should return false when at last domain", () => {
403
+ const store = useWizardStore.getState();
404
+ store.toggleDomain("web");
405
+ globalExpect(store.canGoToNextDomain()).toBe(false);
406
+ });
407
+ it("canGoToNextDomain should return false with no domains", () => {
408
+ const store = useWizardStore.getState();
409
+ globalExpect(store.canGoToNextDomain()).toBe(false);
410
+ });
411
+ it("canGoToPreviousDomain should return false when at first domain", () => {
412
+ const store = useWizardStore.getState();
413
+ store.toggleDomain("web");
414
+ store.toggleDomain("api");
415
+ globalExpect(store.canGoToPreviousDomain()).toBe(false);
416
+ });
417
+ it("canGoToPreviousDomain should return true when past first domain", () => {
418
+ const store = useWizardStore.getState();
419
+ store.toggleDomain("web");
420
+ store.toggleDomain("api");
421
+ store.nextDomain();
422
+ globalExpect(store.canGoToPreviousDomain()).toBe(true);
423
+ });
424
+ it("canGoToPreviousDomain should return false with no domains", () => {
425
+ const store = useWizardStore.getState();
426
+ globalExpect(store.canGoToPreviousDomain()).toBe(false);
427
+ });
428
+ });
429
+ describe("parent domain selectors", () => {
430
+ const matrixWithParentDomain = {
431
+ categories: {
432
+ "error-handling": createMockCategory("error-handling", "Error Handling", {
433
+ domain: "web-extras",
434
+ parent_domain: "web",
435
+ exclusive: false
436
+ }),
437
+ framework: createMockCategory("framework", "Framework", {
438
+ domain: "web"
439
+ })
440
+ }
441
+ };
442
+ const matrixWithoutParent = {
443
+ categories: {
444
+ framework: createMockCategory("framework", "Framework", {
445
+ domain: "web"
446
+ })
447
+ }
448
+ };
449
+ it("should find parent domain for a domain with parent_domain", () => {
450
+ const store = useWizardStore.getState();
451
+ const parent = store.getParentDomain(
452
+ "web-extras",
453
+ matrixWithParentDomain
454
+ );
455
+ globalExpect(parent).toBe("web");
456
+ });
457
+ it("should return undefined for a domain without parent_domain", () => {
458
+ const store = useWizardStore.getState();
459
+ const parent = store.getParentDomain("web", matrixWithoutParent);
460
+ globalExpect(parent).toBeUndefined();
461
+ });
462
+ it("should get parent domain selections when parent exists", () => {
463
+ const store = useWizardStore.getState();
464
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
465
+ const parentSelections = store.getParentDomainSelections(
466
+ "web-extras",
467
+ matrixWithParentDomain
468
+ );
469
+ globalExpect(parentSelections).toEqual({ framework: ["web-framework-react"] });
470
+ });
471
+ it("should return undefined for getParentDomainSelections when no parent", () => {
472
+ const store = useWizardStore.getState();
473
+ const parentSelections = store.getParentDomainSelections(
474
+ "web",
475
+ matrixWithoutParent
476
+ );
477
+ globalExpect(parentSelections).toBeUndefined();
478
+ });
479
+ it("should return undefined for getParentDomainSelections when parent has no selections", () => {
480
+ const store = useWizardStore.getState();
481
+ const parentSelections = store.getParentDomainSelections(
482
+ "web-extras",
483
+ matrixWithParentDomain
484
+ );
485
+ globalExpect(parentSelections).toBeUndefined();
486
+ });
487
+ });
488
+ describe("reset", () => {
489
+ it("should reset to initial state", () => {
490
+ const store = useWizardStore.getState();
491
+ store.setStep("stack");
492
+ store.setApproach("scratch");
493
+ store.selectStack("nextjs-fullstack");
494
+ store.toggleDomain("web");
495
+ store.toggleExpertMode();
496
+ store.reset();
497
+ const state = useWizardStore.getState();
498
+ globalExpect(state.step).toBe("stack");
499
+ globalExpect(state.approach).toBeNull();
500
+ globalExpect(state.selectedStackId).toBeNull();
501
+ globalExpect(state.selectedDomains).toEqual([]);
502
+ globalExpect(state.expertMode).toBe(false);
503
+ globalExpect(state.installMode).toBe("local");
504
+ globalExpect(state.history).toEqual([]);
505
+ });
506
+ });
507
+ describe("populateFromStack", () => {
508
+ it("should set selectedDomains to all domains regardless of stack contents", () => {
509
+ const store = useWizardStore.getState();
510
+ const stack = {
511
+ agents: {
512
+ web: { framework: [sa("web-framework-react", true)] }
513
+ }
514
+ };
515
+ const categories = {
516
+ framework: { domain: "web" }
517
+ };
518
+ store.populateFromStack(stack, categories);
519
+ const { selectedDomains, domainSelections } = useWizardStore.getState();
520
+ globalExpect(selectedDomains).toEqual(["web", "web-extras", "api", "cli", "mobile", "shared"]);
521
+ globalExpect(domainSelections.web).toBeDefined();
522
+ globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
523
+ globalExpect(domainSelections.api).toBeUndefined();
524
+ });
525
+ it("should populate domainSelections from stack agents", () => {
526
+ const store = useWizardStore.getState();
527
+ const stack = {
528
+ agents: {
529
+ web: {
530
+ framework: [sa("web-framework-react", true)],
531
+ "client-state": [sa("web-state-zustand")]
532
+ },
533
+ api: { api: [sa("api-framework-hono", true)] }
534
+ }
535
+ };
536
+ const categories = {
537
+ framework: { domain: "web" },
538
+ "client-state": { domain: "web" },
539
+ api: { domain: "api" }
540
+ };
541
+ store.populateFromStack(stack, categories);
542
+ const { domainSelections } = useWizardStore.getState();
543
+ globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
544
+ globalExpect(domainSelections.web["client-state"]).toEqual(["web-state-zustand"]);
545
+ globalExpect(domainSelections.api.api).toEqual(["api-framework-hono"]);
546
+ });
547
+ it("should skip entries without a domain", () => {
548
+ const store = useWizardStore.getState();
549
+ const stack = {
550
+ agents: {
551
+ misc: { methodology: [sa("meta-methodology-vitest")] }
552
+ }
553
+ };
554
+ const categories = {
555
+ methodology: {}
556
+ };
557
+ store.populateFromStack(stack, categories);
558
+ const { domainSelections } = useWizardStore.getState();
559
+ globalExpect(Object.keys(domainSelections)).toHaveLength(0);
560
+ });
561
+ it("should populate multiple skills from array-valued subcategories", () => {
562
+ const store = useWizardStore.getState();
563
+ const stack = {
564
+ agents: {
565
+ "pattern-scout": {
566
+ methodology: [
567
+ sa("meta-methodology-investigation-requirements", true),
568
+ sa("meta-methodology-anti-over-engineering", true),
569
+ sa("meta-methodology-success-criteria", true)
570
+ ]
571
+ }
572
+ }
573
+ };
574
+ const categories = {
575
+ methodology: { domain: "shared" }
576
+ };
577
+ store.populateFromStack(stack, categories);
578
+ const { domainSelections } = useWizardStore.getState();
579
+ globalExpect(domainSelections.shared.methodology).toEqual([
580
+ "meta-methodology-investigation-requirements",
581
+ "meta-methodology-anti-over-engineering",
582
+ "meta-methodology-success-criteria"
583
+ ]);
584
+ });
585
+ it("should handle single-element and multi-element arrays across agents", () => {
586
+ const store = useWizardStore.getState();
587
+ const stack = {
588
+ agents: {
589
+ web: {
590
+ framework: [sa("web-framework-react", true)],
591
+ methodology: [
592
+ sa("meta-methodology-investigation-requirements", true),
593
+ sa("meta-methodology-anti-over-engineering", true)
594
+ ]
595
+ },
596
+ api: { api: [sa("api-framework-hono", true)] }
597
+ }
598
+ };
599
+ const categories = {
600
+ framework: { domain: "web" },
601
+ methodology: { domain: "shared" },
602
+ api: { domain: "api" }
603
+ };
604
+ store.populateFromStack(stack, categories);
605
+ const { domainSelections } = useWizardStore.getState();
606
+ globalExpect(domainSelections.web.framework).toEqual(["web-framework-react"]);
607
+ globalExpect(domainSelections.shared.methodology).toEqual([
608
+ "meta-methodology-investigation-requirements",
609
+ "meta-methodology-anti-over-engineering"
610
+ ]);
611
+ globalExpect(domainSelections.api.api).toEqual(["api-framework-hono"]);
612
+ });
613
+ it("should deduplicate skills from arrays across multiple agents", () => {
614
+ const store = useWizardStore.getState();
615
+ const stack = {
616
+ agents: {
617
+ agent1: {
618
+ methodology: [
619
+ sa("meta-methodology-investigation-requirements", true),
620
+ sa("meta-methodology-anti-over-engineering", true)
621
+ ]
622
+ },
623
+ agent2: {
624
+ methodology: [
625
+ sa("meta-methodology-anti-over-engineering", true),
626
+ sa("meta-methodology-success-criteria", true)
627
+ ]
628
+ }
629
+ }
630
+ };
631
+ const categories = {
632
+ methodology: { domain: "shared" }
633
+ };
634
+ store.populateFromStack(stack, categories);
635
+ const { domainSelections } = useWizardStore.getState();
636
+ globalExpect(domainSelections.shared.methodology).toEqual([
637
+ "meta-methodology-investigation-requirements",
638
+ "meta-methodology-anti-over-engineering",
639
+ "meta-methodology-success-criteria"
640
+ ]);
641
+ });
642
+ });
643
+ describe("complex flows", () => {
644
+ it("should handle complete stack selection flow", () => {
645
+ const store = useWizardStore.getState();
646
+ store.setApproach("stack");
647
+ store.selectStack("nextjs-fullstack");
648
+ store.setStackAction("customize");
649
+ store.setStep("build");
650
+ store.setStep("confirm");
651
+ const state = useWizardStore.getState();
652
+ globalExpect(state.step).toBe("confirm");
653
+ globalExpect(state.approach).toBe("stack");
654
+ globalExpect(state.selectedStackId).toBe("nextjs-fullstack");
655
+ globalExpect(state.stackAction).toBe("customize");
656
+ globalExpect(state.history).toEqual(["stack", "build"]);
657
+ });
658
+ it("should handle complete scratch flow", () => {
659
+ const store = useWizardStore.getState();
660
+ store.setApproach("scratch");
661
+ store.toggleDomain("web");
662
+ store.toggleDomain("api");
663
+ store.setStep("build");
664
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
665
+ store.toggleTechnology("web", "styling", "web-styling-scss-modules", true);
666
+ store.toggleTechnology("api", "api", "api-framework-hono", true);
667
+ store.setStep("confirm");
668
+ const state = useWizardStore.getState();
669
+ globalExpect(state.step).toBe("confirm");
670
+ globalExpect(state.approach).toBe("scratch");
671
+ globalExpect(state.selectedDomains).toEqual(["web", "api"]);
672
+ globalExpect(state.domainSelections.web.framework).toEqual(["web-framework-react"]);
673
+ globalExpect(state.domainSelections.web.styling).toEqual(["web-styling-scss-modules"]);
674
+ globalExpect(state.domainSelections.api.api).toEqual(["api-framework-hono"]);
675
+ });
676
+ it("should preserve selections when going back", () => {
677
+ const store = useWizardStore.getState();
678
+ store.setApproach("scratch");
679
+ store.toggleDomain("web");
680
+ store.setStep("build");
681
+ store.toggleTechnology("web", "framework", "web-framework-react", true);
682
+ store.goBack();
683
+ const state = useWizardStore.getState();
684
+ globalExpect(state.selectedDomains).toContain("web");
685
+ globalExpect(state.domainSelections.web.framework).toEqual(["web-framework-react"]);
686
+ });
687
+ });
688
+ });
689
+ //# sourceMappingURL=wizard-store.test.js.map