agents-inc 0.149.1 → 0.150.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 +2277 -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-4GL2F5AB.js +222 -0
  12. package/dist/chunk-4GL2F5AB.js.map +1 -0
  13. package/dist/chunk-4LPJZNT7.js +382 -0
  14. package/dist/chunk-4LPJZNT7.js.map +1 -0
  15. package/dist/chunk-5K5RBRTD.js +62 -0
  16. package/dist/chunk-5K5RBRTD.js.map +1 -0
  17. package/dist/chunk-6I6RZHYP.js +789 -0
  18. package/dist/chunk-6I6RZHYP.js.map +1 -0
  19. package/dist/chunk-7URSGJLE.js +430 -0
  20. package/dist/chunk-7URSGJLE.js.map +1 -0
  21. package/dist/chunk-C55DN7GE.js +35 -0
  22. package/dist/chunk-C55DN7GE.js.map +1 -0
  23. package/dist/chunk-CDMHSHBN.js +68 -0
  24. package/dist/chunk-CDMHSHBN.js.map +1 -0
  25. package/dist/chunk-CFQT72MJ.js +92 -0
  26. package/dist/chunk-CFQT72MJ.js.map +1 -0
  27. package/dist/chunk-DAG2ULNF.js +125 -0
  28. package/dist/chunk-DAG2ULNF.js.map +1 -0
  29. package/dist/chunk-DDG4F3FE.js +181 -0
  30. package/dist/chunk-DDG4F3FE.js.map +1 -0
  31. package/dist/chunk-DIBCRIMR.js +36 -0
  32. package/dist/chunk-DIBCRIMR.js.map +1 -0
  33. package/dist/chunk-DJAZE4PD.js +10929 -0
  34. package/dist/chunk-DJAZE4PD.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-E4FT2KFV.js +174 -0
  38. package/dist/chunk-E4FT2KFV.js.map +1 -0
  39. package/dist/chunk-EKWAUOQB.js +96 -0
  40. package/dist/chunk-EKWAUOQB.js.map +1 -0
  41. package/dist/chunk-EN2GCPW7.js +300 -0
  42. package/dist/chunk-EN2GCPW7.js.map +1 -0
  43. package/dist/chunk-ES3NJZON.js +31 -0
  44. package/dist/chunk-ES3NJZON.js.map +1 -0
  45. package/dist/chunk-F3756A5B.js +20 -0
  46. package/dist/chunk-F3756A5B.js.map +1 -0
  47. package/dist/chunk-FWT3CBLL.js +51 -0
  48. package/dist/chunk-FWT3CBLL.js.map +1 -0
  49. package/dist/chunk-FYPUUYSG.js +31 -0
  50. package/dist/chunk-FYPUUYSG.js.map +1 -0
  51. package/dist/chunk-GRPSDKIS.js +112 -0
  52. package/dist/chunk-GRPSDKIS.js.map +1 -0
  53. package/dist/chunk-GYG5SE2D.js +81 -0
  54. package/dist/chunk-GYG5SE2D.js.map +1 -0
  55. package/dist/chunk-HIPGKIT3.js +287 -0
  56. package/dist/chunk-HIPGKIT3.js.map +1 -0
  57. package/dist/chunk-I3XKEGHM.js +16383 -0
  58. package/dist/chunk-I3XKEGHM.js.map +1 -0
  59. package/dist/chunk-IHO75PMZ.js +40 -0
  60. package/dist/chunk-IHO75PMZ.js.map +1 -0
  61. package/dist/chunk-IOJR5TOY.js +47 -0
  62. package/dist/chunk-IOJR5TOY.js.map +1 -0
  63. package/dist/chunk-K3OU6TGX.js +77 -0
  64. package/dist/chunk-K3OU6TGX.js.map +1 -0
  65. package/dist/chunk-KH7MOIM5.js +6010 -0
  66. package/dist/chunk-KH7MOIM5.js.map +1 -0
  67. package/dist/chunk-KIR7VYQD.js +63 -0
  68. package/dist/chunk-KIR7VYQD.js.map +1 -0
  69. package/dist/chunk-KOPEM3Q7.js +27 -0
  70. package/dist/chunk-KOPEM3Q7.js.map +1 -0
  71. package/dist/chunk-KSZ6PCY4.js +43 -0
  72. package/dist/chunk-KSZ6PCY4.js.map +1 -0
  73. package/dist/chunk-LRYNF3J7.js +111 -0
  74. package/dist/chunk-LRYNF3J7.js.map +1 -0
  75. package/dist/chunk-LYYXX2W5.js +87 -0
  76. package/dist/chunk-LYYXX2W5.js.map +1 -0
  77. package/dist/chunk-MC5DUZ3V.js +1135 -0
  78. package/dist/chunk-MC5DUZ3V.js.map +1 -0
  79. package/dist/chunk-N4IZ6GBO.js +300 -0
  80. package/dist/chunk-N4IZ6GBO.js.map +1 -0
  81. package/dist/chunk-NIKUMXE7.js +24 -0
  82. package/dist/chunk-NIKUMXE7.js.map +1 -0
  83. package/dist/chunk-NUIZ6ZUO.js +42 -0
  84. package/dist/chunk-NUIZ6ZUO.js.map +1 -0
  85. package/dist/chunk-O5ASLZ2K.js +270 -0
  86. package/dist/chunk-O5ASLZ2K.js.map +1 -0
  87. package/dist/chunk-OA5SUEQD.js +181 -0
  88. package/dist/chunk-OA5SUEQD.js.map +1 -0
  89. package/dist/chunk-OZZGXBCN.js +15 -0
  90. package/dist/chunk-OZZGXBCN.js.map +1 -0
  91. package/dist/chunk-P3PN5SVI.js +27 -0
  92. package/dist/chunk-P3PN5SVI.js.map +1 -0
  93. package/dist/chunk-P56WJ5FA.js +50 -0
  94. package/dist/chunk-P56WJ5FA.js.map +1 -0
  95. package/dist/chunk-PG4G4IIK.js +24 -0
  96. package/dist/chunk-PG4G4IIK.js.map +1 -0
  97. package/dist/chunk-QQLRX4KI.js +41 -0
  98. package/dist/chunk-QQLRX4KI.js.map +1 -0
  99. package/dist/chunk-RBHYLCUB.js +31 -0
  100. package/dist/chunk-RBHYLCUB.js.map +1 -0
  101. package/dist/chunk-RJN7W2C7.js +349 -0
  102. package/dist/chunk-RJN7W2C7.js.map +1 -0
  103. package/dist/chunk-RP7R73JO.js +179 -0
  104. package/dist/chunk-RP7R73JO.js.map +1 -0
  105. package/dist/chunk-SYUOXSPU.js +510 -0
  106. package/dist/chunk-SYUOXSPU.js.map +1 -0
  107. package/dist/chunk-THKIOI32.js +939 -0
  108. package/dist/chunk-THKIOI32.js.map +1 -0
  109. package/dist/chunk-UZRISDBZ.js +28 -0
  110. package/dist/chunk-UZRISDBZ.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-VIFZ6NFH.js +27 -0
  118. package/dist/chunk-VIFZ6NFH.js.map +1 -0
  119. package/dist/chunk-XA57SX4T.js +115 -0
  120. package/dist/chunk-XA57SX4T.js.map +1 -0
  121. package/dist/chunk-YKKIJHZB.js +339 -0
  122. package/dist/chunk-YKKIJHZB.js.map +1 -0
  123. package/dist/chunk-YU2VGX5R.js +4205 -0
  124. package/dist/chunk-YU2VGX5R.js.map +1 -0
  125. package/dist/chunk-ZDLTLNU2.js +258 -0
  126. package/dist/chunk-ZDLTLNU2.js.map +1 -0
  127. package/dist/chunk-ZHTXPFDK.js +128 -0
  128. package/dist/chunk-ZHTXPFDK.js.map +1 -0
  129. package/dist/chunk-ZKJAJWK6.js +253 -0
  130. package/dist/chunk-ZKJAJWK6.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-CA7P73RZ.js +15 -0
  244. package/dist/copy-local-skills-CA7P73RZ.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-6MAY5ABI.js +16 -0
  252. package/dist/load-agent-defs-6MAY5ABI.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-VYQJ6UZB.js +20 -0
  258. package/dist/recompile-project-agents-VYQJ6UZB.js.map +1 -0
  259. package/dist/source-loader-VVHMQEX5.js +20 -0
  260. package/dist/source-loader-VVHMQEX5.js.map +1 -0
  261. package/dist/source-manager-TPDXV5FO.js +18 -0
  262. package/dist/source-manager-TPDXV5FO.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 +131 -13
  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/step-confirm.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { StepConfirm } from \"./step-confirm\";\nimport { SkillAgentSummary } from \"./skill-agent-summary\";\nimport { DEFAULT_PUBLIC_SOURCE_NAME } from \"../../consts\";\nimport {\n ARROW_DOWN,\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\nimport { buildAgentConfigs } from \"../../lib/__tests__/factories/config-factories\";\nimport { buildSkillConfigs } from \"../../lib/__tests__/helpers/wizard-simulation\";\nimport { initializeMatrix } from \"../../lib/matrix/matrix-provider\";\nimport { WEB_PAIR_MATRIX, WEB_TRIO_MATRIX } from \"../../lib/__tests__/mock-data/mock-matrices\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport type { SkillConfig } from \"../../types/config\";\n\ndescribe(\"StepConfirm component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(() => {\n initializeMatrix(WEB_PAIR_MATRIX);\n useWizardStore.setState({\n installedSkillConfigs: null,\n installedAgentConfigs: null,\n isInitMode: false,\n });\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"skills tables\", () => {\n it(\"should show global-scoped skills under Global scope label\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Global\");\n expect(output).toContain(\"React\");\n });\n\n it(\"should show project-scoped skills under Project scope label\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Project\");\n expect(output).toContain(\"React\");\n });\n\n it(\"should show both scope labels when both scopes have skills\", () => {\n useWizardStore.setState({\n skillConfigs: [\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n ...buildSkillConfigs([\"web-state-zustand\"], { scope: \"global\" }),\n ],\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Project\");\n expect(output).toContain(\"Global\");\n });\n\n it(\"should not show Project scope label when no project-scoped skills\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).not.toContain(\"Project\");\n expect(output).toContain(\"Global\");\n });\n\n it(\"should not show Global scope label when no global-scoped skills\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Project\");\n expect(output).not.toContain(\"Global\");\n });\n });\n\n describe(\"panel header\", () => {\n it(\"should render the marketplace and stack rows above the summary\", () => {\n // The source is stated because the Marketplace row now derives from it — the factory's\n // default is `eject`, which names no marketplace at all.\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], {\n source: DEFAULT_PUBLIC_SOURCE_NAME,\n }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Marketplace Agents Inc\");\n expect(output).toContain(\"Stack none\");\n expect(output).toContain(\"React\");\n });\n });\n\n describe(\"eject icon display\", () => {\n it(\"should show eject icon for eject-source skills\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], { source: \"eject\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"⏏\");\n });\n\n it(\"should not show eject icon for plugin-source skills\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], { source: \"agents-inc\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).not.toContain(\"⏏\");\n });\n });\n\n describe(\"new item markers - init mode (no prior installation)\", () => {\n it(\"should show + prefix when installedSkillConfigs is absent\", () => {\n useWizardStore.setState({\n skillConfigs: buildSkillConfigs([\"web-framework-react\", \"web-state-zustand\"]),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"+ React\");\n expect(output).toContain(\"+ Zustand\");\n expect(output).not.toContain(\"• React\");\n expect(output).not.toContain(\"• Zustand\");\n });\n\n it(\"should show + prefix for agents when installedAgentConfigs is absent\", () => {\n useWizardStore.setState({ agentConfigs: buildAgentConfigs([\"web-developer\"]) });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"+ web-developer\");\n expect(output).not.toContain(\"• web-developer\");\n });\n });\n\n describe(\"new item markers - edit mode\", () => {\n it(\"should show + for a skill not in installedSkillConfigs\", () => {\n useWizardStore.setState({\n installedSkillConfigs: [],\n skillConfigs: buildSkillConfigs([\"web-framework-react\"]),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"+ React\");\n });\n\n it(\"should show bullet for a skill that IS in installedSkillConfigs\", () => {\n const configs = buildSkillConfigs([\"web-framework-react\"]);\n useWizardStore.setState({ installedSkillConfigs: configs, skillConfigs: configs });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"• React\");\n expect(output).not.toContain(\"+ React\");\n });\n\n it(\"should show mix of + and bullet in same scope\", () => {\n const existingConfigs = buildSkillConfigs([\"web-framework-react\"]);\n useWizardStore.setState({\n installedSkillConfigs: existingConfigs,\n skillConfigs: [...existingConfigs, ...buildSkillConfigs([\"web-state-zustand\"])],\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"+ Zustand\");\n expect(output).toContain(\"• React\");\n expect(output).not.toContain(\"+ React\");\n });\n\n it(\"should show + on new agent when installedAgentConfigs is empty\", () => {\n useWizardStore.setState({\n installedAgentConfigs: [],\n agentConfigs: buildAgentConfigs([\"web-developer\"]),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"+ web-developer\");\n });\n\n it(\"should show bullet on agent that was already in installedAgentConfigs\", () => {\n const agents = buildAgentConfigs([\"web-developer\"]);\n useWizardStore.setState({ installedAgentConfigs: agents, agentConfigs: agents });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"• web-developer\");\n expect(output).not.toContain(\"+ web-developer\");\n });\n });\n\n describe(\"removed item markers - edit mode\", () => {\n it(\"should show - for a skill in installedSkillConfigs but not in skillConfigs\", () => {\n useWizardStore.setState({\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"]),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"- React\");\n });\n\n it(\"should show - for a removed agent\", () => {\n useWizardStore.setState({\n installedAgentConfigs: buildAgentConfigs([\"web-developer\"]),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"- web-developer\");\n });\n\n it(\"should show mix of bullet and - items\", () => {\n useWizardStore.setState({\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\", \"web-state-zustand\"]),\n skillConfigs: buildSkillConfigs([\"web-framework-react\"]),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"• React\");\n expect(output).not.toContain(\"+ React\");\n expect(output).not.toContain(\"- React\");\n expect(output).toContain(\"- Zustand\");\n });\n\n it(\"should show scope heading when all skills in scope are removed\", () => {\n useWizardStore.setState({\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"Global\");\n });\n });\n\n describe(\"init mode — global pre-selections should not show as removed\", () => {\n it(\"should NOT show - for a deselected global skill during init\", () => {\n useWizardStore.setState({\n isInitMode: true,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).not.toContain(\"React\");\n });\n\n it(\"should NOT show - for a deselected global agent during init\", () => {\n useWizardStore.setState({\n isInitMode: true,\n installedAgentConfigs: buildAgentConfigs([\"web-developer\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).not.toContain(\"web-developer\");\n });\n\n it(\"should still show - for removed project skills during init\", () => {\n useWizardStore.setState({\n isInitMode: true,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"- React\");\n });\n\n it(\"should show - for deselected global skill in edit mode (isInitMode=false)\", () => {\n useWizardStore.setState({\n isInitMode: false,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"- React\");\n });\n });\n\n describe(\"agents tables\", () => {\n it(\"should show global agents under Global scope label\", () => {\n useWizardStore.setState({\n agentConfigs: buildAgentConfigs([\"web-developer\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Global\");\n expect(output).toContain(\"web-developer\");\n });\n\n it(\"should show project agents under Project scope label\", () => {\n useWizardStore.setState({\n agentConfigs: buildAgentConfigs([\"web-developer\"], { scope: \"project\" }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Project\");\n expect(output).toContain(\"web-developer\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should call onComplete when Enter is pressed\", async () => {\n const onComplete = vi.fn();\n useWizardStore.setState({ skillConfigs: buildSkillConfigs([\"web-framework-react\"]) });\n\n const { stdin, unmount } = render(<StepConfirm onComplete={onComplete} onBack={vi.fn()} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n await stdin.write(ENTER);\n await delay(RENDER_DELAY_MS);\n\n expect(onComplete).toHaveBeenCalled();\n });\n\n it(\"should call onBack when Escape is pressed\", async () => {\n const onComplete = vi.fn();\n const onBack = vi.fn();\n useWizardStore.setState({ skillConfigs: buildSkillConfigs([\"web-framework-react\"]) });\n\n const { stdin, unmount } = render(<StepConfirm onComplete={onComplete} onBack={onBack} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n await stdin.write(ESCAPE);\n await delay(RENDER_DELAY_MS);\n\n expect(onBack).toHaveBeenCalled();\n expect(onComplete).not.toHaveBeenCalled();\n });\n\n it(\"should not leave or complete the step when the panel's scroll keys are pressed\", async () => {\n const onComplete = vi.fn();\n const onBack = vi.fn();\n useWizardStore.setState({ skillConfigs: buildSkillConfigs([\"web-framework-react\"]) });\n\n const { stdin, unmount } = render(<StepConfirm onComplete={onComplete} onBack={onBack} />);\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n await stdin.write(ARROW_DOWN);\n await delay(RENDER_DELAY_MS);\n\n expect(onComplete).not.toHaveBeenCalled();\n expect(onBack).not.toHaveBeenCalled();\n });\n });\n\n describe(\"excluded global items\", () => {\n it(\"should show excluded global skill in Global section alongside active skills\", () => {\n useWizardStore.setState({\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\", \"web-state-zustand\"], {\n scope: \"global\",\n }),\n skillConfigs: [\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n ...buildSkillConfigs([\"web-state-zustand\"], { scope: \"global\", excluded: true }),\n ],\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Global\");\n expect(output).toContain(\"React\");\n expect(output).toContain(\"Zustand\");\n });\n\n it(\"should not hide excluded global skill from output\", () => {\n useWizardStore.setState({\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], {\n scope: \"global\",\n excluded: true,\n }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"React\");\n });\n\n it(\"should show excluded global agent in Global section\", () => {\n useWizardStore.setState({\n installedAgentConfigs: buildAgentConfigs([\"web-developer\"], { scope: \"global\" }),\n agentConfigs: buildAgentConfigs([\"web-developer\"], { scope: \"global\", excluded: true }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Global\");\n expect(output).toContain(\"web-developer\");\n });\n\n it(\"should show Global section when only excluded global skills exist\", () => {\n useWizardStore.setState({\n installedSkillConfigs: [],\n skillConfigs: buildSkillConfigs([\"web-framework-react\"], {\n scope: \"global\",\n excluded: true,\n }),\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toContain(\"Global\");\n });\n\n it(\"should not duplicate a re-scoped skill in the Global section\", () => {\n useWizardStore.setState({\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n skillConfigs: [\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"global\", excluded: true }),\n ],\n });\n\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n const output = lastFrame()!;\n // Once in Global (inherited •) + once in Project (re-scoped +) = 2, not 3\n const reactMatches = output.split(\"React\").length - 1;\n expect(reactMatches).toBe(2);\n });\n\n it(\"should show correct entries for mixed re-scoped and excluded skills\", () => {\n initializeMatrix(WEB_TRIO_MATRIX);\n useWizardStore.setState({\n isInitMode: false,\n installedSkillConfigs: [\n { id: \"web-framework-react\", scope: \"global\", source: \"agents-inc\" },\n { id: \"web-testing-vitest\", scope: \"global\", source: \"agents-inc\" },\n ],\n installedAgentConfigs: null,\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={[\n { id: \"web-framework-react\", scope: \"project\", source: \"agents-inc\" },\n {\n id: \"web-framework-react\",\n scope: \"global\",\n source: \"agents-inc\",\n excluded: true,\n },\n {\n id: \"web-testing-vitest\",\n scope: \"global\",\n source: \"agents-inc\",\n excluded: true,\n },\n ]}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n\n // React should appear twice: once in Global (inherited •), once in Project (+)\n const reactMatches = output.split(\"React\").length - 1;\n expect(reactMatches).toBe(2);\n\n // Vitest should appear once in Global (excluded)\n const vitestMatches = output.split(\"Vitest\").length - 1;\n expect(vitestMatches).toBe(1);\n\n // Should show both scope sections\n expect(output).toContain(\"Project\");\n expect(output).toContain(\"Global\");\n });\n });\n\n describe(\"empty state\", () => {\n it(\"should render without crash when no skillConfigs or agentConfigs provided\", () => {\n const { lastFrame, unmount } = render(<StepConfirm onComplete={vi.fn()} onBack={vi.fn()} />);\n cleanup = unmount;\n\n expect(lastFrame()).toBeDefined();\n });\n });\n});\n\ndescribe(\"SkillAgentSummary component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(() => {\n initializeMatrix(WEB_PAIR_MATRIX);\n useWizardStore.setState({\n installedSkillConfigs: null,\n installedAgentConfigs: null,\n isInitMode: false,\n });\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"source mode changes\", () => {\n it(\"should show ~ prefix when skill source changes from plugin to eject\", () => {\n useWizardStore.setState({\n isInitMode: false,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { source: \"agents-inc\" }),\n installedAgentConfigs: null,\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={buildSkillConfigs([\"web-framework-react\"])}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"~\");\n expect(output).toContain(\"React\");\n // The compact \"~\" marker alone signals the source change; the verbose\n // \"<old> → <new>\" transition that overflowed the column is not rendered.\n expect(output).not.toContain(\"→\");\n });\n\n it(\"should show ~ prefix when skill source changes from eject to plugin\", () => {\n useWizardStore.setState({\n isInitMode: false,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"]),\n installedAgentConfigs: null,\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={buildSkillConfigs([\"web-framework-react\"], { source: \"agents-inc\" })}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"~\");\n expect(output).toContain(\"React\");\n // The compact \"~\" marker alone signals the source change; the verbose\n // \"<old> → <new>\" transition that overflowed the column is not rendered.\n expect(output).not.toContain(\"→\");\n });\n\n it(\"should not show ~ when skill source is unchanged\", () => {\n useWizardStore.setState({\n isInitMode: false,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { source: \"agents-inc\" }),\n installedAgentConfigs: null,\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={buildSkillConfigs([\"web-framework-react\"], { source: \"agents-inc\" })}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).not.toContain(\"~\");\n expect(output).toContain(\"React\");\n expect(output).toContain(\"•\");\n });\n\n it(\"should show ~ for global-scoped skill source change\", () => {\n useWizardStore.setState({\n isInitMode: false,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], {\n scope: \"global\",\n source: \"agents-inc\",\n }),\n installedAgentConfigs: null,\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" })}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"~\");\n expect(output).toContain(\"React\");\n expect(output).toContain(\"Global\");\n });\n\n it(\"should show both source change and new skill markers together\", () => {\n initializeMatrix(WEB_TRIO_MATRIX);\n useWizardStore.setState({\n isInitMode: false,\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { source: \"agents-inc\" }),\n installedAgentConfigs: null,\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={[\n ...buildSkillConfigs([\"web-framework-react\"]),\n ...buildSkillConfigs([\"web-testing-vitest\"], { source: \"agents-inc\" }),\n ]}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"~ React\");\n expect(output).toContain(\"+ Vitest\");\n });\n });\n\n describe(\"dual-scope G→P toggle diff\", () => {\n it(\"in-session G→P toggle should show + at Project and • at Global (not -)\", () => {\n // Baseline: react is globally installed. User toggles G→P in this\n // session. Store emits dual-scope state: active project + global\n // tombstone. The global install survives (the tombstone is a\n // dual-scope indicator, not a removal signal). The Global row must\n // render as `•` (unchanged) — a `-` would falsely suggest the global\n // install was removed.\n useWizardStore.setState({\n installedSkillConfigs: buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={[\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"global\", excluded: true }),\n ]}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"+ React\");\n expect(output).toContain(\"• React\");\n expect(output).not.toContain(\"- React\");\n expect(output).not.toContain(\"~ React\");\n });\n\n it(\"re-open with saved dual-scope state should show • at Project and • at Global (not +)\", () => {\n // After the in-session G→P save, the next `cc edit` reads the dual-scope config:\n // active project + global tombstone. Both sides of the diff see the\n // same shape — the diff must be a no-op: `•` on both rows, not `+` on\n // the tombstone row (which would falsely re-tag the long-installed\n // global as newly added).\n const savedDualScope: SkillConfig[] = [\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"global\", excluded: true }),\n ];\n useWizardStore.setState({ installedSkillConfigs: savedDualScope });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary skillConfigs={savedDualScope} agentConfigs={[]} />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"• React\");\n expect(output).not.toContain(\"+ React\");\n expect(output).not.toContain(\"- React\");\n expect(output).not.toContain(\"~ React\");\n });\n\n it(\"agent symmetry: in-session agent G→P toggle shows + at Project and • at Global\", () => {\n // Symmetric scenario for agents — `toggleAgentScope` emits the same\n // dual-scope shape (active project + global tombstone) when the agent\n // was globally installed. The summary must render the surviving\n // global agent row as `•`, not `-`.\n useWizardStore.setState({\n installedAgentConfigs: buildAgentConfigs([\"web-developer\"], { scope: \"global\" }),\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n agentConfigs={[\n ...buildAgentConfigs([\"web-developer\"], { scope: \"project\" }),\n ...buildAgentConfigs([\"web-developer\"], { scope: \"global\", excluded: true }),\n ]}\n skillConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"+ web-developer\");\n expect(output).toContain(\"• web-developer\");\n expect(output).not.toContain(\"- web-developer\");\n expect(output).not.toContain(\"~ web-developer\");\n });\n\n it(\"agent symmetry: re-open with saved dual-scope agent shows • at both scopes\", () => {\n const savedDualScope = [\n ...buildAgentConfigs([\"web-developer\"], { scope: \"project\" }),\n ...buildAgentConfigs([\"web-developer\"], { scope: \"global\", excluded: true }),\n ];\n useWizardStore.setState({ installedAgentConfigs: savedDualScope });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary agentConfigs={savedDualScope} skillConfigs={[]} />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"• web-developer\");\n expect(output).not.toContain(\"+ web-developer\");\n expect(output).not.toContain(\"- web-developer\");\n expect(output).not.toContain(\"~ web-developer\");\n });\n\n it(\"P→G restoration should show - at Project and • at Global (not +)\", () => {\n // Scenario: user had dual-scope state, then toggles P→G which drops\n // the project override AND strips the tombstone. Live is\n // `[{react, global}]`. The global install was always there (the\n // tombstone was the dual-scope indicator), so the Global row must be\n // `•`, not `+` — the user is restoring the pre-existing global\n // install, not adding a new one.\n useWizardStore.setState({\n installedSkillConfigs: [\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"project\" }),\n ...buildSkillConfigs([\"web-framework-react\"], { scope: \"global\", excluded: true }),\n ],\n });\n\n const { lastFrame, unmount } = render(\n <SkillAgentSummary\n skillConfigs={buildSkillConfigs([\"web-framework-react\"], { scope: \"global\" })}\n agentConfigs={[]}\n />,\n );\n cleanup = unmount;\n\n const output = lastFrame()!;\n expect(output).toContain(\"- React\");\n expect(output).toContain(\"• React\");\n expect(output).not.toContain(\"+ React\");\n expect(output).not.toContain(\"~ React\");\n });\n });\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ StepSettings
