agents-inc 0.149.2 → 0.151.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 (572) hide show
  1. package/CHANGELOG.md +2287 -0
  2. package/LICENSE +21 -0
  3. package/README.md +136 -19
  4. package/assets/demo.gif +0 -0
  5. package/assets/demo.tape +266 -0
  6. package/assets/logo.svg +75 -0
  7. package/dist/chunk-2RSNKBXC.js +84 -0
  8. package/dist/chunk-2RSNKBXC.js.map +1 -0
  9. package/dist/chunk-3LIU2ZEF.js +1355 -0
  10. package/dist/chunk-3LIU2ZEF.js.map +1 -0
  11. package/dist/chunk-3XFUQ6OL.js +68 -0
  12. package/dist/chunk-3XFUQ6OL.js.map +1 -0
  13. package/dist/chunk-3YGUHWLR.js +258 -0
  14. package/dist/chunk-3YGUHWLR.js.map +1 -0
  15. package/dist/chunk-44LLPS2N.js +1135 -0
  16. package/dist/chunk-44LLPS2N.js.map +1 -0
  17. package/dist/chunk-4R6PGHQQ.js +300 -0
  18. package/dist/chunk-4R6PGHQQ.js.map +1 -0
  19. package/dist/chunk-5V2O6C3T.js +112 -0
  20. package/dist/chunk-5V2O6C3T.js.map +1 -0
  21. package/dist/chunk-6RBQBOBS.js +287 -0
  22. package/dist/chunk-6RBQBOBS.js.map +1 -0
  23. package/dist/chunk-7QIHKQL5.js +181 -0
  24. package/dist/chunk-7QIHKQL5.js.map +1 -0
  25. package/dist/chunk-BNE4HHIH.js +28 -0
  26. package/dist/chunk-BNE4HHIH.js.map +1 -0
  27. package/dist/chunk-C55DN7GE.js +35 -0
  28. package/dist/chunk-C55DN7GE.js.map +1 -0
  29. package/dist/chunk-DAG2ULNF.js +125 -0
  30. package/dist/chunk-DAG2ULNF.js.map +1 -0
  31. package/dist/chunk-DG2NGZ7S.js +10929 -0
  32. package/dist/chunk-DG2NGZ7S.js.map +1 -0
  33. package/dist/chunk-DIBCRIMR.js +36 -0
  34. package/dist/chunk-DIBCRIMR.js.map +1 -0
  35. package/dist/chunk-DUVWGO6E.js +54 -0
  36. package/dist/chunk-DUVWGO6E.js.map +1 -0
  37. package/dist/chunk-EKWAUOQB.js +96 -0
  38. package/dist/chunk-EKWAUOQB.js.map +1 -0
  39. package/dist/chunk-ES3NJZON.js +31 -0
  40. package/dist/chunk-ES3NJZON.js.map +1 -0
  41. package/dist/chunk-EVXG3X6G.js +179 -0
  42. package/dist/chunk-EVXG3X6G.js.map +1 -0
  43. package/dist/chunk-EZ7STXUV.js +349 -0
  44. package/dist/chunk-EZ7STXUV.js.map +1 -0
  45. package/dist/chunk-FYPUUYSG.js +31 -0
  46. package/dist/chunk-FYPUUYSG.js.map +1 -0
  47. package/dist/chunk-GYG5SE2D.js +81 -0
  48. package/dist/chunk-GYG5SE2D.js.map +1 -0
  49. package/dist/chunk-I3XKEGHM.js +16383 -0
  50. package/dist/chunk-I3XKEGHM.js.map +1 -0
  51. package/dist/chunk-IHO75PMZ.js +40 -0
  52. package/dist/chunk-IHO75PMZ.js.map +1 -0
  53. package/dist/chunk-IOJR5TOY.js +47 -0
  54. package/dist/chunk-IOJR5TOY.js.map +1 -0
  55. package/dist/chunk-K3OU6TGX.js +77 -0
  56. package/dist/chunk-K3OU6TGX.js.map +1 -0
  57. package/dist/chunk-KIR7VYQD.js +63 -0
  58. package/dist/chunk-KIR7VYQD.js.map +1 -0
  59. package/dist/chunk-KOPEM3Q7.js +27 -0
  60. package/dist/chunk-KOPEM3Q7.js.map +1 -0
  61. package/dist/chunk-KSZ6PCY4.js +43 -0
  62. package/dist/chunk-KSZ6PCY4.js.map +1 -0
  63. package/dist/chunk-LAXAQ3PZ.js +235 -0
  64. package/dist/chunk-LAXAQ3PZ.js.map +1 -0
  65. package/dist/chunk-LYYXX2W5.js +87 -0
  66. package/dist/chunk-LYYXX2W5.js.map +1 -0
  67. package/dist/chunk-NGLQ5W7U.js +339 -0
  68. package/dist/chunk-NGLQ5W7U.js.map +1 -0
  69. package/dist/chunk-NHCGC6DG.js +111 -0
  70. package/dist/chunk-NHCGC6DG.js.map +1 -0
  71. package/dist/chunk-NIKUMXE7.js +24 -0
  72. package/dist/chunk-NIKUMXE7.js.map +1 -0
  73. package/dist/chunk-NM3EDGB5.js +300 -0
  74. package/dist/chunk-NM3EDGB5.js.map +1 -0
  75. package/dist/chunk-O5ASLZ2K.js +270 -0
  76. package/dist/chunk-O5ASLZ2K.js.map +1 -0
  77. package/dist/chunk-OJIESW5B.js +174 -0
  78. package/dist/chunk-OJIESW5B.js.map +1 -0
  79. package/dist/chunk-OZZGXBCN.js +15 -0
  80. package/dist/chunk-OZZGXBCN.js.map +1 -0
  81. package/dist/chunk-P3PN5SVI.js +27 -0
  82. package/dist/chunk-P3PN5SVI.js.map +1 -0
  83. package/dist/chunk-P56WJ5FA.js +50 -0
  84. package/dist/chunk-P56WJ5FA.js.map +1 -0
  85. package/dist/chunk-PG4G4IIK.js +24 -0
  86. package/dist/chunk-PG4G4IIK.js.map +1 -0
  87. package/dist/chunk-PV2HNW4I.js +382 -0
  88. package/dist/chunk-PV2HNW4I.js.map +1 -0
  89. package/dist/chunk-QQLRX4KI.js +41 -0
  90. package/dist/chunk-QQLRX4KI.js.map +1 -0
  91. package/dist/chunk-QTFQEYDA.js +789 -0
  92. package/dist/chunk-QTFQEYDA.js.map +1 -0
  93. package/dist/chunk-RBHYLCUB.js +31 -0
  94. package/dist/chunk-RBHYLCUB.js.map +1 -0
  95. package/dist/chunk-SHHOMVWC.js +62 -0
  96. package/dist/chunk-SHHOMVWC.js.map +1 -0
  97. package/dist/chunk-SI5FOARI.js +42 -0
  98. package/dist/chunk-SI5FOARI.js.map +1 -0
  99. package/dist/chunk-SYUOXSPU.js +510 -0
  100. package/dist/chunk-SYUOXSPU.js.map +1 -0
  101. package/dist/chunk-THKIOI32.js +939 -0
  102. package/dist/chunk-THKIOI32.js.map +1 -0
  103. package/dist/chunk-TVHRMRD3.js +6014 -0
  104. package/dist/chunk-TVHRMRD3.js.map +1 -0
  105. package/dist/chunk-TYJLR32W.js +128 -0
  106. package/dist/chunk-TYJLR32W.js.map +1 -0
  107. package/dist/chunk-UFURYGD3.js +20 -0
  108. package/dist/chunk-UFURYGD3.js.map +1 -0
  109. package/dist/chunk-UTFN6UJS.js +253 -0
  110. package/dist/chunk-UTFN6UJS.js.map +1 -0
  111. package/dist/chunk-V7QOSGQA.js +298 -0
  112. package/dist/chunk-V7QOSGQA.js.map +1 -0
  113. package/dist/chunk-VEP23B5W.js +27 -0
  114. package/dist/chunk-VEP23B5W.js.map +1 -0
  115. package/dist/chunk-VG2TVBFN.js +52 -0
  116. package/dist/chunk-VG2TVBFN.js.map +1 -0
  117. package/dist/chunk-WFWCZEMS.js +92 -0
  118. package/dist/chunk-WFWCZEMS.js.map +1 -0
  119. package/dist/chunk-WK4J2CHH.js +430 -0
  120. package/dist/chunk-WK4J2CHH.js.map +1 -0
  121. package/dist/chunk-XA57SX4T.js +115 -0
  122. package/dist/chunk-XA57SX4T.js.map +1 -0
  123. package/dist/chunk-Y4CXDA3I.js +181 -0
  124. package/dist/chunk-Y4CXDA3I.js.map +1 -0
  125. package/dist/chunk-YA4QQKKE.js +51 -0
  126. package/dist/chunk-YA4QQKKE.js.map +1 -0
  127. package/dist/chunk-YBVA7GPW.js +27 -0
  128. package/dist/chunk-YBVA7GPW.js.map +1 -0
  129. package/dist/chunk-YU2VGX5R.js +4205 -0
  130. package/dist/chunk-YU2VGX5R.js.map +1 -0
  131. package/dist/commands/build/marketplace.js +250 -0
  132. package/dist/commands/build/marketplace.js.map +1 -0
  133. package/dist/commands/build/plugins.js +176 -0
  134. package/dist/commands/build/plugins.js.map +1 -0
  135. package/dist/commands/compile.js +331 -0
  136. package/dist/commands/compile.js.map +1 -0
  137. package/dist/commands/doctor.js +475 -0
  138. package/dist/commands/doctor.js.map +1 -0
  139. package/dist/commands/edit.js +765 -0
  140. package/dist/commands/edit.js.map +1 -0
  141. package/dist/commands/eject.js +393 -0
  142. package/dist/commands/eject.js.map +1 -0
  143. package/dist/commands/import/skill.js +349 -0
  144. package/dist/commands/import/skill.js.map +1 -0
  145. package/dist/commands/init.js +66 -0
  146. package/dist/commands/init.js.map +1 -0
  147. package/dist/commands/list.js +115 -0
  148. package/dist/commands/list.js.map +1 -0
  149. package/dist/commands/new/agent.js +304 -0
  150. package/dist/commands/new/agent.js.map +1 -0
  151. package/dist/commands/new/marketplace.js +315 -0
  152. package/dist/commands/new/marketplace.js.map +1 -0
  153. package/dist/commands/new/skill.js +28 -0
  154. package/dist/commands/new/skill.js.map +1 -0
  155. package/dist/commands/search.js +176 -0
  156. package/dist/commands/search.js.map +1 -0
  157. package/dist/commands/uninstall.js +570 -0
  158. package/dist/commands/uninstall.js.map +1 -0
  159. package/dist/commands/update.js +368 -0
  160. package/dist/commands/update.js.map +1 -0
  161. package/dist/commands/validate.js +581 -0
  162. package/dist/commands/validate.js.map +1 -0
  163. package/dist/components/common/confirm.js +9 -0
  164. package/dist/components/common/confirm.js.map +1 -0
  165. package/dist/components/common/confirm.test.js +203 -0
  166. package/dist/components/common/confirm.test.js.map +1 -0
  167. package/dist/components/common/prompt-confirm.js +11 -0
  168. package/dist/components/common/prompt-confirm.js.map +1 -0
  169. package/dist/components/common/select-list.js +11 -0
  170. package/dist/components/common/select-list.js.map +1 -0
  171. package/dist/components/common/spinner.js +9 -0
  172. package/dist/components/common/spinner.js.map +1 -0
  173. package/dist/components/wizard/category-grid.js +16 -0
  174. package/dist/components/wizard/category-grid.js.map +1 -0
  175. package/dist/components/wizard/category-grid.test.js +1253 -0
  176. package/dist/components/wizard/category-grid.test.js.map +1 -0
  177. package/dist/components/wizard/checkbox-grid.js +14 -0
  178. package/dist/components/wizard/checkbox-grid.js.map +1 -0
  179. package/dist/components/wizard/checkbox-grid.test.js +264 -0
  180. package/dist/components/wizard/checkbox-grid.test.js.map +1 -0
  181. package/dist/components/wizard/domain-selection.js +22 -0
  182. package/dist/components/wizard/domain-selection.js.map +1 -0
  183. package/dist/components/wizard/run-wizard-session.js +47 -0
  184. package/dist/components/wizard/run-wizard-session.js.map +1 -0
  185. package/dist/components/wizard/scroll-affordance.js +10 -0
  186. package/dist/components/wizard/scroll-affordance.js.map +1 -0
  187. package/dist/components/wizard/search-modal.js +14 -0
  188. package/dist/components/wizard/search-modal.js.map +1 -0
  189. package/dist/components/wizard/search-modal.test.js +212 -0
  190. package/dist/components/wizard/search-modal.test.js.map +1 -0
  191. package/dist/components/wizard/selection-card.js +10 -0
  192. package/dist/components/wizard/selection-card.js.map +1 -0
  193. package/dist/components/wizard/skill-agent-summary.js +16 -0
  194. package/dist/components/wizard/skill-agent-summary.js.map +1 -0
  195. package/dist/components/wizard/source-grid.js +23 -0
  196. package/dist/components/wizard/source-grid.js.map +1 -0
  197. package/dist/components/wizard/source-grid.test.js +1094 -0
  198. package/dist/components/wizard/source-grid.test.js.map +1 -0
  199. package/dist/components/wizard/stack-selection.js +20 -0
  200. package/dist/components/wizard/stack-selection.js.map +1 -0
  201. package/dist/components/wizard/step-agents.js +22 -0
  202. package/dist/components/wizard/step-agents.js.map +1 -0
  203. package/dist/components/wizard/step-agents.test.js +204 -0
  204. package/dist/components/wizard/step-agents.test.js.map +1 -0
  205. package/dist/components/wizard/step-build.js +22 -0
  206. package/dist/components/wizard/step-build.js.map +1 -0
  207. package/dist/components/wizard/step-build.test.js +552 -0
  208. package/dist/components/wizard/step-build.test.js.map +1 -0
  209. package/dist/components/wizard/step-confirm.js +21 -0
  210. package/dist/components/wizard/step-confirm.js.map +1 -0
  211. package/dist/components/wizard/step-confirm.test.js +744 -0
  212. package/dist/components/wizard/step-confirm.test.js.map +1 -0
  213. package/dist/components/wizard/step-settings.js +19 -0
  214. package/dist/components/wizard/step-settings.js.map +1 -0
  215. package/dist/components/wizard/step-settings.test.js +244 -0
  216. package/dist/components/wizard/step-settings.test.js.map +1 -0
  217. package/dist/components/wizard/step-sources.js +28 -0
  218. package/dist/components/wizard/step-sources.js.map +1 -0
  219. package/dist/components/wizard/step-sources.test.js +155 -0
  220. package/dist/components/wizard/step-sources.test.js.map +1 -0
  221. package/dist/components/wizard/step-stack.js +21 -0
  222. package/dist/components/wizard/step-stack.js.map +1 -0
  223. package/dist/components/wizard/step-stack.test.js +262 -0
  224. package/dist/components/wizard/step-stack.test.js.map +1 -0
  225. package/dist/components/wizard/summary-panel.js +20 -0
  226. package/dist/components/wizard/summary-panel.js.map +1 -0
  227. package/dist/components/wizard/summary-panel.test.js +317 -0
  228. package/dist/components/wizard/summary-panel.test.js.map +1 -0
  229. package/dist/components/wizard/toast.js +10 -0
  230. package/dist/components/wizard/toast.js.map +1 -0
  231. package/dist/components/wizard/wizard-layout.js +26 -0
  232. package/dist/components/wizard/wizard-layout.js.map +1 -0
  233. package/dist/components/wizard/wizard-layout.test.js +200 -0
  234. package/dist/components/wizard/wizard-layout.test.js.map +1 -0
  235. package/dist/components/wizard/wizard-tabs.js +20 -0
  236. package/dist/components/wizard/wizard-tabs.js.map +1 -0
  237. package/dist/components/wizard/wizard-tabs.test.js +290 -0
  238. package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
  239. package/dist/components/wizard/wizard.js +48 -0
  240. package/dist/components/wizard/wizard.js.map +1 -0
  241. package/dist/config-exports.js +20 -0
  242. package/dist/config-exports.js.map +1 -0
  243. package/dist/copy-local-skills-UPA2GUZV.js +15 -0
  244. package/dist/copy-local-skills-UPA2GUZV.js.map +1 -0
  245. package/dist/dist-VNJNNJK7.js +550 -0
  246. package/dist/dist-VNJNNJK7.js.map +1 -0
  247. package/dist/hooks/init.js +90 -0
  248. package/dist/hooks/init.js.map +1 -0
  249. package/dist/index.js +10 -0
  250. package/dist/index.js.map +1 -0
  251. package/dist/load-agent-defs-SB4XAOVB.js +16 -0
  252. package/dist/load-agent-defs-SB4XAOVB.js.map +1 -0
  253. package/dist/loader-E2ERJYVA.js +23 -0
  254. package/dist/loader-E2ERJYVA.js.map +1 -0
  255. package/dist/magic-string.es-5TV73NJD.js +1316 -0
  256. package/dist/magic-string.es-5TV73NJD.js.map +1 -0
  257. package/dist/recompile-project-agents-U4ZY2GDX.js +20 -0
  258. package/dist/recompile-project-agents-U4ZY2GDX.js.map +1 -0
  259. package/dist/source-loader-5UNRU7EZ.js +20 -0
  260. package/dist/source-loader-5UNRU7EZ.js.map +1 -0
  261. package/dist/source-manager-3O54SIIB.js +18 -0
  262. package/dist/source-manager-3O54SIIB.js.map +1 -0
  263. package/dist/src/agents/_templates/agent.liquid +161 -0
  264. package/dist/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
  265. package/dist/src/agents/_templates/methodologies/context-management.liquid +162 -0
  266. package/dist/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
  267. package/dist/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
  268. package/dist/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
  269. package/dist/src/agents/_templates/methodologies/write-verification.liquid +43 -0
  270. package/dist/src/agents/developer/ai-developer/critical-reminders.md +54 -0
  271. package/dist/src/agents/developer/ai-developer/critical-requirements.md +59 -0
  272. package/dist/src/agents/developer/ai-developer/identity.md +51 -0
  273. package/dist/src/agents/developer/ai-developer/metadata.yaml +12 -0
  274. package/dist/src/agents/developer/ai-developer/output.md +366 -0
  275. package/dist/src/agents/developer/ai-developer/playbook.md +335 -0
  276. package/dist/src/agents/developer/api-developer/critical-reminders.md +46 -0
  277. package/dist/src/agents/developer/api-developer/critical-requirements.md +44 -0
  278. package/dist/src/agents/developer/api-developer/identity.md +49 -0
  279. package/dist/src/agents/developer/api-developer/metadata.yaml +12 -0
  280. package/dist/src/agents/developer/api-developer/output.md +432 -0
  281. package/dist/src/agents/developer/api-developer/playbook.md +352 -0
  282. package/dist/src/agents/developer/cli-developer/critical-reminders.md +51 -0
  283. package/dist/src/agents/developer/cli-developer/critical-requirements.md +51 -0
  284. package/dist/src/agents/developer/cli-developer/identity.md +51 -0
  285. package/dist/src/agents/developer/cli-developer/metadata.yaml +12 -0
  286. package/dist/src/agents/developer/cli-developer/output.md +285 -0
  287. package/dist/src/agents/developer/cli-developer/playbook.md +386 -0
  288. package/dist/src/agents/developer/web-architecture/critical-reminders.md +48 -0
  289. package/dist/src/agents/developer/web-architecture/critical-requirements.md +65 -0
  290. package/dist/src/agents/developer/web-architecture/identity.md +64 -0
  291. package/dist/src/agents/developer/web-architecture/metadata.yaml +12 -0
  292. package/dist/src/agents/developer/web-architecture/output.md +449 -0
  293. package/dist/src/agents/developer/web-architecture/playbook.md +481 -0
  294. package/dist/src/agents/developer/web-developer/critical-reminders.md +40 -0
  295. package/dist/src/agents/developer/web-developer/critical-requirements.md +39 -0
  296. package/dist/src/agents/developer/web-developer/identity.md +32 -0
  297. package/dist/src/agents/developer/web-developer/metadata.yaml +12 -0
  298. package/dist/src/agents/developer/web-developer/output.md +323 -0
  299. package/dist/src/agents/developer/web-developer/playbook.md +349 -0
  300. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +45 -0
  301. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +52 -0
  302. package/dist/src/agents/meta/agent-summoner/identity.md +34 -0
  303. package/dist/src/agents/meta/agent-summoner/metadata.yaml +12 -0
  304. package/dist/src/agents/meta/agent-summoner/output.md +296 -0
  305. package/dist/src/agents/meta/agent-summoner/playbook.md +1469 -0
  306. package/dist/src/agents/meta/codex-keeper/critical-reminders.md +39 -0
  307. package/dist/src/agents/meta/codex-keeper/critical-requirements.md +29 -0
  308. package/dist/src/agents/meta/codex-keeper/identity.md +45 -0
  309. package/dist/src/agents/meta/codex-keeper/metadata.yaml +12 -0
  310. package/dist/src/agents/meta/codex-keeper/output.md +384 -0
  311. package/dist/src/agents/meta/codex-keeper/playbook.md +1183 -0
  312. package/dist/src/agents/meta/convention-keeper/critical-reminders.md +32 -0
  313. package/dist/src/agents/meta/convention-keeper/critical-requirements.md +32 -0
  314. package/dist/src/agents/meta/convention-keeper/identity.md +33 -0
  315. package/dist/src/agents/meta/convention-keeper/metadata.yaml +12 -0
  316. package/dist/src/agents/meta/convention-keeper/output.md +206 -0
  317. package/dist/src/agents/meta/convention-keeper/playbook.md +180 -0
  318. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +112 -0
  319. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
  320. package/dist/src/agents/meta/skill-summoner/identity.md +31 -0
  321. package/dist/src/agents/meta/skill-summoner/metadata.yaml +13 -0
  322. package/dist/src/agents/meta/skill-summoner/output.md +390 -0
  323. package/dist/src/agents/meta/skill-summoner/playbook.md +1457 -0
  324. package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +71 -0
  325. package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +31 -0
  326. package/dist/src/agents/pattern/pattern-scout/identity.md +25 -0
  327. package/dist/src/agents/pattern/pattern-scout/metadata.yaml +10 -0
  328. package/dist/src/agents/pattern/pattern-scout/output.md +290 -0
  329. package/dist/src/agents/pattern/pattern-scout/playbook.md +1806 -0
  330. package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +30 -0
  331. package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +28 -0
  332. package/dist/src/agents/pattern/web-pattern-critique/identity.md +41 -0
  333. package/dist/src/agents/pattern/web-pattern-critique/metadata.yaml +12 -0
  334. package/dist/src/agents/pattern/web-pattern-critique/output.md +314 -0
  335. package/dist/src/agents/pattern/web-pattern-critique/playbook.md +572 -0
  336. package/dist/src/agents/planning/api-pm/critical-reminders.md +48 -0
  337. package/dist/src/agents/planning/api-pm/critical-requirements.md +41 -0
  338. package/dist/src/agents/planning/api-pm/identity.md +39 -0
  339. package/dist/src/agents/planning/api-pm/metadata.yaml +12 -0
  340. package/dist/src/agents/planning/api-pm/output.md +475 -0
  341. package/dist/src/agents/planning/api-pm/playbook.md +129 -0
  342. package/dist/src/agents/planning/web-pm/critical-reminders.md +36 -0
  343. package/dist/src/agents/planning/web-pm/critical-requirements.md +32 -0
  344. package/dist/src/agents/planning/web-pm/identity.md +26 -0
  345. package/dist/src/agents/planning/web-pm/metadata.yaml +12 -0
  346. package/dist/src/agents/planning/web-pm/output.md +314 -0
  347. package/dist/src/agents/planning/web-pm/playbook.md +318 -0
  348. package/dist/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
  349. package/dist/src/agents/researcher/api-researcher/critical-requirements.md +28 -0
  350. package/dist/src/agents/researcher/api-researcher/identity.md +71 -0
  351. package/dist/src/agents/researcher/api-researcher/metadata.yaml +10 -0
  352. package/dist/src/agents/researcher/api-researcher/output.md +254 -0
  353. package/dist/src/agents/researcher/api-researcher/playbook.md +201 -0
  354. package/dist/src/agents/researcher/web-researcher/critical-reminders.md +39 -0
  355. package/dist/src/agents/researcher/web-researcher/critical-requirements.md +26 -0
  356. package/dist/src/agents/researcher/web-researcher/identity.md +69 -0
  357. package/dist/src/agents/researcher/web-researcher/metadata.yaml +10 -0
  358. package/dist/src/agents/researcher/web-researcher/output.md +241 -0
  359. package/dist/src/agents/researcher/web-researcher/playbook.md +217 -0
  360. package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +40 -0
  361. package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +37 -0
  362. package/dist/src/agents/reviewer/ai-reviewer/identity.md +51 -0
  363. package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
  364. package/dist/src/agents/reviewer/ai-reviewer/output.md +395 -0
  365. package/dist/src/agents/reviewer/ai-reviewer/playbook.md +90 -0
  366. package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +31 -0
  367. package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +27 -0
  368. package/dist/src/agents/reviewer/api-reviewer/identity.md +51 -0
  369. package/dist/src/agents/reviewer/api-reviewer/metadata.yaml +12 -0
  370. package/dist/src/agents/reviewer/api-reviewer/output.md +343 -0
  371. package/dist/src/agents/reviewer/api-reviewer/playbook.md +288 -0
  372. package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +33 -0
  373. package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +30 -0
  374. package/dist/src/agents/reviewer/cli-reviewer/identity.md +44 -0
  375. package/dist/src/agents/reviewer/cli-reviewer/metadata.yaml +12 -0
  376. package/dist/src/agents/reviewer/cli-reviewer/output.md +414 -0
  377. package/dist/src/agents/reviewer/cli-reviewer/playbook.md +218 -0
  378. package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +38 -0
  379. package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +38 -0
  380. package/dist/src/agents/reviewer/infra-reviewer/identity.md +53 -0
  381. package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
  382. package/dist/src/agents/reviewer/infra-reviewer/output.md +364 -0
  383. package/dist/src/agents/reviewer/infra-reviewer/playbook.md +161 -0
  384. package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +31 -0
  385. package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +26 -0
  386. package/dist/src/agents/reviewer/web-reviewer/identity.md +40 -0
  387. package/dist/src/agents/reviewer/web-reviewer/metadata.yaml +12 -0
  388. package/dist/src/agents/reviewer/web-reviewer/output.md +333 -0
  389. package/dist/src/agents/reviewer/web-reviewer/playbook.md +156 -0
  390. package/dist/src/agents/tester/api-tester/critical-reminders.md +41 -0
  391. package/dist/src/agents/tester/api-tester/critical-requirements.md +41 -0
  392. package/dist/src/agents/tester/api-tester/identity.md +47 -0
  393. package/dist/src/agents/tester/api-tester/metadata.yaml +12 -0
  394. package/dist/src/agents/tester/api-tester/output.md +284 -0
  395. package/dist/src/agents/tester/api-tester/playbook.md +275 -0
  396. package/dist/src/agents/tester/cli-tester/critical-reminders.md +36 -0
  397. package/dist/src/agents/tester/cli-tester/critical-requirements.md +36 -0
  398. package/dist/src/agents/tester/cli-tester/identity.md +43 -0
  399. package/dist/src/agents/tester/cli-tester/metadata.yaml +12 -0
  400. package/dist/src/agents/tester/cli-tester/output.md +313 -0
  401. package/dist/src/agents/tester/cli-tester/playbook.md +221 -0
  402. package/dist/src/agents/tester/web-tester/critical-reminders.md +31 -0
  403. package/dist/src/agents/tester/web-tester/critical-requirements.md +28 -0
  404. package/dist/src/agents/tester/web-tester/identity.md +41 -0
  405. package/dist/src/agents/tester/web-tester/metadata.yaml +12 -0
  406. package/dist/src/agents/tester/web-tester/output.md +321 -0
  407. package/dist/src/agents/tester/web-tester/playbook.md +428 -0
  408. package/dist/stores/d227-same-scope-tombstone-duplicate.test.js +118 -0
  409. package/dist/stores/d227-same-scope-tombstone-duplicate.test.js.map +1 -0
  410. package/dist/stores/wizard-store.js +21 -0
  411. package/dist/stores/wizard-store.js.map +1 -0
  412. package/dist/stores/wizard-store.test.js +3053 -0
  413. package/dist/stores/wizard-store.test.js.map +1 -0
  414. package/package.json +130 -12
  415. package/src/agents/_templates/agent.liquid +161 -0
  416. package/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
  417. package/src/agents/_templates/methodologies/context-management.liquid +162 -0
  418. package/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
  419. package/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
  420. package/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
  421. package/src/agents/_templates/methodologies/write-verification.liquid +43 -0
  422. package/src/agents/developer/ai-developer/critical-reminders.md +54 -0
  423. package/src/agents/developer/ai-developer/critical-requirements.md +59 -0
  424. package/src/agents/developer/ai-developer/identity.md +51 -0
  425. package/src/agents/developer/ai-developer/metadata.yaml +12 -0
  426. package/src/agents/developer/ai-developer/output.md +366 -0
  427. package/src/agents/developer/ai-developer/playbook.md +335 -0
  428. package/src/agents/developer/api-developer/critical-reminders.md +46 -0
  429. package/src/agents/developer/api-developer/critical-requirements.md +44 -0
  430. package/src/agents/developer/api-developer/identity.md +49 -0
  431. package/src/agents/developer/api-developer/metadata.yaml +12 -0
  432. package/src/agents/developer/api-developer/output.md +432 -0
  433. package/src/agents/developer/api-developer/playbook.md +352 -0
  434. package/src/agents/developer/cli-developer/critical-reminders.md +51 -0
  435. package/src/agents/developer/cli-developer/critical-requirements.md +51 -0
  436. package/src/agents/developer/cli-developer/identity.md +51 -0
  437. package/src/agents/developer/cli-developer/metadata.yaml +12 -0
  438. package/src/agents/developer/cli-developer/output.md +285 -0
  439. package/src/agents/developer/cli-developer/playbook.md +386 -0
  440. package/src/agents/developer/web-architecture/critical-reminders.md +48 -0
  441. package/src/agents/developer/web-architecture/critical-requirements.md +65 -0
  442. package/src/agents/developer/web-architecture/identity.md +64 -0
  443. package/src/agents/developer/web-architecture/metadata.yaml +12 -0
  444. package/src/agents/developer/web-architecture/output.md +449 -0
  445. package/src/agents/developer/web-architecture/playbook.md +481 -0
  446. package/src/agents/developer/web-developer/critical-reminders.md +40 -0
  447. package/src/agents/developer/web-developer/critical-requirements.md +39 -0
  448. package/src/agents/developer/web-developer/identity.md +32 -0
  449. package/src/agents/developer/web-developer/metadata.yaml +12 -0
  450. package/src/agents/developer/web-developer/output.md +323 -0
  451. package/src/agents/developer/web-developer/playbook.md +349 -0
  452. package/src/agents/meta/agent-summoner/critical-reminders.md +45 -0
  453. package/src/agents/meta/agent-summoner/critical-requirements.md +52 -0
  454. package/src/agents/meta/agent-summoner/identity.md +34 -0
  455. package/src/agents/meta/agent-summoner/metadata.yaml +12 -0
  456. package/src/agents/meta/agent-summoner/output.md +296 -0
  457. package/src/agents/meta/agent-summoner/playbook.md +1469 -0
  458. package/src/agents/meta/codex-keeper/critical-reminders.md +39 -0
  459. package/src/agents/meta/codex-keeper/critical-requirements.md +29 -0
  460. package/src/agents/meta/codex-keeper/identity.md +45 -0
  461. package/src/agents/meta/codex-keeper/metadata.yaml +12 -0
  462. package/src/agents/meta/codex-keeper/output.md +384 -0
  463. package/src/agents/meta/codex-keeper/playbook.md +1183 -0
  464. package/src/agents/meta/convention-keeper/critical-reminders.md +32 -0
  465. package/src/agents/meta/convention-keeper/critical-requirements.md +32 -0
  466. package/src/agents/meta/convention-keeper/identity.md +33 -0
  467. package/src/agents/meta/convention-keeper/metadata.yaml +12 -0
  468. package/src/agents/meta/convention-keeper/output.md +206 -0
  469. package/src/agents/meta/convention-keeper/playbook.md +180 -0
  470. package/src/agents/meta/skill-summoner/critical-reminders.md +112 -0
  471. package/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
  472. package/src/agents/meta/skill-summoner/identity.md +31 -0
  473. package/src/agents/meta/skill-summoner/metadata.yaml +13 -0
  474. package/src/agents/meta/skill-summoner/output.md +390 -0
  475. package/src/agents/meta/skill-summoner/playbook.md +1457 -0
  476. package/src/agents/pattern/pattern-scout/critical-reminders.md +71 -0
  477. package/src/agents/pattern/pattern-scout/critical-requirements.md +31 -0
  478. package/src/agents/pattern/pattern-scout/identity.md +25 -0
  479. package/src/agents/pattern/pattern-scout/metadata.yaml +10 -0
  480. package/src/agents/pattern/pattern-scout/output.md +290 -0
  481. package/src/agents/pattern/pattern-scout/playbook.md +1806 -0
  482. package/src/agents/pattern/web-pattern-critique/critical-reminders.md +30 -0
  483. package/src/agents/pattern/web-pattern-critique/critical-requirements.md +28 -0
  484. package/src/agents/pattern/web-pattern-critique/identity.md +41 -0
  485. package/src/agents/pattern/web-pattern-critique/metadata.yaml +12 -0
  486. package/src/agents/pattern/web-pattern-critique/output.md +314 -0
  487. package/src/agents/pattern/web-pattern-critique/playbook.md +572 -0
  488. package/src/agents/planning/api-pm/critical-reminders.md +48 -0
  489. package/src/agents/planning/api-pm/critical-requirements.md +41 -0
  490. package/src/agents/planning/api-pm/identity.md +39 -0
  491. package/src/agents/planning/api-pm/metadata.yaml +12 -0
  492. package/src/agents/planning/api-pm/output.md +475 -0
  493. package/src/agents/planning/api-pm/playbook.md +129 -0
  494. package/src/agents/planning/web-pm/critical-reminders.md +36 -0
  495. package/src/agents/planning/web-pm/critical-requirements.md +32 -0
  496. package/src/agents/planning/web-pm/identity.md +26 -0
  497. package/src/agents/planning/web-pm/metadata.yaml +12 -0
  498. package/src/agents/planning/web-pm/output.md +314 -0
  499. package/src/agents/planning/web-pm/playbook.md +318 -0
  500. package/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
  501. package/src/agents/researcher/api-researcher/critical-requirements.md +28 -0
  502. package/src/agents/researcher/api-researcher/identity.md +71 -0
  503. package/src/agents/researcher/api-researcher/metadata.yaml +10 -0
  504. package/src/agents/researcher/api-researcher/output.md +254 -0
  505. package/src/agents/researcher/api-researcher/playbook.md +201 -0
  506. package/src/agents/researcher/web-researcher/critical-reminders.md +39 -0
  507. package/src/agents/researcher/web-researcher/critical-requirements.md +26 -0
  508. package/src/agents/researcher/web-researcher/identity.md +69 -0
  509. package/src/agents/researcher/web-researcher/metadata.yaml +10 -0
  510. package/src/agents/researcher/web-researcher/output.md +241 -0
  511. package/src/agents/researcher/web-researcher/playbook.md +217 -0
  512. package/src/agents/reviewer/ai-reviewer/critical-reminders.md +40 -0
  513. package/src/agents/reviewer/ai-reviewer/critical-requirements.md +37 -0
  514. package/src/agents/reviewer/ai-reviewer/identity.md +51 -0
  515. package/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
  516. package/src/agents/reviewer/ai-reviewer/output.md +395 -0
  517. package/src/agents/reviewer/ai-reviewer/playbook.md +90 -0
  518. package/src/agents/reviewer/api-reviewer/critical-reminders.md +31 -0
  519. package/src/agents/reviewer/api-reviewer/critical-requirements.md +27 -0
  520. package/src/agents/reviewer/api-reviewer/identity.md +51 -0
  521. package/src/agents/reviewer/api-reviewer/metadata.yaml +12 -0
  522. package/src/agents/reviewer/api-reviewer/output.md +343 -0
  523. package/src/agents/reviewer/api-reviewer/playbook.md +288 -0
  524. package/src/agents/reviewer/cli-reviewer/critical-reminders.md +33 -0
  525. package/src/agents/reviewer/cli-reviewer/critical-requirements.md +30 -0
  526. package/src/agents/reviewer/cli-reviewer/identity.md +44 -0
  527. package/src/agents/reviewer/cli-reviewer/metadata.yaml +12 -0
  528. package/src/agents/reviewer/cli-reviewer/output.md +414 -0
  529. package/src/agents/reviewer/cli-reviewer/playbook.md +218 -0
  530. package/src/agents/reviewer/infra-reviewer/critical-reminders.md +38 -0
  531. package/src/agents/reviewer/infra-reviewer/critical-requirements.md +38 -0
  532. package/src/agents/reviewer/infra-reviewer/identity.md +53 -0
  533. package/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
  534. package/src/agents/reviewer/infra-reviewer/output.md +364 -0
  535. package/src/agents/reviewer/infra-reviewer/playbook.md +161 -0
  536. package/src/agents/reviewer/web-reviewer/critical-reminders.md +31 -0
  537. package/src/agents/reviewer/web-reviewer/critical-requirements.md +26 -0
  538. package/src/agents/reviewer/web-reviewer/identity.md +40 -0
  539. package/src/agents/reviewer/web-reviewer/metadata.yaml +12 -0
  540. package/src/agents/reviewer/web-reviewer/output.md +333 -0
  541. package/src/agents/reviewer/web-reviewer/playbook.md +156 -0
  542. package/src/agents/tester/api-tester/critical-reminders.md +41 -0
  543. package/src/agents/tester/api-tester/critical-requirements.md +41 -0
  544. package/src/agents/tester/api-tester/identity.md +47 -0
  545. package/src/agents/tester/api-tester/metadata.yaml +12 -0
  546. package/src/agents/tester/api-tester/output.md +284 -0
  547. package/src/agents/tester/api-tester/playbook.md +275 -0
  548. package/src/agents/tester/cli-tester/critical-reminders.md +36 -0
  549. package/src/agents/tester/cli-tester/critical-requirements.md +36 -0
  550. package/src/agents/tester/cli-tester/identity.md +43 -0
  551. package/src/agents/tester/cli-tester/metadata.yaml +12 -0
  552. package/src/agents/tester/cli-tester/output.md +313 -0
  553. package/src/agents/tester/cli-tester/playbook.md +221 -0
  554. package/src/agents/tester/web-tester/critical-reminders.md +31 -0
  555. package/src/agents/tester/web-tester/critical-requirements.md +28 -0
  556. package/src/agents/tester/web-tester/identity.md +41 -0
  557. package/src/agents/tester/web-tester/metadata.yaml +12 -0
  558. package/src/agents/tester/web-tester/output.md +321 -0
  559. package/src/agents/tester/web-tester/playbook.md +428 -0
  560. package/src/schemas/agent-frontmatter.schema.json +88 -0
  561. package/src/schemas/agent.schema.json +103 -0
  562. package/src/schemas/custom-metadata.schema.json +74 -0
  563. package/src/schemas/hooks.schema.json +47 -0
  564. package/src/schemas/marketplace.schema.json +119 -0
  565. package/src/schemas/metadata.schema.json +387 -0
  566. package/src/schemas/plugin.schema.json +127 -0
  567. package/src/schemas/project-config.schema.json +189 -0
  568. package/src/schemas/project-source-config.schema.json +96 -0
  569. package/src/schemas/skill-frontmatter.schema.json +42 -0
  570. package/src/schemas/stack.schema.json +191 -0
  571. package/src/schemas/stacks.schema.json +107 -0
  572. package/bin/run.js +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/components/wizard/summary-panel.test.tsx","../../../src/cli/lib/__tests__/helpers/silence-console.ts"],"sourcesContent":["import { Box } from \"ink\";\nimport { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\nimport { SummaryPanel } from \"./summary-panel\";\nimport {\n ALL_SKILLS_EJECTED_LABEL,\n DEFAULT_PUBLIC_SOURCE_NAME,\n EJECT_SOURCE,\n formatSourceDisplayName,\n} from \"../../consts\";\nimport { buildAgentConfigs } from \"../../lib/__tests__/factories/config-factories\";\nimport { createMockMatrix } from \"../../lib/__tests__/factories/matrix-factories\";\nimport { createMockResolvedStack } from \"../../lib/__tests__/factories/stack-factories\";\nimport { silenceConsole } from \"../../lib/__tests__/helpers/silence-console\";\nimport { buildSkillConfigs } from \"../../lib/__tests__/helpers/wizard-simulation\";\nimport { initializeMatrix } from \"../../lib/matrix/matrix-provider\";\nimport { SKILLS } from \"../../lib/__tests__/test-fixtures\";\nimport {\n ARROW_DOWN,\n ARROW_UP,\n INPUT_DELAY_MS,\n RENDER_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\n\nconst STACK_ID = \"nextjs-fullstack\";\nconst STACK_NAME = \"Next.js Full-Stack\";\nconst UNKNOWN_STACK_ID = \"ghost-stack\";\n\n/** The label the default public marketplace resolves to — `SOURCE_DISPLAY_NAMES` maps its name. */\nconst DEFAULT_MARKETPLACE_LABEL = formatSourceDisplayName(DEFAULT_PUBLIC_SOURCE_NAME);\n\n/**\n * Marketplaces `SOURCE_DISPLAY_NAMES` holds no label for, so each must render its own name\n * unchanged — the custom-marketplace case. Both lowercase and alphabetically ordered as written,\n * so the joined expectation reads in the same order the row sorts them into.\n */\nconst CUSTOM_MARKETPLACE = \"acme-skills\";\nconst OTHER_MARKETPLACE = \"zeta-skills\";\nconst JOINED_MARKETPLACES = `${CUSTOM_MARKETPLACE} · ${OTHER_MARKETPLACE}`;\n\n/** Shorter than the header plus summary, so the panel has to clip and say so. */\nconst CLIPPING_HEIGHT_ROWS = 8;\n/** Content lines the panel cannot show at {@link CLIPPING_HEIGHT_ROWS}, and so the travel a full scroll takes. */\nconst CLIPPED_LINES = 4;\n\nconst renderInClippedViewport = () =>\n render(\n <Box flexDirection=\"column\" height={CLIPPING_HEIGHT_ROWS}>\n <SummaryPanel />\n </Box>,\n );\n\ndescribe(\"SummaryPanel component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(() => {\n initializeMatrix(\n createMockMatrix(SKILLS.react, SKILLS.vitest, {\n suggestedStacks: [createMockResolvedStack(STACK_ID, STACK_NAME)],\n }),\n );\n useWizardStore.setState({\n installedSkillConfigs: null,\n installedAgentConfigs: null,\n isInitMode: false,\n selectedStackId: null,\n skillConfigs: [],\n });\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"header\", () => {\n it(\"should name the default public marketplace when nothing is selected\", () => {\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(`Marketplace ${DEFAULT_MARKETPLACE_LABEL}`);\n expect(output).not.toContain(ALL_SKILLS_EJECTED_LABEL);\n });\n\n it(\"should say every skill is ejected when no selected skill names a marketplace\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([SKILLS.react.id], { source: EJECT_SOURCE }),\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(`Marketplace ${ALL_SKILLS_EJECTED_LABEL}`);\n expect(output).not.toContain(DEFAULT_MARKETPLACE_LABEL);\n });\n\n it(\"should name the marketplace the selected skills come from\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([SKILLS.react.id], { source: CUSTOM_MARKETPLACE }),\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(`Marketplace ${CUSTOM_MARKETPLACE}`);\n expect(output).not.toContain(DEFAULT_MARKETPLACE_LABEL);\n });\n\n it(\"should join every distinct marketplace in play\", () => {\n useWizardStore.setState({\n skillConfigs: [\n ...buildSkillConfigs([SKILLS.react.id], { source: CUSTOM_MARKETPLACE }),\n ...buildSkillConfigs([SKILLS.vitest.id], { source: OTHER_MARKETPLACE }),\n ],\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(`Marketplace ${JOINED_MARKETPLACES}`);\n });\n\n it(\"should order the marketplaces the same way whatever order the configs hold\", () => {\n useWizardStore.setState({\n skillConfigs: [\n ...buildSkillConfigs([SKILLS.vitest.id], { source: OTHER_MARKETPLACE }),\n ...buildSkillConfigs([SKILLS.react.id], { source: CUSTOM_MARKETPLACE }),\n ],\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(`Marketplace ${JOINED_MARKETPLACES}`);\n });\n\n it(\"should name a shared marketplace once\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([SKILLS.react.id, SKILLS.vitest.id], {\n source: CUSTOM_MARKETPLACE,\n }),\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(`Marketplace ${CUSTOM_MARKETPLACE}`);\n expect(output).not.toContain(`${CUSTOM_MARKETPLACE} · ${CUSTOM_MARKETPLACE}`);\n });\n\n it(\"should keep naming a marketplace when only some of the skills are ejected\", () => {\n useWizardStore.setState({\n skillConfigs: [\n ...buildSkillConfigs([SKILLS.react.id], { source: EJECT_SOURCE }),\n ...buildSkillConfigs([SKILLS.vitest.id], { source: CUSTOM_MARKETPLACE }),\n ],\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(`Marketplace ${CUSTOM_MARKETPLACE}`);\n expect(output).not.toContain(ALL_SKILLS_EJECTED_LABEL);\n });\n\n it(\"should name the marketplace of a masked global install\", () => {\n // A tombstone still records a real global install and where it came from, and the summary\n // below renders it as a row — so the header has to own it too.\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([SKILLS.react.id], {\n scope: \"global\",\n source: CUSTOM_MARKETPLACE,\n excluded: true,\n }),\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(`Marketplace ${CUSTOM_MARKETPLACE}`);\n });\n\n it(\"should resolve the selected stack id to its display name\", () => {\n useWizardStore.setState({ selectedStackId: STACK_ID });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(`Stack ${STACK_NAME}`);\n });\n\n it(\"should render a stack of none when no stack is selected\", () => {\n useWizardStore.setState({ selectedStackId: null });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"Stack none\");\n });\n\n describe(\"stack id the matrix does not hold\", () => {\n silenceConsole([\"error\"]);\n\n it(\"should surface it as an error instead of labelling the row with the raw id\", () => {\n useWizardStore.setState({ selectedStackId: UNKNOWN_STACK_ID });\n\n // Ink's error boundary catches the throw and paints the message, so the\n // frames — not a rejected render() — are where the assertion lands.\n // Every frame, though, and never `lastFrame()`: catching the throw also\n // exits the app, and Ink's exit path appends a bare \"\\n\" of its own\n // whenever `CI` is set in the environment (`unmount` in ink.js guards\n // that write with `is-in-ci`). It is the last frame written without\n // being one the panel painted, so `lastFrame()` reads Ink's teardown\n // under CI and the painted error everywhere else. Nothing here is\n // timing-dependent — both writes land synchronously inside `render`.\n const { frames, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const paintedFrames = frames.join(\"\\n\");\n expect(paintedFrames).toContain(`Stack not found: ${UNKNOWN_STACK_ID}`);\n expect(paintedFrames).not.toContain(`Stack ${UNKNOWN_STACK_ID}`);\n });\n });\n });\n\n describe(\"summary\", () => {\n it(\"should render the skills and agents held in the store\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"]),\n agentConfigs: buildAgentConfigs([\"web-developer\"]),\n });\n\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"+ React\");\n expect(output).toContain(\"+ web-developer\");\n });\n\n it(\"should render the header even when there is nothing to summarize\", () => {\n const { lastFrame, unmount } = render(<SummaryPanel />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(`Marketplace ${DEFAULT_MARKETPLACE_LABEL}`);\n expect(output).not.toContain(\"Skills\");\n });\n });\n\n describe(\"scrolling\", () => {\n beforeEach(() => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"]),\n agentConfigs: buildAgentConfigs([\"web-developer\"]),\n });\n });\n\n it(\"should count the lines it clips when the content outgrows the viewport\", async () => {\n const { lastFrame, unmount } = renderInClippedViewport();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n expect(lastFrame()).toContain(`${CLIPPED_LINES} more below`);\n });\n\n it(\"should move the content up one line per down-arrow press\", async () => {\n const { stdin, lastFrame, unmount } = renderInClippedViewport();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"1 more above\");\n expect(output).toContain(`${CLIPPED_LINES - 1} more below`);\n });\n\n it(\"should stop at the top of the content on up-arrow\", async () => {\n const { stdin, lastFrame, unmount } = renderInClippedViewport();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).not.toContain(\"more above\");\n expect(output).toContain(`${CLIPPED_LINES} more below`);\n });\n\n it(\"should stop at the last line of the content on further down-arrows\", async () => {\n const { stdin, lastFrame, unmount } = renderInClippedViewport();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n for (let press = 0; press < CLIPPED_LINES + 1; press++) {\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n }\n\n const output = lastFrame();\n expect(output).toContain(`${CLIPPED_LINES} more above`);\n expect(output).not.toContain(\"more below\");\n });\n });\n});\n","import { afterEach, beforeEach, vi, type MockInstance } from \"vitest\";\n\ntype ConsoleMethod = \"log\" | \"warn\" | \"error\" | \"info\" | \"debug\";\n\nconst DEFAULT_METHODS: ConsoleMethod[] = [\"log\", \"warn\", \"error\"];\n\n/**\n * Registers a `beforeEach` that replaces the given console methods (default\n * log/warn/error) with no-op spies, and an `afterEach` that restores them via\n * `mockRestore`. Returns a live record of the spies so a test can assert on\n * the captured calls (e.g. `spies.log`). Only the requested `methods` get an\n * entry — the rest stay `undefined`.\n *\n * Call once at the top of a describe block. Only restores the console spies it\n * created — unlike `vi.restoreAllMocks()`, it leaves unrelated spies untouched.\n */\nexport function silenceConsole(\n methods: ConsoleMethod[] = DEFAULT_METHODS,\n): Partial<Record<ConsoleMethod, MockInstance>> {\n const spies: Partial<Record<ConsoleMethod, MockInstance>> = {};\n\n beforeEach(() => {\n for (const method of methods) {\n spies[method] = vi.spyOn(console, method).mockImplementation(() => {});\n }\n });\n\n afterEach(() => {\n for (const method of methods) {\n spies[method]?.mockRestore();\n }\n });\n\n return spies;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ Toast
4
+ } from "../../chunk-RBHYLCUB.js";
5
+ import "../../chunk-O5ASLZ2K.js";
6
+ import "../../chunk-P56WJ5FA.js";
7
+ export {
8
+ Toast
9
+ };
10
+ //# sourceMappingURL=toast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ WizardLayout
4
+ } from "../../chunk-UTFN6UJS.js";
5
+ import "../../chunk-EVXG3X6G.js";
6
+ import "../../chunk-RBHYLCUB.js";
7
+ import "../../chunk-TYJLR32W.js";
8
+ import "../../chunk-IOJR5TOY.js";
9
+ import "../../chunk-KOPEM3Q7.js";
10
+ import "../../chunk-YA4QQKKE.js";
11
+ import "../../chunk-VG2TVBFN.js";
12
+ import "../../chunk-IHO75PMZ.js";
13
+ import "../../chunk-5V2O6C3T.js";
14
+ import "../../chunk-44LLPS2N.js";
15
+ import "../../chunk-P3PN5SVI.js";
16
+ import "../../chunk-TVHRMRD3.js";
17
+ import "../../chunk-3LIU2ZEF.js";
18
+ import "../../chunk-DG2NGZ7S.js";
19
+ import "../../chunk-VEP23B5W.js";
20
+ import "../../chunk-O5ASLZ2K.js";
21
+ import "../../chunk-YU2VGX5R.js";
22
+ import "../../chunk-P56WJ5FA.js";
23
+ export {
24
+ WizardLayout
25
+ };
26
+ //# sourceMappingURL=wizard-layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,200 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ RENDER_DELAY_MS,
4
+ delay
5
+ } from "../../chunk-KSZ6PCY4.js";
6
+ import {
7
+ render
8
+ } from "../../chunk-EKWAUOQB.js";
9
+ import {
10
+ afterEach,
11
+ beforeEach,
12
+ describe,
13
+ globalExpect,
14
+ it
15
+ } from "../../chunk-I3XKEGHM.js";
16
+ import {
17
+ WizardLayout
18
+ } from "../../chunk-UTFN6UJS.js";
19
+ import "../../chunk-EVXG3X6G.js";
20
+ import "../../chunk-RBHYLCUB.js";
21
+ import "../../chunk-TYJLR32W.js";
22
+ import "../../chunk-IOJR5TOY.js";
23
+ import "../../chunk-KOPEM3Q7.js";
24
+ import "../../chunk-YA4QQKKE.js";
25
+ import "../../chunk-VG2TVBFN.js";
26
+ import "../../chunk-IHO75PMZ.js";
27
+ import "../../chunk-5V2O6C3T.js";
28
+ import {
29
+ useWizardStore
30
+ } from "../../chunk-44LLPS2N.js";
31
+ import {
32
+ formatTerminalTooSmallMessage
33
+ } from "../../chunk-P3PN5SVI.js";
34
+ import "../../chunk-TVHRMRD3.js";
35
+ import "../../chunk-3LIU2ZEF.js";
36
+ import "../../chunk-DG2NGZ7S.js";
37
+ import "../../chunk-VEP23B5W.js";
38
+ import {
39
+ LOGO_MIN_TERMINAL_ROWS,
40
+ MIN_TERMINAL_SIZE
41
+ } from "../../chunk-O5ASLZ2K.js";
42
+ import "../../chunk-YU2VGX5R.js";
43
+ import {
44
+ init_esm_shims
45
+ } from "../../chunk-P56WJ5FA.js";
46
+
47
+ // src/cli/components/wizard/wizard-layout.test.tsx
48
+ init_esm_shims();
49
+ import { Text } from "ink";
50
+ import { jsx } from "react/jsx-runtime";
51
+ var CHILD_MARKER = "STEP BODY";
52
+ var TAB_LABEL = "Stack";
53
+ var FOOTER_LABEL = "select";
54
+ var LOGO_MARKER = "ASCII LOGO ART";
55
+ var VERSION = "9.9.9";
56
+ var TOO_NARROW = { columns: MIN_TERMINAL_SIZE.COLS - 1, rows: MIN_TERMINAL_SIZE.ROWS + 10 };
57
+ var TOO_SHORT = { columns: MIN_TERMINAL_SIZE.COLS + 20, rows: MIN_TERMINAL_SIZE.ROWS - 1 };
58
+ var AT_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: MIN_TERMINAL_SIZE.ROWS };
59
+ var ROOMY = { columns: MIN_TERMINAL_SIZE.COLS + 20, rows: MIN_TERMINAL_SIZE.ROWS + 20 };
60
+ var AT_LOGO_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: LOGO_MIN_TERMINAL_ROWS };
61
+ var BELOW_LOGO_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: LOGO_MIN_TERMINAL_ROWS - 1 };
62
+ var ABOVE_LOGO_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: LOGO_MIN_TERMINAL_ROWS + 10 };
63
+ function resizeTo(stdout, { columns, rows }) {
64
+ Object.defineProperty(stdout, "columns", { value: columns, configurable: true });
65
+ Object.defineProperty(stdout, "rows", { value: rows, configurable: true });
66
+ stdout.emit("resize");
67
+ }
68
+ var mountLayout = async (logo) => {
69
+ const instance = render(
70
+ /* @__PURE__ */ jsx(WizardLayout, { version: VERSION, logo, children: /* @__PURE__ */ jsx(Text, { children: CHILD_MARKER }) })
71
+ );
72
+ await delay(RENDER_DELAY_MS);
73
+ return instance;
74
+ };
75
+ beforeEach(() => {
76
+ useWizardStore.setState({ step: "stack" });
77
+ });
78
+ describe("WizardLayout terminal-size guard", () => {
79
+ let cleanup;
80
+ afterEach(() => {
81
+ cleanup?.();
82
+ cleanup = void 0;
83
+ });
84
+ it("renders the wizard when the terminal has room", async () => {
85
+ const { stdout, lastFrame, unmount } = await mountLayout();
86
+ cleanup = unmount;
87
+ resizeTo(stdout, ROOMY);
88
+ await delay(RENDER_DELAY_MS);
89
+ const output = lastFrame();
90
+ globalExpect(output).toContain(CHILD_MARKER);
91
+ globalExpect(output).toContain(TAB_LABEL);
92
+ globalExpect(output).toContain(FOOTER_LABEL);
93
+ globalExpect(output).not.toContain("Please resize");
94
+ });
95
+ it("renders the wizard at exactly the minimum size", async () => {
96
+ const { stdout, lastFrame, unmount } = await mountLayout();
97
+ cleanup = unmount;
98
+ resizeTo(stdout, AT_MINIMUM);
99
+ await delay(RENDER_DELAY_MS);
100
+ const output = lastFrame();
101
+ globalExpect(output).toContain(CHILD_MARKER);
102
+ globalExpect(output).toContain(FOOTER_LABEL);
103
+ globalExpect(output).not.toContain("Please resize");
104
+ });
105
+ it("replaces the wizard with the resize prompt when the terminal is too short", async () => {
106
+ const { stdout, lastFrame, unmount } = await mountLayout();
107
+ cleanup = unmount;
108
+ resizeTo(stdout, TOO_SHORT);
109
+ await delay(RENDER_DELAY_MS);
110
+ const output = lastFrame();
111
+ globalExpect(output).toContain(formatTerminalTooSmallMessage(TOO_SHORT.columns));
112
+ globalExpect(output).not.toContain(CHILD_MARKER);
113
+ globalExpect(output).not.toContain(TAB_LABEL);
114
+ globalExpect(output).not.toContain(FOOTER_LABEL);
115
+ });
116
+ it("replaces the wizard with the resize prompt when the terminal is too narrow", async () => {
117
+ const { stdout, lastFrame, unmount } = await mountLayout();
118
+ cleanup = unmount;
119
+ resizeTo(stdout, TOO_NARROW);
120
+ await delay(RENDER_DELAY_MS);
121
+ const output = lastFrame();
122
+ globalExpect(output).toContain(formatTerminalTooSmallMessage(TOO_NARROW.columns));
123
+ globalExpect(output).not.toContain(CHILD_MARKER);
124
+ globalExpect(output).not.toContain(TAB_LABEL);
125
+ globalExpect(output).not.toContain(FOOTER_LABEL);
126
+ });
127
+ it("brings the wizard back when the terminal grows again", async () => {
128
+ const { stdout, lastFrame, unmount } = await mountLayout();
129
+ cleanup = unmount;
130
+ resizeTo(stdout, TOO_SHORT);
131
+ await delay(RENDER_DELAY_MS);
132
+ globalExpect(lastFrame()).not.toContain(CHILD_MARKER);
133
+ resizeTo(stdout, ROOMY);
134
+ await delay(RENDER_DELAY_MS);
135
+ const output = lastFrame();
136
+ globalExpect(output).toContain(CHILD_MARKER);
137
+ globalExpect(output).toContain(TAB_LABEL);
138
+ globalExpect(output).toContain(FOOTER_LABEL);
139
+ globalExpect(output).not.toContain("Please resize");
140
+ });
141
+ });
142
+ describe("WizardLayout logo", () => {
143
+ let cleanup;
144
+ afterEach(() => {
145
+ cleanup?.();
146
+ cleanup = void 0;
147
+ });
148
+ it("paints the logo on the stack step at exactly the logo threshold", async () => {
149
+ const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);
150
+ cleanup = unmount;
151
+ resizeTo(stdout, AT_LOGO_MINIMUM);
152
+ await delay(RENDER_DELAY_MS);
153
+ const output = lastFrame();
154
+ globalExpect(output).toContain(LOGO_MARKER);
155
+ globalExpect(output).toContain(CHILD_MARKER);
156
+ globalExpect(output).toContain(FOOTER_LABEL);
157
+ });
158
+ it("drops the logo one row below the threshold and keeps the step body", async () => {
159
+ const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);
160
+ cleanup = unmount;
161
+ resizeTo(stdout, BELOW_LOGO_MINIMUM);
162
+ await delay(RENDER_DELAY_MS);
163
+ const output = lastFrame();
164
+ globalExpect(output).not.toContain(LOGO_MARKER);
165
+ globalExpect(output).toContain(CHILD_MARKER);
166
+ globalExpect(output).toContain(FOOTER_LABEL);
167
+ });
168
+ it("drops the logo at the smallest terminal the CLI runs in", async () => {
169
+ const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);
170
+ cleanup = unmount;
171
+ resizeTo(stdout, AT_MINIMUM);
172
+ await delay(RENDER_DELAY_MS);
173
+ const output = lastFrame();
174
+ globalExpect(output).not.toContain(LOGO_MARKER);
175
+ globalExpect(output).toContain(CHILD_MARKER);
176
+ globalExpect(output).toContain(FOOTER_LABEL);
177
+ });
178
+ it("paints no logo off the stack step however tall the terminal", async () => {
179
+ useWizardStore.setState({ step: "domains" });
180
+ const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);
181
+ cleanup = unmount;
182
+ resizeTo(stdout, ABOVE_LOGO_MINIMUM);
183
+ await delay(RENDER_DELAY_MS);
184
+ const output = lastFrame();
185
+ globalExpect(output).not.toContain(LOGO_MARKER);
186
+ globalExpect(output).toContain(CHILD_MARKER);
187
+ globalExpect(output).toContain(FOOTER_LABEL);
188
+ });
189
+ it("brings the logo back when the terminal grows past the threshold", async () => {
190
+ const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);
191
+ cleanup = unmount;
192
+ resizeTo(stdout, AT_MINIMUM);
193
+ await delay(RENDER_DELAY_MS);
194
+ globalExpect(lastFrame()).not.toContain(LOGO_MARKER);
195
+ resizeTo(stdout, AT_LOGO_MINIMUM);
196
+ await delay(RENDER_DELAY_MS);
197
+ globalExpect(lastFrame()).toContain(LOGO_MARKER);
198
+ });
199
+ });
200
+ //# sourceMappingURL=wizard-layout.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/components/wizard/wizard-layout.test.tsx"],"sourcesContent":["import { Text } from \"ink\";\nimport { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it } from \"vitest\";\nimport { WizardLayout } from \"./wizard-layout\";\nimport { LOGO_MIN_TERMINAL_ROWS, MIN_TERMINAL_SIZE } from \"../../consts\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport { formatTerminalTooSmallMessage } from \"../../utils/terminal\";\nimport { RENDER_DELAY_MS, delay } from \"../../lib/__tests__/test-constants\";\n\n/** Text only the wizard's own children paint, so its absence proves they were replaced. */\nconst CHILD_MARKER = \"STEP BODY\";\n/** Wizard chrome WizardLayout itself paints: a step tab and the footer hotkey hint. */\nconst TAB_LABEL = \"Stack\";\nconst FOOTER_LABEL = \"select\";\n/** Stands in for `ASCII_LOGO`: the layout takes the art as an opaque string. */\nconst LOGO_MARKER = \"ASCII LOGO ART\";\n\nconst VERSION = \"9.9.9\";\n\nconst TOO_NARROW = { columns: MIN_TERMINAL_SIZE.COLS - 1, rows: MIN_TERMINAL_SIZE.ROWS + 10 };\nconst TOO_SHORT = { columns: MIN_TERMINAL_SIZE.COLS + 20, rows: MIN_TERMINAL_SIZE.ROWS - 1 };\n/** Exactly the gate — the geometry `TERMINAL_SIZE.SHORT` drives the E2E suite at. */\nconst AT_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: MIN_TERMINAL_SIZE.ROWS };\nconst ROOMY = { columns: MIN_TERMINAL_SIZE.COLS + 20, rows: MIN_TERMINAL_SIZE.ROWS + 20 };\n/** Exactly the logo threshold, and one row under it — the two sides of the boundary. */\nconst AT_LOGO_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: LOGO_MIN_TERMINAL_ROWS };\nconst BELOW_LOGO_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: LOGO_MIN_TERMINAL_ROWS - 1 };\n/** Comfortably over the logo threshold, so height cannot be why a logo is missing. */\nconst ABOVE_LOGO_MINIMUM = { columns: MIN_TERMINAL_SIZE.COLS, rows: LOGO_MIN_TERMINAL_ROWS + 10 };\n\ntype TestStdout = ReturnType<typeof render>[\"stdout\"];\n\n/**\n * Restate the terminal geometry the way a real resize does — `useTerminalDimensions`\n * re-reads `stdout.columns`/`stdout.rows` on the `resize` event. `columns` is a\n * prototype getter on the ink-testing-library stub, so it takes an own property\n * to shadow it; `rows` is absent there entirely.\n */\nfunction resizeTo(stdout: TestStdout, { columns, rows }: { columns: number; rows: number }): void {\n Object.defineProperty(stdout, \"columns\", { value: columns, configurable: true });\n Object.defineProperty(stdout, \"rows\", { value: rows, configurable: true });\n stdout.emit(\"resize\");\n}\n\n/**\n * Ink drives a concurrent React root, so effects have NOT flushed when\n * `render()` returns — resizing before the first paint settles emits into a\n * stdout nothing is listening on yet, and the frame never changes.\n */\nconst mountLayout = async (logo?: string) => {\n const instance = render(\n <WizardLayout version={VERSION} logo={logo}>\n <Text>{CHILD_MARKER}</Text>\n </WizardLayout>,\n );\n await delay(RENDER_DELAY_MS);\n return instance;\n};\n\n// The store is a module singleton, so the step one test sets would otherwise leak\n// into the next; the layout branches on it for the logo.\nbeforeEach(() => {\n useWizardStore.setState({ step: \"stack\" });\n});\n\ndescribe(\"WizardLayout terminal-size guard\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n it(\"renders the wizard when the terminal has room\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout();\n cleanup = unmount;\n\n resizeTo(stdout, ROOMY);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(CHILD_MARKER);\n expect(output).toContain(TAB_LABEL);\n expect(output).toContain(FOOTER_LABEL);\n expect(output).not.toContain(\"Please resize\");\n });\n\n it(\"renders the wizard at exactly the minimum size\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout();\n cleanup = unmount;\n\n resizeTo(stdout, AT_MINIMUM);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(CHILD_MARKER);\n expect(output).toContain(FOOTER_LABEL);\n expect(output).not.toContain(\"Please resize\");\n });\n\n it(\"replaces the wizard with the resize prompt when the terminal is too short\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout();\n cleanup = unmount;\n\n resizeTo(stdout, TOO_SHORT);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(formatTerminalTooSmallMessage(TOO_SHORT.columns));\n expect(output).not.toContain(CHILD_MARKER);\n expect(output).not.toContain(TAB_LABEL);\n expect(output).not.toContain(FOOTER_LABEL);\n });\n\n it(\"replaces the wizard with the resize prompt when the terminal is too narrow\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout();\n cleanup = unmount;\n\n resizeTo(stdout, TOO_NARROW);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(formatTerminalTooSmallMessage(TOO_NARROW.columns));\n expect(output).not.toContain(CHILD_MARKER);\n expect(output).not.toContain(TAB_LABEL);\n expect(output).not.toContain(FOOTER_LABEL);\n });\n\n it(\"brings the wizard back when the terminal grows again\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout();\n cleanup = unmount;\n\n resizeTo(stdout, TOO_SHORT);\n await delay(RENDER_DELAY_MS);\n expect(lastFrame()).not.toContain(CHILD_MARKER);\n\n resizeTo(stdout, ROOMY);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(CHILD_MARKER);\n expect(output).toContain(TAB_LABEL);\n expect(output).toContain(FOOTER_LABEL);\n expect(output).not.toContain(\"Please resize\");\n });\n});\n\ndescribe(\"WizardLayout logo\", () => {\n let cleanup: (() => void) | undefined;\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n it(\"paints the logo on the stack step at exactly the logo threshold\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);\n cleanup = unmount;\n\n resizeTo(stdout, AT_LOGO_MINIMUM);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(LOGO_MARKER);\n expect(output).toContain(CHILD_MARKER);\n expect(output).toContain(FOOTER_LABEL);\n });\n\n it(\"drops the logo one row below the threshold and keeps the step body\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);\n cleanup = unmount;\n\n resizeTo(stdout, BELOW_LOGO_MINIMUM);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).not.toContain(LOGO_MARKER);\n expect(output).toContain(CHILD_MARKER);\n expect(output).toContain(FOOTER_LABEL);\n });\n\n it(\"drops the logo at the smallest terminal the CLI runs in\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);\n cleanup = unmount;\n\n resizeTo(stdout, AT_MINIMUM);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).not.toContain(LOGO_MARKER);\n expect(output).toContain(CHILD_MARKER);\n expect(output).toContain(FOOTER_LABEL);\n });\n\n it(\"paints no logo off the stack step however tall the terminal\", async () => {\n useWizardStore.setState({ step: \"domains\" });\n\n const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);\n cleanup = unmount;\n\n resizeTo(stdout, ABOVE_LOGO_MINIMUM);\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).not.toContain(LOGO_MARKER);\n expect(output).toContain(CHILD_MARKER);\n expect(output).toContain(FOOTER_LABEL);\n });\n\n it(\"brings the logo back when the terminal grows past the threshold\", async () => {\n const { stdout, lastFrame, unmount } = await mountLayout(LOGO_MARKER);\n cleanup = unmount;\n\n resizeTo(stdout, AT_MINIMUM);\n await delay(RENDER_DELAY_MS);\n expect(lastFrame()).not.toContain(LOGO_MARKER);\n\n resizeTo(stdout, AT_LOGO_MINIMUM);\n await delay(RENDER_DELAY_MS);\n\n expect(lastFrame()).toContain(LOGO_MARKER);\n });\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ WIZARD_STEPS,
4
+ WizardTabs,
5
+ formatStepLabel
6
+ } from "../../chunk-EVXG3X6G.js";
7
+ import "../../chunk-44LLPS2N.js";
8
+ import "../../chunk-TVHRMRD3.js";
9
+ import "../../chunk-3LIU2ZEF.js";
10
+ import "../../chunk-DG2NGZ7S.js";
11
+ import "../../chunk-VEP23B5W.js";
12
+ import "../../chunk-O5ASLZ2K.js";
13
+ import "../../chunk-YU2VGX5R.js";
14
+ import "../../chunk-P56WJ5FA.js";
15
+ export {
16
+ WIZARD_STEPS,
17
+ WizardTabs,
18
+ formatStepLabel
19
+ };
20
+ //# sourceMappingURL=wizard-tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,290 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ render
4
+ } from "../../chunk-EKWAUOQB.js";
5
+ import {
6
+ afterEach,
7
+ describe,
8
+ globalExpect,
9
+ it
10
+ } from "../../chunk-I3XKEGHM.js";
11
+ import {
12
+ WIZARD_STEPS,
13
+ WizardTabs,
14
+ formatStepLabel
15
+ } from "../../chunk-EVXG3X6G.js";
16
+ import "../../chunk-44LLPS2N.js";
17
+ import "../../chunk-TVHRMRD3.js";
18
+ import "../../chunk-3LIU2ZEF.js";
19
+ import "../../chunk-DG2NGZ7S.js";
20
+ import "../../chunk-VEP23B5W.js";
21
+ import "../../chunk-O5ASLZ2K.js";
22
+ import "../../chunk-YU2VGX5R.js";
23
+ import {
24
+ init_esm_shims
25
+ } from "../../chunk-P56WJ5FA.js";
26
+
27
+ // src/cli/components/wizard/wizard-tabs.test.tsx
28
+ init_esm_shims();
29
+ import { jsx } from "react/jsx-runtime";
30
+ var renderWizardTabs = (props = {}) => {
31
+ const defaultProps = {
32
+ steps: WIZARD_STEPS,
33
+ currentStep: "stack",
34
+ completedSteps: [],
35
+ skippedSteps: [],
36
+ ...props
37
+ };
38
+ return render(/* @__PURE__ */ jsx(WizardTabs, { ...defaultProps }));
39
+ };
40
+ describe("WizardTabs component", () => {
41
+ let cleanup;
42
+ afterEach(() => {
43
+ cleanup?.();
44
+ cleanup = void 0;
45
+ });
46
+ describe("rendering", () => {
47
+ it("should render all 6 tabs", () => {
48
+ const { lastFrame, unmount } = renderWizardTabs();
49
+ cleanup = unmount;
50
+ const output = lastFrame();
51
+ globalExpect(output).toContain(formatStepLabel("stack"));
52
+ globalExpect(output).toContain(formatStepLabel("domains"));
53
+ globalExpect(output).toContain(formatStepLabel("build"));
54
+ globalExpect(output).toContain(formatStepLabel("sources"));
55
+ globalExpect(output).toContain(formatStepLabel("agents"));
56
+ globalExpect(output).toContain(formatStepLabel("confirm"));
57
+ });
58
+ it("should render with custom steps", () => {
59
+ const customSteps = [
60
+ { id: "stack", label: "First" },
61
+ { id: "build", label: "Second" }
62
+ ];
63
+ const { lastFrame, unmount } = renderWizardTabs({
64
+ steps: customSteps,
65
+ currentStep: "stack"
66
+ });
67
+ cleanup = unmount;
68
+ const output = lastFrame();
69
+ globalExpect(output).toContain("First");
70
+ globalExpect(output).toContain("Second");
71
+ });
72
+ it("should render horizontal dividers above and below tabs", () => {
73
+ const { lastFrame, unmount } = renderWizardTabs();
74
+ cleanup = unmount;
75
+ const output = lastFrame();
76
+ globalExpect(output).toContain("\u2500");
77
+ });
78
+ });
79
+ describe("current step", () => {
80
+ it("should render current step label", () => {
81
+ const { lastFrame, unmount } = renderWizardTabs({
82
+ currentStep: "build"
83
+ });
84
+ cleanup = unmount;
85
+ const output = lastFrame();
86
+ globalExpect(output).toContain(formatStepLabel("build"));
87
+ });
88
+ it("should mark first step as current by default", () => {
89
+ const { lastFrame, unmount } = renderWizardTabs({
90
+ currentStep: "stack",
91
+ completedSteps: []
92
+ });
93
+ cleanup = unmount;
94
+ const output = lastFrame();
95
+ globalExpect(output).toContain(formatStepLabel("stack"));
96
+ });
97
+ it("should update current step when changed", () => {
98
+ const { lastFrame, unmount } = renderWizardTabs({
99
+ currentStep: "confirm",
100
+ completedSteps: ["stack", "build"]
101
+ });
102
+ cleanup = unmount;
103
+ const output = lastFrame();
104
+ globalExpect(output).toContain(formatStepLabel("confirm"));
105
+ });
106
+ });
107
+ describe("completed steps", () => {
108
+ it("should render completed step labels", () => {
109
+ const { lastFrame, unmount } = renderWizardTabs({
110
+ currentStep: "build",
111
+ completedSteps: ["stack"]
112
+ });
113
+ cleanup = unmount;
114
+ const output = lastFrame();
115
+ globalExpect(output).toContain(formatStepLabel("stack"));
116
+ });
117
+ it("should render multiple completed steps", () => {
118
+ const { lastFrame, unmount } = renderWizardTabs({
119
+ currentStep: "sources",
120
+ completedSteps: ["stack", "build"]
121
+ });
122
+ cleanup = unmount;
123
+ const output = lastFrame();
124
+ globalExpect(output).toContain(formatStepLabel("stack"));
125
+ globalExpect(output).toContain(formatStepLabel("build"));
126
+ });
127
+ it("should render current step separately from completed steps", () => {
128
+ const { lastFrame, unmount } = renderWizardTabs({
129
+ currentStep: "stack",
130
+ completedSteps: []
131
+ });
132
+ cleanup = unmount;
133
+ const output = lastFrame();
134
+ globalExpect(output).toContain(formatStepLabel("stack"));
135
+ });
136
+ });
137
+ describe("pending steps", () => {
138
+ it("should render pending step labels", () => {
139
+ const { lastFrame, unmount } = renderWizardTabs({
140
+ currentStep: "stack",
141
+ completedSteps: []
142
+ });
143
+ cleanup = unmount;
144
+ const output = lastFrame();
145
+ globalExpect(output).toContain(formatStepLabel("domains"));
146
+ globalExpect(output).toContain(formatStepLabel("build"));
147
+ globalExpect(output).toContain(formatStepLabel("sources"));
148
+ });
149
+ it("should render steps after current", () => {
150
+ const { lastFrame, unmount } = renderWizardTabs({
151
+ currentStep: "build",
152
+ completedSteps: ["stack"]
153
+ });
154
+ cleanup = unmount;
155
+ const output = lastFrame();
156
+ globalExpect(output).toContain(formatStepLabel("confirm"));
157
+ });
158
+ });
159
+ describe("skipped steps", () => {
160
+ it("should render skipped step labels", () => {
161
+ const { lastFrame, unmount } = renderWizardTabs({
162
+ currentStep: "sources",
163
+ completedSteps: ["stack"],
164
+ skippedSteps: ["build"]
165
+ });
166
+ cleanup = unmount;
167
+ const output = lastFrame();
168
+ globalExpect(output).toContain(formatStepLabel("build"));
169
+ });
170
+ it("should handle multiple skipped steps", () => {
171
+ const { lastFrame, unmount } = renderWizardTabs({
172
+ currentStep: "confirm",
173
+ completedSteps: ["stack"],
174
+ skippedSteps: ["build", "sources"]
175
+ });
176
+ cleanup = unmount;
177
+ const output = lastFrame();
178
+ globalExpect(output).toContain(formatStepLabel("build"));
179
+ globalExpect(output).toContain(formatStepLabel("sources"));
180
+ });
181
+ it("should prioritize completed over skipped when step is in both arrays", () => {
182
+ const { lastFrame, unmount } = renderWizardTabs({
183
+ currentStep: "sources",
184
+ completedSteps: ["stack", "build"],
185
+ skippedSteps: ["build"]
186
+ });
187
+ cleanup = unmount;
188
+ const output = lastFrame();
189
+ globalExpect(output).toContain(formatStepLabel("stack"));
190
+ globalExpect(output).toContain(formatStepLabel("build"));
191
+ });
192
+ });
193
+ describe("state priority", () => {
194
+ it("should prioritize completed over current", () => {
195
+ const { lastFrame, unmount } = renderWizardTabs({
196
+ currentStep: "stack",
197
+ completedSteps: ["stack"]
198
+ });
199
+ cleanup = unmount;
200
+ const output = lastFrame();
201
+ globalExpect(output).toContain(formatStepLabel("stack"));
202
+ });
203
+ it("should prioritize current over skipped", () => {
204
+ const { lastFrame, unmount } = renderWizardTabs({
205
+ currentStep: "build",
206
+ completedSteps: [],
207
+ skippedSteps: ["build"]
208
+ });
209
+ cleanup = unmount;
210
+ const output = lastFrame();
211
+ globalExpect(output).toContain(formatStepLabel("build"));
212
+ });
213
+ it("should prioritize completed over skipped", () => {
214
+ const { lastFrame, unmount } = renderWizardTabs({
215
+ currentStep: "sources",
216
+ completedSteps: ["stack"],
217
+ skippedSteps: ["stack"]
218
+ });
219
+ cleanup = unmount;
220
+ const output = lastFrame();
221
+ globalExpect(output).toContain(formatStepLabel("stack"));
222
+ });
223
+ });
224
+ describe("visual layout", () => {
225
+ it("should render tabs horizontally", () => {
226
+ const { lastFrame, unmount } = renderWizardTabs();
227
+ cleanup = unmount;
228
+ const output = lastFrame();
229
+ globalExpect(output).toContain(formatStepLabel("stack"));
230
+ globalExpect(output).toContain(formatStepLabel("confirm"));
231
+ });
232
+ it("should include step labels", () => {
233
+ const { lastFrame, unmount } = renderWizardTabs();
234
+ cleanup = unmount;
235
+ const output = lastFrame();
236
+ WIZARD_STEPS.forEach((step) => {
237
+ globalExpect(output).toContain(formatStepLabel(step.id));
238
+ });
239
+ });
240
+ });
241
+ describe("edge cases", () => {
242
+ it("should handle empty completed steps", () => {
243
+ const { lastFrame, unmount } = renderWizardTabs({
244
+ currentStep: "stack",
245
+ completedSteps: []
246
+ });
247
+ cleanup = unmount;
248
+ const output = lastFrame();
249
+ globalExpect(output).toContain(formatStepLabel("stack"));
250
+ globalExpect(output).toContain(formatStepLabel("confirm"));
251
+ });
252
+ it("should handle empty skipped steps", () => {
253
+ const { lastFrame, unmount } = renderWizardTabs({
254
+ currentStep: "sources",
255
+ completedSteps: ["stack", "build"],
256
+ skippedSteps: []
257
+ });
258
+ cleanup = unmount;
259
+ const output = lastFrame();
260
+ globalExpect(output).toContain(formatStepLabel("stack"));
261
+ globalExpect(output).toContain(formatStepLabel("build"));
262
+ globalExpect(output).toContain(formatStepLabel("sources"));
263
+ });
264
+ it("should handle all steps completed", () => {
265
+ const { lastFrame, unmount } = renderWizardTabs({
266
+ currentStep: "confirm",
267
+ completedSteps: ["stack", "domains", "build", "sources", "agents", "confirm"]
268
+ });
269
+ cleanup = unmount;
270
+ const output = lastFrame();
271
+ globalExpect(output).toContain(formatStepLabel("stack"));
272
+ globalExpect(output).toContain(formatStepLabel("domains"));
273
+ globalExpect(output).toContain(formatStepLabel("build"));
274
+ globalExpect(output).toContain(formatStepLabel("sources"));
275
+ globalExpect(output).toContain(formatStepLabel("confirm"));
276
+ });
277
+ it("should handle single step", () => {
278
+ const singleStep = [{ id: "confirm", label: "Only Step" }];
279
+ const { lastFrame, unmount } = renderWizardTabs({
280
+ steps: singleStep,
281
+ currentStep: "confirm",
282
+ completedSteps: []
283
+ });
284
+ cleanup = unmount;
285
+ const output = lastFrame();
286
+ globalExpect(output).toContain("Only Step");
287
+ });
288
+ });
289
+ });
290
+ //# sourceMappingURL=wizard-tabs.test.js.map