4
+ } from "../../chunk-ZDLTLNU2.js";
5
+ import "../../chunk-NIKUMXE7.js";
6
+ import "../../chunk-KIR7VYQD.js";
7
+ import "../../chunk-VG2TVBFN.js";
8
+ import "../../chunk-IHO75PMZ.js";
9
+ import "../../chunk-KH7MOIM5.js";
10
+ import "../../chunk-3LIU2ZEF.js";
11
+ import "../../chunk-DJAZE4PD.js";
12
+ import "../../chunk-VEP23B5W.js";
13
+ import "../../chunk-O5ASLZ2K.js";
14
+ import "../../chunk-YU2VGX5R.js";
15
+ import "../../chunk-P56WJ5FA.js";
16
+ export {
17
+ StepSettings
18
+ };
19
+ //# sourceMappingURL=step-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,244 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ARROW_DOWN,
4
+ ARROW_UP,
5
+ ESCAPE,
6
+ INPUT_DELAY_MS,
7
+ TEST_SOURCE_URL,
8
+ delay
9
+ } from "../../chunk-KSZ6PCY4.js";
10
+ import {
11
+ render
12
+ } from "../../chunk-EKWAUOQB.js";
13
+ import {
14
+ afterEach,
15
+ beforeEach,
16
+ describe,
17
+ globalExpect,
18
+ it,
19
+ vi
20
+ } from "../../chunk-I3XKEGHM.js";
21
+ import {
22
+ StepSettings
23
+ } from "../../chunk-ZDLTLNU2.js";
24
+ import "../../chunk-NIKUMXE7.js";
25
+ import "../../chunk-KIR7VYQD.js";
26
+ import "../../chunk-VG2TVBFN.js";
27
+ import "../../chunk-IHO75PMZ.js";
28
+ import "../../chunk-KH7MOIM5.js";
29
+ import "../../chunk-3LIU2ZEF.js";
30
+ import "../../chunk-DJAZE4PD.js";
31
+ import "../../chunk-VEP23B5W.js";
32
+ import "../../chunk-O5ASLZ2K.js";
33
+ import "../../chunk-YU2VGX5R.js";
34
+ import {
35
+ init_esm_shims
36
+ } from "../../chunk-P56WJ5FA.js";
37
+
38
+ // src/cli/components/wizard/step-settings.test.tsx
39
+ init_esm_shims();
40
+ import { jsx } from "react/jsx-runtime";
41
+ vi.mock("../../lib/configuration/source-manager.js", async (importOriginal) => ({
42
+ ...await importOriginal(),
43
+ getSourceSummary: vi.fn(),
44
+ addSource: vi.fn(),
45
+ removeSource: vi.fn()
46
+ }));
47
+ var LOADING_SETTLE_MS = 200;
48
+ var defaultProps = {
49
+ projectDir: "/test/project",
50
+ onClose: vi.fn()
51
+ };
52
+ var renderStepSettings = (props = {}) => {
53
+ return render(/* @__PURE__ */ jsx(StepSettings, { ...defaultProps, ...props }));
54
+ };
55
+ describe("StepSettings component", () => {
56
+ let cleanup;
57
+ beforeEach(async () => {
58
+ vi.resetAllMocks();
59
+ const { getSourceSummary } = await import("../../source-manager-TPDXV5FO.js");
60
+ vi.mocked(getSourceSummary).mockResolvedValue({
61
+ sources: [
62
+ { name: "public", url: TEST_SOURCE_URL, enabled: true },
63
+ { name: "acme-corp", url: "github:acme-corp/claude-skills", enabled: true }
64
+ ],
65
+ localSkillCount: 3,
66
+ pluginSkillCount: 1
67
+ });
68
+ });
69
+ afterEach(() => {
70
+ cleanup?.();
71
+ cleanup = void 0;
72
+ });
73
+ describe("rendering", () => {
74
+ it("should render configured marketplaces header", async () => {
75
+ const { lastFrame, unmount } = renderStepSettings();
76
+ cleanup = unmount;
77
+ await delay(LOADING_SETTLE_MS);
78
+ const output = lastFrame();
79
+ globalExpect(output).toContain("Configured marketplaces:");
80
+ });
81
+ it("should render configured sources", async () => {
82
+ const { lastFrame, unmount } = renderStepSettings();
83
+ cleanup = unmount;
84
+ await delay(LOADING_SETTLE_MS);
85
+ const output = lastFrame();
86
+ globalExpect(output).toContain("Public");
87
+ globalExpect(output).toContain("acme-corp");
88
+ });
89
+ it("should show default label for public source", async () => {
90
+ const { lastFrame, unmount } = renderStepSettings();
91
+ cleanup = unmount;
92
+ await delay(LOADING_SETTLE_MS);
93
+ const output = lastFrame();
94
+ globalExpect(output).toContain("(default)");
95
+ });
96
+ it("should show source URLs", async () => {
97
+ const { lastFrame, unmount } = renderStepSettings();
98
+ cleanup = unmount;
99
+ await delay(LOADING_SETTLE_MS);
100
+ const output = lastFrame();
101
+ globalExpect(output).toContain("github:agents-inc/skills");
102
+ globalExpect(output).toContain("github:acme-corp/claude-skills");
103
+ });
104
+ it("should show local skill count", async () => {
105
+ const { lastFrame, unmount } = renderStepSettings();
106
+ cleanup = unmount;
107
+ await delay(LOADING_SETTLE_MS);
108
+ const output = lastFrame();
109
+ globalExpect(output).toContain("3");
110
+ globalExpect(output).toContain(".claude/skills/");
111
+ });
112
+ it("should show plugin count", async () => {
113
+ const { lastFrame, unmount } = renderStepSettings();
114
+ cleanup = unmount;
115
+ await delay(LOADING_SETTLE_MS);
116
+ const output = lastFrame();
117
+ globalExpect(output).toContain("1");
118
+ globalExpect(output).toContain("installed plugins");
119
+ });
120
+ it("should show add source input area", async () => {
121
+ const { lastFrame, unmount } = renderStepSettings();
122
+ cleanup = unmount;
123
+ await delay(LOADING_SETTLE_MS);
124
+ const output = lastFrame();
125
+ globalExpect(output).toContain("Add source");
126
+ });
127
+ it("should show loading state initially", () => {
128
+ const { lastFrame, unmount } = renderStepSettings();
129
+ cleanup = unmount;
130
+ const output = lastFrame();
131
+ globalExpect(output).toContain("Loading sources...");
132
+ });
133
+ });
134
+ describe("keyboard navigation", () => {
135
+ it("should navigate down with arrow down", async () => {
136
+ const { lastFrame, stdin, unmount } = renderStepSettings();
137
+ cleanup = unmount;
138
+ await delay(LOADING_SETTLE_MS);
139
+ stdin.write(ARROW_DOWN);
140
+ await delay(INPUT_DELAY_MS);
141
+ const output = lastFrame();
142
+ globalExpect(output).toContain("acme-corp");
143
+ });
144
+ it("should navigate up with arrow up", async () => {
145
+ const { lastFrame, stdin, unmount } = renderStepSettings();
146
+ cleanup = unmount;
147
+ await delay(LOADING_SETTLE_MS);
148
+ stdin.write(ARROW_DOWN);
149
+ await delay(INPUT_DELAY_MS);
150
+ stdin.write(ARROW_UP);
151
+ await delay(INPUT_DELAY_MS);
152
+ const output = lastFrame();
153
+ globalExpect(output).toContain("Public");
154
+ });
155
+ it("should not navigate above first item", async () => {
156
+ const { lastFrame, stdin, unmount } = renderStepSettings();
157
+ cleanup = unmount;
158
+ await delay(LOADING_SETTLE_MS);
159
+ stdin.write(ARROW_UP);
160
+ await delay(INPUT_DELAY_MS);
161
+ const output = lastFrame();
162
+ globalExpect(output).toContain("Public");
163
+ });
164
+ });
165
+ describe("escape to close", () => {
166
+ it("should call onClose when Escape is pressed", async () => {
167
+ const onClose = vi.fn();
168
+ const { stdin, unmount } = renderStepSettings({ onClose });
169
+ cleanup = unmount;
170
+ await delay(LOADING_SETTLE_MS);
171
+ stdin.write(ESCAPE);
172
+ await delay(INPUT_DELAY_MS);
173
+ globalExpect(onClose).toHaveBeenCalledTimes(1);
174
+ });
175
+ });
176
+ describe("add source input mode", () => {
177
+ it("should enter add source mode on 'a' key", async () => {
178
+ const { lastFrame, stdin, unmount } = renderStepSettings();
179
+ cleanup = unmount;
180
+ await delay(LOADING_SETTLE_MS);
181
+ stdin.write("a");
182
+ await delay(INPUT_DELAY_MS);
183
+ const output = lastFrame();
184
+ globalExpect(output).toContain("\u2588");
185
+ });
186
+ it("should exit add source mode on Escape", async () => {
187
+ const onClose = vi.fn();
188
+ const { lastFrame, stdin, unmount } = renderStepSettings({ onClose });
189
+ cleanup = unmount;
190
+ await delay(LOADING_SETTLE_MS);
191
+ stdin.write("a");
192
+ await delay(INPUT_DELAY_MS);
193
+ stdin.write(ESCAPE);
194
+ await delay(INPUT_DELAY_MS);
195
+ globalExpect(onClose).not.toHaveBeenCalled();
196
+ const output = lastFrame();
197
+ globalExpect(output).toContain("Configured marketplaces:");
198
+ });
199
+ it("should show hint text for add mode", async () => {
200
+ const { lastFrame, stdin, unmount } = renderStepSettings();
201
+ cleanup = unmount;
202
+ await delay(LOADING_SETTLE_MS);
203
+ stdin.write("a");
204
+ await delay(INPUT_DELAY_MS);
205
+ const output = lastFrame();
206
+ globalExpect(output).toContain("ENTER submit");
207
+ globalExpect(output).toContain("ESC cancel");
208
+ });
209
+ it("should show hint text for normal mode", async () => {
210
+ const { lastFrame, unmount } = renderStepSettings();
211
+ cleanup = unmount;
212
+ await delay(LOADING_SETTLE_MS);
213
+ const output = lastFrame();
214
+ globalExpect(output).toContain("DEL remove");
215
+ globalExpect(output).toContain("close");
216
+ });
217
+ });
218
+ describe("edge cases", () => {
219
+ it("should handle empty sources list gracefully", async () => {
220
+ const { getSourceSummary } = await import("../../source-manager-TPDXV5FO.js");
221
+ vi.mocked(getSourceSummary).mockResolvedValue({
222
+ sources: [{ name: "public", url: TEST_SOURCE_URL, enabled: true }],
223
+ localSkillCount: 0,
224
+ pluginSkillCount: 0
225
+ });
226
+ const { lastFrame, unmount } = renderStepSettings();
227
+ cleanup = unmount;
228
+ await delay(LOADING_SETTLE_MS);
229
+ const output = lastFrame();
230
+ globalExpect(output).toContain("Public");
231
+ globalExpect(output).toContain("0");
232
+ });
233
+ it("should handle getSourceSummary failure gracefully", async () => {
234
+ const { getSourceSummary } = await import("../../source-manager-TPDXV5FO.js");
235
+ vi.mocked(getSourceSummary).mockRejectedValue(new Error("Config read failed"));
236
+ const { lastFrame, unmount } = renderStepSettings();
237
+ cleanup = unmount;
238
+ await delay(LOADING_SETTLE_MS);
239
+ const output = lastFrame();
240
+ globalExpect(output).toContain("Public");
241
+ });
242
+ });
243
+ });
244
+ //# sourceMappingURL=step-settings.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/components/wizard/step-settings.test.tsx"],"sourcesContent":["/**\n * `StepSettings` is still in the tree and still compiles, but the SURFACE that\n * reaches it — the `S` hotkey on the sources step — is gated off behind\n * `FEATURE_FLAGS.WIZARD_SETTINGS_OVERLAY` (D-307), so no user can open this\n * component today.\n *\n * These specs deliberately keep running: they render the component directly, so\n * they never depended on the hotkey, and they are what stops the component\n * rotting while it is unreachable. The end-to-end specs that drive it THROUGH the\n * wizard are the ones that skip with the flag.\n */\nimport { render } from \"ink-testing-library\";\nimport { describe, expect, it, afterEach, beforeEach, vi } from \"vitest\";\nimport { TEST_SOURCE_URL } from \"../../lib/__tests__/test-constants.js\";\nimport { StepSettings, type StepSettingsProps } from \"./step-settings\";\nimport {\n ESCAPE,\n ARROW_UP,\n ARROW_DOWN,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\n\n// Mock source-manager\nvi.mock(\"../../lib/configuration/source-manager.js\", async (importOriginal) => ({\n ...(await importOriginal<typeof import(\"../../lib/configuration/source-manager.js\")>()),\n getSourceSummary: vi.fn(),\n addSource: vi.fn(),\n removeSource: vi.fn(),\n}));\n\nconst LOADING_SETTLE_MS = 200;\n\nconst defaultProps: StepSettingsProps = {\n projectDir: \"/test/project\",\n onClose: vi.fn(),\n};\n\nconst renderStepSettings = (props: Partial<StepSettingsProps> = {}) => {\n return render(<StepSettings {...defaultProps} {...props} />);\n};\n\ndescribe(\"StepSettings component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(async () => {\n vi.resetAllMocks();\n\n const { getSourceSummary } = await import(\"../../lib/configuration/source-manager.js\");\n vi.mocked(getSourceSummary).mockResolvedValue({\n sources: [\n { name: \"public\", url: TEST_SOURCE_URL, enabled: true },\n { name: \"acme-corp\", url: \"github:acme-corp/claude-skills\", enabled: true },\n ],\n localSkillCount: 3,\n pluginSkillCount: 1,\n });\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"rendering\", () => {\n it(\"should render configured marketplaces header\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n // ViewTitle removed; verify content renders (title shown by wizard-layout)\n expect(output).toContain(\"Configured marketplaces:\");\n });\n\n it(\"should render configured sources\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n expect(output).toContain(\"acme-corp\");\n });\n\n it(\"should show default label for public source\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"(default)\");\n });\n\n it(\"should show source URLs\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"github:agents-inc/skills\");\n expect(output).toContain(\"github:acme-corp/claude-skills\");\n });\n\n it(\"should show local skill count\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"3\");\n expect(output).toContain(\".claude/skills/\");\n });\n\n it(\"should show plugin count\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"1\");\n expect(output).toContain(\"installed plugins\");\n });\n\n it(\"should show add source input area\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n const output = lastFrame();\n expect(output).toContain(\"Add source\");\n });\n\n it(\"should show loading state initially\", () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n const output = lastFrame();\n expect(output).toContain(\"Loading sources...\");\n });\n });\n\n describe(\"keyboard navigation\", () => {\n it(\"should navigate down with arrow down\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Move focus down\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // The second source (acme-corp) should now be focused\n expect(output).toContain(\"acme-corp\");\n });\n\n it(\"should navigate up with arrow up\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Move down then up\n stdin.write(ARROW_DOWN);\n await delay(INPUT_DELAY_MS);\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n });\n\n it(\"should not navigate above first item\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Try to move up from first item\n stdin.write(ARROW_UP);\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n });\n });\n\n describe(\"escape to close\", () => {\n it(\"should call onClose when Escape is pressed\", async () => {\n const onClose = vi.fn();\n const { stdin, unmount } = renderStepSettings({ onClose });\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onClose).toHaveBeenCalledTimes(1);\n });\n });\n\n describe(\"add source input mode\", () => {\n it(\"should enter add source mode on 'a' key\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n stdin.write(\"a\");\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n // Should show cursor block character indicating input mode\n expect(output).toContain(\"\\u2588\");\n });\n\n it(\"should exit add source mode on Escape\", async () => {\n const onClose = vi.fn();\n const { lastFrame, stdin, unmount } = renderStepSettings({ onClose });\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n // Enter add mode\n stdin.write(\"a\");\n await delay(INPUT_DELAY_MS);\n\n // Escape from add mode (should NOT close settings)\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onClose).not.toHaveBeenCalled();\n\n const output = lastFrame();\n // Should still show the settings view (ViewTitle removed, check content)\n expect(output).toContain(\"Configured marketplaces:\");\n });\n\n it(\"should show hint text for add mode\", async () => {\n const { lastFrame, stdin, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n stdin.write(\"a\");\n await delay(INPUT_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"ENTER submit\");\n expect(output).toContain(\"ESC cancel\");\n });\n\n it(\"should show hint text for normal mode\", async () => {\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"DEL remove\");\n expect(output).toContain(\"close\");\n });\n });\n\n describe(\"edge cases\", () => {\n it(\"should handle empty sources list gracefully\", async () => {\n const { getSourceSummary } = await import(\"../../lib/configuration/source-manager.js\");\n vi.mocked(getSourceSummary).mockResolvedValue({\n sources: [{ name: \"public\", url: TEST_SOURCE_URL, enabled: true }],\n localSkillCount: 0,\n pluginSkillCount: 0,\n });\n\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"Public\");\n expect(output).toContain(\"0\");\n });\n\n it(\"should handle getSourceSummary failure gracefully\", async () => {\n const { getSourceSummary } = await import(\"../../lib/configuration/source-manager.js\");\n vi.mocked(getSourceSummary).mockRejectedValue(new Error(\"Config read failed\"));\n\n const { lastFrame, unmount } = renderStepSettings();\n cleanup = unmount;\n\n await delay(LOADING_SETTLE_MS);\n\n const output = lastFrame();\n // Should show fallback with default source\n expect(output).toContain(\"Public\");\n });\n });\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ StepSources
4
+ } from "../../chunk-E4FT2KFV.js";
5
+ import "../../chunk-IOJR5TOY.js";
6
+ import "../../chunk-QQLRX4KI.js";
7
+ import "../../chunk-7URSGJLE.js";
8
+ import "../../chunk-NIKUMXE7.js";
9
+ import "../../chunk-KOPEM3Q7.js";
10
+ import "../../chunk-2RSNKBXC.js";
11
+ import "../../chunk-DUVWGO6E.js";
12
+ import "../../chunk-KIR7VYQD.js";
13
+ import "../../chunk-LYYXX2W5.js";
14
+ import "../../chunk-DAG2ULNF.js";
15
+ import "../../chunk-VG2TVBFN.js";
16
+ import "../../chunk-IHO75PMZ.js";
17
+ import "../../chunk-MC5DUZ3V.js";
18
+ import "../../chunk-KH7MOIM5.js";
19
+ import "../../chunk-3LIU2ZEF.js";
20
+ import "../../chunk-DJAZE4PD.js";
21
+ import "../../chunk-VEP23B5W.js";
22
+ import "../../chunk-O5ASLZ2K.js";
23
+ import "../../chunk-YU2VGX5R.js";
24
+ import "../../chunk-P56WJ5FA.js";
25
+ export {
26
+ StepSources
27
+ };
28
+ //# sourceMappingURL=step-sources.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,155 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ ENTER,
4
+ ESCAPE,
5
+ INPUT_DELAY_MS,
6
+ RENDER_DELAY_MS,
7
+ delay
8
+ } from "../../chunk-KSZ6PCY4.js";
9
+ import {
10
+ render
11
+ } from "../../chunk-EKWAUOQB.js";
12
+ import {
13
+ WEB_PAIR_MATRIX
14
+ } from "../../chunk-THKIOI32.js";
15
+ import "../../chunk-K3OU6TGX.js";
16
+ import "../../chunk-V7QOSGQA.js";
17
+ import {
18
+ afterEach,
19
+ beforeEach,
20
+ describe,
21
+ globalExpect,
22
+ it,
23
+ vi
24
+ } from "../../chunk-I3XKEGHM.js";
25
+ import {
26
+ StepSources
27
+ } from "../../chunk-E4FT2KFV.js";
28
+ import "../../chunk-IOJR5TOY.js";
29
+ import "../../chunk-QQLRX4KI.js";
30
+ import "../../chunk-7URSGJLE.js";
31
+ import "../../chunk-NIKUMXE7.js";
32
+ import "../../chunk-KOPEM3Q7.js";
33
+ import "../../chunk-2RSNKBXC.js";
34
+ import "../../chunk-DUVWGO6E.js";
35
+ import "../../chunk-KIR7VYQD.js";
36
+ import "../../chunk-LYYXX2W5.js";
37
+ import "../../chunk-DAG2ULNF.js";
38
+ import "../../chunk-VG2TVBFN.js";
39
+ import "../../chunk-IHO75PMZ.js";
40
+ import {
41
+ useWizardStore
42
+ } from "../../chunk-MC5DUZ3V.js";
43
+ import "../../chunk-KH7MOIM5.js";
44
+ import "../../chunk-3LIU2ZEF.js";
45
+ import {
46
+ initializeMatrix
47
+ } from "../../chunk-DJAZE4PD.js";
48
+ import "../../chunk-VEP23B5W.js";
49
+ import "../../chunk-O5ASLZ2K.js";
50
+ import "../../chunk-YU2VGX5R.js";
51
+ import {
52
+ init_esm_shims
53
+ } from "../../chunk-P56WJ5FA.js";
54
+
55
+ // src/cli/components/wizard/step-sources.test.tsx
56
+ init_esm_shims();
57
+ import { jsx } from "react/jsx-runtime";
58
+ var mockMatrix = WEB_PAIR_MATRIX;
59
+ var defaultProps = {
60
+ onContinue: vi.fn(),
61
+ onBack: vi.fn()
62
+ };
63
+ var renderStepSources = (props = {}) => {
64
+ return render(/* @__PURE__ */ jsx(StepSources, { ...defaultProps, ...props }));
65
+ };
66
+ describe("StepSources component", () => {
67
+ let cleanup;
68
+ beforeEach(() => {
69
+ initializeMatrix(mockMatrix);
70
+ useWizardStore.setState({
71
+ domainSelections: {
72
+ web: {
73
+ "web-framework": ["web-framework-react"],
74
+ "web-client-state": ["web-state-zustand"]
75
+ }
76
+ }
77
+ });
78
+ });
79
+ afterEach(() => {
80
+ cleanup?.();
81
+ cleanup = void 0;
82
+ });
83
+ describe("customize view", () => {
84
+ it("should show source grid with selected technologies", async () => {
85
+ const { lastFrame, unmount } = renderStepSources();
86
+ cleanup = unmount;
87
+ await delay(RENDER_DELAY_MS);
88
+ const output = lastFrame();
89
+ globalExpect(output).toContain("React");
90
+ globalExpect(output).toContain("Zustand");
91
+ globalExpect(output).toContain("Agents Inc");
92
+ });
93
+ it("should call onContinue when Enter pressed in customize view", async () => {
94
+ const onContinue = vi.fn();
95
+ const { stdin, unmount } = renderStepSources({ onContinue });
96
+ cleanup = unmount;
97
+ await delay(RENDER_DELAY_MS);
98
+ stdin.write(ENTER);
99
+ await delay(INPUT_DELAY_MS);
100
+ globalExpect(onContinue).toHaveBeenCalledTimes(1);
101
+ });
102
+ it("should call onBack when Escape pressed in customize view", async () => {
103
+ const onBack = vi.fn();
104
+ const { stdin, unmount } = renderStepSources({ onBack });
105
+ cleanup = unmount;
106
+ await delay(RENDER_DELAY_MS);
107
+ stdin.write(ESCAPE);
108
+ await delay(INPUT_DELAY_MS);
109
+ globalExpect(onBack).toHaveBeenCalledTimes(1);
110
+ });
111
+ it("should show source grid content in customize view", async () => {
112
+ const { lastFrame, unmount } = renderStepSources();
113
+ cleanup = unmount;
114
+ await delay(RENDER_DELAY_MS);
115
+ const output = lastFrame();
116
+ globalExpect(output).toContain("React");
117
+ });
118
+ });
119
+ describe("edge cases", () => {
120
+ it("should handle zero technologies", () => {
121
+ useWizardStore.setState({
122
+ domainSelections: {}
123
+ });
124
+ const { lastFrame, unmount } = renderStepSources();
125
+ cleanup = unmount;
126
+ const output = lastFrame();
127
+ globalExpect(output).toBeDefined();
128
+ });
129
+ it("should handle single technology", () => {
130
+ useWizardStore.setState({
131
+ domainSelections: {
132
+ web: {
133
+ "web-framework": ["web-framework-react"]
134
+ }
135
+ }
136
+ });
137
+ const { lastFrame, unmount } = renderStepSources();
138
+ cleanup = unmount;
139
+ const output = lastFrame();
140
+ globalExpect(output).toContain("React");
141
+ });
142
+ it("should handle multiple Enter presses in customize view", async () => {
143
+ const onContinue = vi.fn();
144
+ const { stdin, unmount } = renderStepSources({ onContinue });
145
+ cleanup = unmount;
146
+ await delay(RENDER_DELAY_MS);
147
+ stdin.write(ENTER);
148
+ await delay(INPUT_DELAY_MS);
149
+ stdin.write(ENTER);
150
+ await delay(INPUT_DELAY_MS);
151
+ globalExpect(onContinue).toHaveBeenCalledTimes(2);
152
+ });
153
+ });
154
+ });
155
+ //# sourceMappingURL=step-sources.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/components/wizard/step-sources.test.tsx"],"sourcesContent":["import { render } from \"ink-testing-library\";\nimport { describe, expect, it, afterEach, beforeEach, vi } from \"vitest\";\nimport { StepSources, type StepSourcesProps } from \"./step-sources\";\nimport { useWizardStore } from \"../../stores/wizard-store\";\nimport { initializeMatrix } from \"../../lib/matrix/matrix-provider\";\nimport {\n ENTER,\n ESCAPE,\n RENDER_DELAY_MS,\n INPUT_DELAY_MS,\n delay,\n} from \"../../lib/__tests__/test-constants\";\nimport { WEB_PAIR_MATRIX } from \"../../lib/__tests__/mock-data/mock-matrices\";\n\nconst mockMatrix = WEB_PAIR_MATRIX;\n\nconst defaultProps: StepSourcesProps = {\n onContinue: vi.fn(),\n onBack: vi.fn(),\n};\n\nconst renderStepSources = (props: Partial<StepSourcesProps> = {}) => {\n return render(<StepSources {...defaultProps} {...props} />);\n};\n\ndescribe(\"StepSources component\", () => {\n let cleanup: (() => void) | undefined;\n\n beforeEach(() => {\n initializeMatrix(mockMatrix);\n // Set up some selected technologies so the step has data to display\n useWizardStore.setState({\n domainSelections: {\n web: {\n \"web-framework\": [\"web-framework-react\"],\n \"web-client-state\": [\"web-state-zustand\"],\n },\n },\n });\n });\n\n afterEach(() => {\n cleanup?.();\n cleanup = undefined;\n });\n\n describe(\"customize view\", () => {\n it(\"should show source grid with selected technologies\", async () => {\n const { lastFrame, unmount } = renderStepSources();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n expect(output).toContain(\"React\");\n expect(output).toContain(\"Zustand\");\n expect(output).toContain(\"Agents Inc\");\n });\n\n it(\"should call onContinue when Enter pressed in customize view\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderStepSources({ onContinue });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // Press Enter to continue (starts directly in customize view)\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalledTimes(1);\n });\n\n it(\"should call onBack when Escape pressed in customize view\", async () => {\n const onBack = vi.fn();\n const { stdin, unmount } = renderStepSources({ onBack });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n // Press Escape (starts directly in customize view, goes back)\n stdin.write(ESCAPE);\n await delay(INPUT_DELAY_MS);\n\n expect(onBack).toHaveBeenCalledTimes(1);\n });\n\n it(\"should show source grid content in customize view\", async () => {\n const { lastFrame, unmount } = renderStepSources();\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n\n const output = lastFrame();\n // ViewTitle removed; verify source grid renders (title shown by wizard-layout)\n expect(output).toContain(\"React\");\n });\n });\n\n describe(\"edge cases\", () => {\n it(\"should handle zero technologies\", () => {\n useWizardStore.setState({\n domainSelections: {},\n });\n\n const { lastFrame, unmount } = renderStepSources();\n cleanup = unmount;\n\n const output = lastFrame();\n // ViewTitle removed; source grid renders empty state\n expect(output).toBeDefined();\n });\n\n it(\"should handle single technology\", () => {\n useWizardStore.setState({\n domainSelections: {\n web: {\n \"web-framework\": [\"web-framework-react\"],\n },\n },\n });\n\n const { lastFrame, unmount } = renderStepSources();\n cleanup = unmount;\n\n const output = lastFrame();\n // ViewTitle removed; verify source grid shows the technology\n expect(output).toContain(\"React\");\n });\n\n it(\"should handle multiple Enter presses in customize view\", async () => {\n const onContinue = vi.fn();\n const { stdin, unmount } = renderStepSources({ onContinue });\n cleanup = unmount;\n\n await delay(RENDER_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n stdin.write(ENTER);\n await delay(INPUT_DELAY_MS);\n\n expect(onContinue).toHaveBeenCalledTimes(2);\n });\n });\n});\n"],"mappings":"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","names":[]}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ StepStack
4
+ } from "../../chunk-F3756A5B.js";
5
+ import "../../chunk-4GL2F5AB.js";
6
+ import "../../chunk-IOJR5TOY.js";
7
+ import "../../chunk-KIR7VYQD.js";
8
+ import "../../chunk-FYPUUYSG.js";
9
+ import "../../chunk-DAG2ULNF.js";
10
+ import "../../chunk-MC5DUZ3V.js";
11
+ import "../../chunk-KH7MOIM5.js";
12
+ import "../../chunk-3LIU2ZEF.js";
13
+ import "../../chunk-DJAZE4PD.js";
14
+ import "../../chunk-VEP23B5W.js";
15
+ import "../../chunk-O5ASLZ2K.js";
16
+ import "../../chunk-YU2VGX5R.js";
17
+ import "../../chunk-P56WJ5FA.js";
18
+ export {
19
+ StepStack
20
+ };
21
+ //# sourceMappingURL=step-stack.js.map