agents-inc 0.149.2 → 0.151.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (572) hide show
  1. package/CHANGELOG.md +2287 -0
  2. package/LICENSE +21 -0
  3. package/README.md +136 -19
  4. package/assets/demo.gif +0 -0
  5. package/assets/demo.tape +266 -0
  6. package/assets/logo.svg +75 -0
  7. package/dist/chunk-2RSNKBXC.js +84 -0
  8. package/dist/chunk-2RSNKBXC.js.map +1 -0
  9. package/dist/chunk-3LIU2ZEF.js +1355 -0
  10. package/dist/chunk-3LIU2ZEF.js.map +1 -0
  11. package/dist/chunk-3XFUQ6OL.js +68 -0
  12. package/dist/chunk-3XFUQ6OL.js.map +1 -0
  13. package/dist/chunk-3YGUHWLR.js +258 -0
  14. package/dist/chunk-3YGUHWLR.js.map +1 -0
  15. package/dist/chunk-44LLPS2N.js +1135 -0
  16. package/dist/chunk-44LLPS2N.js.map +1 -0
  17. package/dist/chunk-4R6PGHQQ.js +300 -0
  18. package/dist/chunk-4R6PGHQQ.js.map +1 -0
  19. package/dist/chunk-5V2O6C3T.js +112 -0
  20. package/dist/chunk-5V2O6C3T.js.map +1 -0
  21. package/dist/chunk-6RBQBOBS.js +287 -0
  22. package/dist/chunk-6RBQBOBS.js.map +1 -0
  23. package/dist/chunk-7QIHKQL5.js +181 -0
  24. package/dist/chunk-7QIHKQL5.js.map +1 -0
  25. package/dist/chunk-BNE4HHIH.js +28 -0
  26. package/dist/chunk-BNE4HHIH.js.map +1 -0
  27. package/dist/chunk-C55DN7GE.js +35 -0
  28. package/dist/chunk-C55DN7GE.js.map +1 -0
  29. package/dist/chunk-DAG2ULNF.js +125 -0
  30. package/dist/chunk-DAG2ULNF.js.map +1 -0
  31. package/dist/chunk-DG2NGZ7S.js +10929 -0
  32. package/dist/chunk-DG2NGZ7S.js.map +1 -0
  33. package/dist/chunk-DIBCRIMR.js +36 -0
  34. package/dist/chunk-DIBCRIMR.js.map +1 -0
  35. package/dist/chunk-DUVWGO6E.js +54 -0
  36. package/dist/chunk-DUVWGO6E.js.map +1 -0
  37. package/dist/chunk-EKWAUOQB.js +96 -0
  38. package/dist/chunk-EKWAUOQB.js.map +1 -0
  39. package/dist/chunk-ES3NJZON.js +31 -0
  40. package/dist/chunk-ES3NJZON.js.map +1 -0
  41. package/dist/chunk-EVXG3X6G.js +179 -0
  42. package/dist/chunk-EVXG3X6G.js.map +1 -0
  43. package/dist/chunk-EZ7STXUV.js +349 -0
  44. package/dist/chunk-EZ7STXUV.js.map +1 -0
  45. package/dist/chunk-FYPUUYSG.js +31 -0
  46. package/dist/chunk-FYPUUYSG.js.map +1 -0
  47. package/dist/chunk-GYG5SE2D.js +81 -0
  48. package/dist/chunk-GYG5SE2D.js.map +1 -0
  49. package/dist/chunk-I3XKEGHM.js +16383 -0
  50. package/dist/chunk-I3XKEGHM.js.map +1 -0
  51. package/dist/chunk-IHO75PMZ.js +40 -0
  52. package/dist/chunk-IHO75PMZ.js.map +1 -0
  53. package/dist/chunk-IOJR5TOY.js +47 -0
  54. package/dist/chunk-IOJR5TOY.js.map +1 -0
  55. package/dist/chunk-K3OU6TGX.js +77 -0
  56. package/dist/chunk-K3OU6TGX.js.map +1 -0
  57. package/dist/chunk-KIR7VYQD.js +63 -0
  58. package/dist/chunk-KIR7VYQD.js.map +1 -0
  59. package/dist/chunk-KOPEM3Q7.js +27 -0
  60. package/dist/chunk-KOPEM3Q7.js.map +1 -0
  61. package/dist/chunk-KSZ6PCY4.js +43 -0
  62. package/dist/chunk-KSZ6PCY4.js.map +1 -0
  63. package/dist/chunk-LAXAQ3PZ.js +235 -0
  64. package/dist/chunk-LAXAQ3PZ.js.map +1 -0
  65. package/dist/chunk-LYYXX2W5.js +87 -0
  66. package/dist/chunk-LYYXX2W5.js.map +1 -0
  67. package/dist/chunk-NGLQ5W7U.js +339 -0
  68. package/dist/chunk-NGLQ5W7U.js.map +1 -0
  69. package/dist/chunk-NHCGC6DG.js +111 -0
  70. package/dist/chunk-NHCGC6DG.js.map +1 -0
  71. package/dist/chunk-NIKUMXE7.js +24 -0
  72. package/dist/chunk-NIKUMXE7.js.map +1 -0
  73. package/dist/chunk-NM3EDGB5.js +300 -0
  74. package/dist/chunk-NM3EDGB5.js.map +1 -0
  75. package/dist/chunk-O5ASLZ2K.js +270 -0
  76. package/dist/chunk-O5ASLZ2K.js.map +1 -0
  77. package/dist/chunk-OJIESW5B.js +174 -0
  78. package/dist/chunk-OJIESW5B.js.map +1 -0
  79. package/dist/chunk-OZZGXBCN.js +15 -0
  80. package/dist/chunk-OZZGXBCN.js.map +1 -0
  81. package/dist/chunk-P3PN5SVI.js +27 -0
  82. package/dist/chunk-P3PN5SVI.js.map +1 -0
  83. package/dist/chunk-P56WJ5FA.js +50 -0
  84. package/dist/chunk-P56WJ5FA.js.map +1 -0
  85. package/dist/chunk-PG4G4IIK.js +24 -0
  86. package/dist/chunk-PG4G4IIK.js.map +1 -0
  87. package/dist/chunk-PV2HNW4I.js +382 -0
  88. package/dist/chunk-PV2HNW4I.js.map +1 -0
  89. package/dist/chunk-QQLRX4KI.js +41 -0
  90. package/dist/chunk-QQLRX4KI.js.map +1 -0
  91. package/dist/chunk-QTFQEYDA.js +789 -0
  92. package/dist/chunk-QTFQEYDA.js.map +1 -0
  93. package/dist/chunk-RBHYLCUB.js +31 -0
  94. package/dist/chunk-RBHYLCUB.js.map +1 -0
  95. package/dist/chunk-SHHOMVWC.js +62 -0
  96. package/dist/chunk-SHHOMVWC.js.map +1 -0
  97. package/dist/chunk-SI5FOARI.js +42 -0
  98. package/dist/chunk-SI5FOARI.js.map +1 -0
  99. package/dist/chunk-SYUOXSPU.js +510 -0
  100. package/dist/chunk-SYUOXSPU.js.map +1 -0
  101. package/dist/chunk-THKIOI32.js +939 -0
  102. package/dist/chunk-THKIOI32.js.map +1 -0
  103. package/dist/chunk-TVHRMRD3.js +6014 -0
  104. package/dist/chunk-TVHRMRD3.js.map +1 -0
  105. package/dist/chunk-TYJLR32W.js +128 -0
  106. package/dist/chunk-TYJLR32W.js.map +1 -0
  107. package/dist/chunk-UFURYGD3.js +20 -0
  108. package/dist/chunk-UFURYGD3.js.map +1 -0
  109. package/dist/chunk-UTFN6UJS.js +253 -0
  110. package/dist/chunk-UTFN6UJS.js.map +1 -0
  111. package/dist/chunk-V7QOSGQA.js +298 -0
  112. package/dist/chunk-V7QOSGQA.js.map +1 -0
  113. package/dist/chunk-VEP23B5W.js +27 -0
  114. package/dist/chunk-VEP23B5W.js.map +1 -0
  115. package/dist/chunk-VG2TVBFN.js +52 -0
  116. package/dist/chunk-VG2TVBFN.js.map +1 -0
  117. package/dist/chunk-WFWCZEMS.js +92 -0
  118. package/dist/chunk-WFWCZEMS.js.map +1 -0
  119. package/dist/chunk-WK4J2CHH.js +430 -0
  120. package/dist/chunk-WK4J2CHH.js.map +1 -0
  121. package/dist/chunk-XA57SX4T.js +115 -0
  122. package/dist/chunk-XA57SX4T.js.map +1 -0
  123. package/dist/chunk-Y4CXDA3I.js +181 -0
  124. package/dist/chunk-Y4CXDA3I.js.map +1 -0
  125. package/dist/chunk-YA4QQKKE.js +51 -0
  126. package/dist/chunk-YA4QQKKE.js.map +1 -0
  127. package/dist/chunk-YBVA7GPW.js +27 -0
  128. package/dist/chunk-YBVA7GPW.js.map +1 -0
  129. package/dist/chunk-YU2VGX5R.js +4205 -0
  130. package/dist/chunk-YU2VGX5R.js.map +1 -0
  131. package/dist/commands/build/marketplace.js +250 -0
  132. package/dist/commands/build/marketplace.js.map +1 -0
  133. package/dist/commands/build/plugins.js +176 -0
  134. package/dist/commands/build/plugins.js.map +1 -0
  135. package/dist/commands/compile.js +331 -0
  136. package/dist/commands/compile.js.map +1 -0
  137. package/dist/commands/doctor.js +475 -0
  138. package/dist/commands/doctor.js.map +1 -0
  139. package/dist/commands/edit.js +765 -0
  140. package/dist/commands/edit.js.map +1 -0
  141. package/dist/commands/eject.js +393 -0
  142. package/dist/commands/eject.js.map +1 -0
  143. package/dist/commands/import/skill.js +349 -0
  144. package/dist/commands/import/skill.js.map +1 -0
  145. package/dist/commands/init.js +66 -0
  146. package/dist/commands/init.js.map +1 -0
  147. package/dist/commands/list.js +115 -0
  148. package/dist/commands/list.js.map +1 -0
  149. package/dist/commands/new/agent.js +304 -0
  150. package/dist/commands/new/agent.js.map +1 -0
  151. package/dist/commands/new/marketplace.js +315 -0
  152. package/dist/commands/new/marketplace.js.map +1 -0
  153. package/dist/commands/new/skill.js +28 -0
  154. package/dist/commands/new/skill.js.map +1 -0
  155. package/dist/commands/search.js +176 -0
  156. package/dist/commands/search.js.map +1 -0
  157. package/dist/commands/uninstall.js +570 -0
  158. package/dist/commands/uninstall.js.map +1 -0
  159. package/dist/commands/update.js +368 -0
  160. package/dist/commands/update.js.map +1 -0
  161. package/dist/commands/validate.js +581 -0
  162. package/dist/commands/validate.js.map +1 -0
  163. package/dist/components/common/confirm.js +9 -0
  164. package/dist/components/common/confirm.js.map +1 -0
  165. package/dist/components/common/confirm.test.js +203 -0
  166. package/dist/components/common/confirm.test.js.map +1 -0
  167. package/dist/components/common/prompt-confirm.js +11 -0
  168. package/dist/components/common/prompt-confirm.js.map +1 -0
  169. package/dist/components/common/select-list.js +11 -0
  170. package/dist/components/common/select-list.js.map +1 -0
  171. package/dist/components/common/spinner.js +9 -0
  172. package/dist/components/common/spinner.js.map +1 -0
  173. package/dist/components/wizard/category-grid.js +16 -0
  174. package/dist/components/wizard/category-grid.js.map +1 -0
  175. package/dist/components/wizard/category-grid.test.js +1253 -0
  176. package/dist/components/wizard/category-grid.test.js.map +1 -0
  177. package/dist/components/wizard/checkbox-grid.js +14 -0
  178. package/dist/components/wizard/checkbox-grid.js.map +1 -0
  179. package/dist/components/wizard/checkbox-grid.test.js +264 -0
  180. package/dist/components/wizard/checkbox-grid.test.js.map +1 -0
  181. package/dist/components/wizard/domain-selection.js +22 -0
  182. package/dist/components/wizard/domain-selection.js.map +1 -0
  183. package/dist/components/wizard/run-wizard-session.js +47 -0
  184. package/dist/components/wizard/run-wizard-session.js.map +1 -0
  185. package/dist/components/wizard/scroll-affordance.js +10 -0
  186. package/dist/components/wizard/scroll-affordance.js.map +1 -0
  187. package/dist/components/wizard/search-modal.js +14 -0
  188. package/dist/components/wizard/search-modal.js.map +1 -0
  189. package/dist/components/wizard/search-modal.test.js +212 -0
  190. package/dist/components/wizard/search-modal.test.js.map +1 -0
  191. package/dist/components/wizard/selection-card.js +10 -0
  192. package/dist/components/wizard/selection-card.js.map +1 -0
  193. package/dist/components/wizard/skill-agent-summary.js +16 -0
  194. package/dist/components/wizard/skill-agent-summary.js.map +1 -0
  195. package/dist/components/wizard/source-grid.js +23 -0
  196. package/dist/components/wizard/source-grid.js.map +1 -0
  197. package/dist/components/wizard/source-grid.test.js +1094 -0
  198. package/dist/components/wizard/source-grid.test.js.map +1 -0
  199. package/dist/components/wizard/stack-selection.js +20 -0
  200. package/dist/components/wizard/stack-selection.js.map +1 -0
  201. package/dist/components/wizard/step-agents.js +22 -0
  202. package/dist/components/wizard/step-agents.js.map +1 -0
  203. package/dist/components/wizard/step-agents.test.js +204 -0
  204. package/dist/components/wizard/step-agents.test.js.map +1 -0
  205. package/dist/components/wizard/step-build.js +22 -0
  206. package/dist/components/wizard/step-build.js.map +1 -0
  207. package/dist/components/wizard/step-build.test.js +552 -0
  208. package/dist/components/wizard/step-build.test.js.map +1 -0
  209. package/dist/components/wizard/step-confirm.js +21 -0
  210. package/dist/components/wizard/step-confirm.js.map +1 -0
  211. package/dist/components/wizard/step-confirm.test.js +744 -0
  212. package/dist/components/wizard/step-confirm.test.js.map +1 -0
  213. package/dist/components/wizard/step-settings.js +19 -0
  214. package/dist/components/wizard/step-settings.js.map +1 -0
  215. package/dist/components/wizard/step-settings.test.js +244 -0
  216. package/dist/components/wizard/step-settings.test.js.map +1 -0
  217. package/dist/components/wizard/step-sources.js +28 -0
  218. package/dist/components/wizard/step-sources.js.map +1 -0
  219. package/dist/components/wizard/step-sources.test.js +155 -0
  220. package/dist/components/wizard/step-sources.test.js.map +1 -0
  221. package/dist/components/wizard/step-stack.js +21 -0
  222. package/dist/components/wizard/step-stack.js.map +1 -0
  223. package/dist/components/wizard/step-stack.test.js +262 -0
  224. package/dist/components/wizard/step-stack.test.js.map +1 -0
  225. package/dist/components/wizard/summary-panel.js +20 -0
  226. package/dist/components/wizard/summary-panel.js.map +1 -0
  227. package/dist/components/wizard/summary-panel.test.js +317 -0
  228. package/dist/components/wizard/summary-panel.test.js.map +1 -0
  229. package/dist/components/wizard/toast.js +10 -0
  230. package/dist/components/wizard/toast.js.map +1 -0
  231. package/dist/components/wizard/wizard-layout.js +26 -0
  232. package/dist/components/wizard/wizard-layout.js.map +1 -0
  233. package/dist/components/wizard/wizard-layout.test.js +200 -0
  234. package/dist/components/wizard/wizard-layout.test.js.map +1 -0
  235. package/dist/components/wizard/wizard-tabs.js +20 -0
  236. package/dist/components/wizard/wizard-tabs.js.map +1 -0
  237. package/dist/components/wizard/wizard-tabs.test.js +290 -0
  238. package/dist/components/wizard/wizard-tabs.test.js.map +1 -0
  239. package/dist/components/wizard/wizard.js +48 -0
  240. package/dist/components/wizard/wizard.js.map +1 -0
  241. package/dist/config-exports.js +20 -0
  242. package/dist/config-exports.js.map +1 -0
  243. package/dist/copy-local-skills-UPA2GUZV.js +15 -0
  244. package/dist/copy-local-skills-UPA2GUZV.js.map +1 -0
  245. package/dist/dist-VNJNNJK7.js +550 -0
  246. package/dist/dist-VNJNNJK7.js.map +1 -0
  247. package/dist/hooks/init.js +90 -0
  248. package/dist/hooks/init.js.map +1 -0
  249. package/dist/index.js +10 -0
  250. package/dist/index.js.map +1 -0
  251. package/dist/load-agent-defs-SB4XAOVB.js +16 -0
  252. package/dist/load-agent-defs-SB4XAOVB.js.map +1 -0
  253. package/dist/loader-E2ERJYVA.js +23 -0
  254. package/dist/loader-E2ERJYVA.js.map +1 -0
  255. package/dist/magic-string.es-5TV73NJD.js +1316 -0
  256. package/dist/magic-string.es-5TV73NJD.js.map +1 -0
  257. package/dist/recompile-project-agents-U4ZY2GDX.js +20 -0
  258. package/dist/recompile-project-agents-U4ZY2GDX.js.map +1 -0
  259. package/dist/source-loader-5UNRU7EZ.js +20 -0
  260. package/dist/source-loader-5UNRU7EZ.js.map +1 -0
  261. package/dist/source-manager-3O54SIIB.js +18 -0
  262. package/dist/source-manager-3O54SIIB.js.map +1 -0
  263. package/dist/src/agents/_templates/agent.liquid +161 -0
  264. package/dist/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
  265. package/dist/src/agents/_templates/methodologies/context-management.liquid +162 -0
  266. package/dist/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
  267. package/dist/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
  268. package/dist/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
  269. package/dist/src/agents/_templates/methodologies/write-verification.liquid +43 -0
  270. package/dist/src/agents/developer/ai-developer/critical-reminders.md +54 -0
  271. package/dist/src/agents/developer/ai-developer/critical-requirements.md +59 -0
  272. package/dist/src/agents/developer/ai-developer/identity.md +51 -0
  273. package/dist/src/agents/developer/ai-developer/metadata.yaml +12 -0
  274. package/dist/src/agents/developer/ai-developer/output.md +366 -0
  275. package/dist/src/agents/developer/ai-developer/playbook.md +335 -0
  276. package/dist/src/agents/developer/api-developer/critical-reminders.md +46 -0
  277. package/dist/src/agents/developer/api-developer/critical-requirements.md +44 -0
  278. package/dist/src/agents/developer/api-developer/identity.md +49 -0
  279. package/dist/src/agents/developer/api-developer/metadata.yaml +12 -0
  280. package/dist/src/agents/developer/api-developer/output.md +432 -0
  281. package/dist/src/agents/developer/api-developer/playbook.md +352 -0
  282. package/dist/src/agents/developer/cli-developer/critical-reminders.md +51 -0
  283. package/dist/src/agents/developer/cli-developer/critical-requirements.md +51 -0
  284. package/dist/src/agents/developer/cli-developer/identity.md +51 -0
  285. package/dist/src/agents/developer/cli-developer/metadata.yaml +12 -0
  286. package/dist/src/agents/developer/cli-developer/output.md +285 -0
  287. package/dist/src/agents/developer/cli-developer/playbook.md +386 -0
  288. package/dist/src/agents/developer/web-architecture/critical-reminders.md +48 -0
  289. package/dist/src/agents/developer/web-architecture/critical-requirements.md +65 -0
  290. package/dist/src/agents/developer/web-architecture/identity.md +64 -0
  291. package/dist/src/agents/developer/web-architecture/metadata.yaml +12 -0
  292. package/dist/src/agents/developer/web-architecture/output.md +449 -0
  293. package/dist/src/agents/developer/web-architecture/playbook.md +481 -0
  294. package/dist/src/agents/developer/web-developer/critical-reminders.md +40 -0
  295. package/dist/src/agents/developer/web-developer/critical-requirements.md +39 -0
  296. package/dist/src/agents/developer/web-developer/identity.md +32 -0
  297. package/dist/src/agents/developer/web-developer/metadata.yaml +12 -0
  298. package/dist/src/agents/developer/web-developer/output.md +323 -0
  299. package/dist/src/agents/developer/web-developer/playbook.md +349 -0
  300. package/dist/src/agents/meta/agent-summoner/critical-reminders.md +45 -0
  301. package/dist/src/agents/meta/agent-summoner/critical-requirements.md +52 -0
  302. package/dist/src/agents/meta/agent-summoner/identity.md +34 -0
  303. package/dist/src/agents/meta/agent-summoner/metadata.yaml +12 -0
  304. package/dist/src/agents/meta/agent-summoner/output.md +296 -0
  305. package/dist/src/agents/meta/agent-summoner/playbook.md +1469 -0
  306. package/dist/src/agents/meta/codex-keeper/critical-reminders.md +39 -0
  307. package/dist/src/agents/meta/codex-keeper/critical-requirements.md +29 -0
  308. package/dist/src/agents/meta/codex-keeper/identity.md +45 -0
  309. package/dist/src/agents/meta/codex-keeper/metadata.yaml +12 -0
  310. package/dist/src/agents/meta/codex-keeper/output.md +384 -0
  311. package/dist/src/agents/meta/codex-keeper/playbook.md +1183 -0
  312. package/dist/src/agents/meta/convention-keeper/critical-reminders.md +32 -0
  313. package/dist/src/agents/meta/convention-keeper/critical-requirements.md +32 -0
  314. package/dist/src/agents/meta/convention-keeper/identity.md +33 -0
  315. package/dist/src/agents/meta/convention-keeper/metadata.yaml +12 -0
  316. package/dist/src/agents/meta/convention-keeper/output.md +206 -0
  317. package/dist/src/agents/meta/convention-keeper/playbook.md +180 -0
  318. package/dist/src/agents/meta/skill-summoner/critical-reminders.md +112 -0
  319. package/dist/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
  320. package/dist/src/agents/meta/skill-summoner/identity.md +31 -0
  321. package/dist/src/agents/meta/skill-summoner/metadata.yaml +13 -0
  322. package/dist/src/agents/meta/skill-summoner/output.md +390 -0
  323. package/dist/src/agents/meta/skill-summoner/playbook.md +1457 -0
  324. package/dist/src/agents/pattern/pattern-scout/critical-reminders.md +71 -0
  325. package/dist/src/agents/pattern/pattern-scout/critical-requirements.md +31 -0
  326. package/dist/src/agents/pattern/pattern-scout/identity.md +25 -0
  327. package/dist/src/agents/pattern/pattern-scout/metadata.yaml +10 -0
  328. package/dist/src/agents/pattern/pattern-scout/output.md +290 -0
  329. package/dist/src/agents/pattern/pattern-scout/playbook.md +1806 -0
  330. package/dist/src/agents/pattern/web-pattern-critique/critical-reminders.md +30 -0
  331. package/dist/src/agents/pattern/web-pattern-critique/critical-requirements.md +28 -0
  332. package/dist/src/agents/pattern/web-pattern-critique/identity.md +41 -0
  333. package/dist/src/agents/pattern/web-pattern-critique/metadata.yaml +12 -0
  334. package/dist/src/agents/pattern/web-pattern-critique/output.md +314 -0
  335. package/dist/src/agents/pattern/web-pattern-critique/playbook.md +572 -0
  336. package/dist/src/agents/planning/api-pm/critical-reminders.md +48 -0
  337. package/dist/src/agents/planning/api-pm/critical-requirements.md +41 -0
  338. package/dist/src/agents/planning/api-pm/identity.md +39 -0
  339. package/dist/src/agents/planning/api-pm/metadata.yaml +12 -0
  340. package/dist/src/agents/planning/api-pm/output.md +475 -0
  341. package/dist/src/agents/planning/api-pm/playbook.md +129 -0
  342. package/dist/src/agents/planning/web-pm/critical-reminders.md +36 -0
  343. package/dist/src/agents/planning/web-pm/critical-requirements.md +32 -0
  344. package/dist/src/agents/planning/web-pm/identity.md +26 -0
  345. package/dist/src/agents/planning/web-pm/metadata.yaml +12 -0
  346. package/dist/src/agents/planning/web-pm/output.md +314 -0
  347. package/dist/src/agents/planning/web-pm/playbook.md +318 -0
  348. package/dist/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
  349. package/dist/src/agents/researcher/api-researcher/critical-requirements.md +28 -0
  350. package/dist/src/agents/researcher/api-researcher/identity.md +71 -0
  351. package/dist/src/agents/researcher/api-researcher/metadata.yaml +10 -0
  352. package/dist/src/agents/researcher/api-researcher/output.md +254 -0
  353. package/dist/src/agents/researcher/api-researcher/playbook.md +201 -0
  354. package/dist/src/agents/researcher/web-researcher/critical-reminders.md +39 -0
  355. package/dist/src/agents/researcher/web-researcher/critical-requirements.md +26 -0
  356. package/dist/src/agents/researcher/web-researcher/identity.md +69 -0
  357. package/dist/src/agents/researcher/web-researcher/metadata.yaml +10 -0
  358. package/dist/src/agents/researcher/web-researcher/output.md +241 -0
  359. package/dist/src/agents/researcher/web-researcher/playbook.md +217 -0
  360. package/dist/src/agents/reviewer/ai-reviewer/critical-reminders.md +40 -0
  361. package/dist/src/agents/reviewer/ai-reviewer/critical-requirements.md +37 -0
  362. package/dist/src/agents/reviewer/ai-reviewer/identity.md +51 -0
  363. package/dist/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
  364. package/dist/src/agents/reviewer/ai-reviewer/output.md +395 -0
  365. package/dist/src/agents/reviewer/ai-reviewer/playbook.md +90 -0
  366. package/dist/src/agents/reviewer/api-reviewer/critical-reminders.md +31 -0
  367. package/dist/src/agents/reviewer/api-reviewer/critical-requirements.md +27 -0
  368. package/dist/src/agents/reviewer/api-reviewer/identity.md +51 -0
  369. package/dist/src/agents/reviewer/api-reviewer/metadata.yaml +12 -0
  370. package/dist/src/agents/reviewer/api-reviewer/output.md +343 -0
  371. package/dist/src/agents/reviewer/api-reviewer/playbook.md +288 -0
  372. package/dist/src/agents/reviewer/cli-reviewer/critical-reminders.md +33 -0
  373. package/dist/src/agents/reviewer/cli-reviewer/critical-requirements.md +30 -0
  374. package/dist/src/agents/reviewer/cli-reviewer/identity.md +44 -0
  375. package/dist/src/agents/reviewer/cli-reviewer/metadata.yaml +12 -0
  376. package/dist/src/agents/reviewer/cli-reviewer/output.md +414 -0
  377. package/dist/src/agents/reviewer/cli-reviewer/playbook.md +218 -0
  378. package/dist/src/agents/reviewer/infra-reviewer/critical-reminders.md +38 -0
  379. package/dist/src/agents/reviewer/infra-reviewer/critical-requirements.md +38 -0
  380. package/dist/src/agents/reviewer/infra-reviewer/identity.md +53 -0
  381. package/dist/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
  382. package/dist/src/agents/reviewer/infra-reviewer/output.md +364 -0
  383. package/dist/src/agents/reviewer/infra-reviewer/playbook.md +161 -0
  384. package/dist/src/agents/reviewer/web-reviewer/critical-reminders.md +31 -0
  385. package/dist/src/agents/reviewer/web-reviewer/critical-requirements.md +26 -0
  386. package/dist/src/agents/reviewer/web-reviewer/identity.md +40 -0
  387. package/dist/src/agents/reviewer/web-reviewer/metadata.yaml +12 -0
  388. package/dist/src/agents/reviewer/web-reviewer/output.md +333 -0
  389. package/dist/src/agents/reviewer/web-reviewer/playbook.md +156 -0
  390. package/dist/src/agents/tester/api-tester/critical-reminders.md +41 -0
  391. package/dist/src/agents/tester/api-tester/critical-requirements.md +41 -0
  392. package/dist/src/agents/tester/api-tester/identity.md +47 -0
  393. package/dist/src/agents/tester/api-tester/metadata.yaml +12 -0
  394. package/dist/src/agents/tester/api-tester/output.md +284 -0
  395. package/dist/src/agents/tester/api-tester/playbook.md +275 -0
  396. package/dist/src/agents/tester/cli-tester/critical-reminders.md +36 -0
  397. package/dist/src/agents/tester/cli-tester/critical-requirements.md +36 -0
  398. package/dist/src/agents/tester/cli-tester/identity.md +43 -0
  399. package/dist/src/agents/tester/cli-tester/metadata.yaml +12 -0
  400. package/dist/src/agents/tester/cli-tester/output.md +313 -0
  401. package/dist/src/agents/tester/cli-tester/playbook.md +221 -0
  402. package/dist/src/agents/tester/web-tester/critical-reminders.md +31 -0
  403. package/dist/src/agents/tester/web-tester/critical-requirements.md +28 -0
  404. package/dist/src/agents/tester/web-tester/identity.md +41 -0
  405. package/dist/src/agents/tester/web-tester/metadata.yaml +12 -0
  406. package/dist/src/agents/tester/web-tester/output.md +321 -0
  407. package/dist/src/agents/tester/web-tester/playbook.md +428 -0
  408. package/dist/stores/d227-same-scope-tombstone-duplicate.test.js +118 -0
  409. package/dist/stores/d227-same-scope-tombstone-duplicate.test.js.map +1 -0
  410. package/dist/stores/wizard-store.js +21 -0
  411. package/dist/stores/wizard-store.js.map +1 -0
  412. package/dist/stores/wizard-store.test.js +3053 -0
  413. package/dist/stores/wizard-store.test.js.map +1 -0
  414. package/package.json +130 -12
  415. package/src/agents/_templates/agent.liquid +161 -0
  416. package/src/agents/_templates/methodologies/anti-over-engineering.liquid +121 -0
  417. package/src/agents/_templates/methodologies/context-management.liquid +162 -0
  418. package/src/agents/_templates/methodologies/improvement-protocol.liquid +150 -0
  419. package/src/agents/_templates/methodologies/investigation-requirements.liquid +49 -0
  420. package/src/agents/_templates/methodologies/success-criteria.liquid +111 -0
  421. package/src/agents/_templates/methodologies/write-verification.liquid +43 -0
  422. package/src/agents/developer/ai-developer/critical-reminders.md +54 -0
  423. package/src/agents/developer/ai-developer/critical-requirements.md +59 -0
  424. package/src/agents/developer/ai-developer/identity.md +51 -0
  425. package/src/agents/developer/ai-developer/metadata.yaml +12 -0
  426. package/src/agents/developer/ai-developer/output.md +366 -0
  427. package/src/agents/developer/ai-developer/playbook.md +335 -0
  428. package/src/agents/developer/api-developer/critical-reminders.md +46 -0
  429. package/src/agents/developer/api-developer/critical-requirements.md +44 -0
  430. package/src/agents/developer/api-developer/identity.md +49 -0
  431. package/src/agents/developer/api-developer/metadata.yaml +12 -0
  432. package/src/agents/developer/api-developer/output.md +432 -0
  433. package/src/agents/developer/api-developer/playbook.md +352 -0
  434. package/src/agents/developer/cli-developer/critical-reminders.md +51 -0
  435. package/src/agents/developer/cli-developer/critical-requirements.md +51 -0
  436. package/src/agents/developer/cli-developer/identity.md +51 -0
  437. package/src/agents/developer/cli-developer/metadata.yaml +12 -0
  438. package/src/agents/developer/cli-developer/output.md +285 -0
  439. package/src/agents/developer/cli-developer/playbook.md +386 -0
  440. package/src/agents/developer/web-architecture/critical-reminders.md +48 -0
  441. package/src/agents/developer/web-architecture/critical-requirements.md +65 -0
  442. package/src/agents/developer/web-architecture/identity.md +64 -0
  443. package/src/agents/developer/web-architecture/metadata.yaml +12 -0
  444. package/src/agents/developer/web-architecture/output.md +449 -0
  445. package/src/agents/developer/web-architecture/playbook.md +481 -0
  446. package/src/agents/developer/web-developer/critical-reminders.md +40 -0
  447. package/src/agents/developer/web-developer/critical-requirements.md +39 -0
  448. package/src/agents/developer/web-developer/identity.md +32 -0
  449. package/src/agents/developer/web-developer/metadata.yaml +12 -0
  450. package/src/agents/developer/web-developer/output.md +323 -0
  451. package/src/agents/developer/web-developer/playbook.md +349 -0
  452. package/src/agents/meta/agent-summoner/critical-reminders.md +45 -0
  453. package/src/agents/meta/agent-summoner/critical-requirements.md +52 -0
  454. package/src/agents/meta/agent-summoner/identity.md +34 -0
  455. package/src/agents/meta/agent-summoner/metadata.yaml +12 -0
  456. package/src/agents/meta/agent-summoner/output.md +296 -0
  457. package/src/agents/meta/agent-summoner/playbook.md +1469 -0
  458. package/src/agents/meta/codex-keeper/critical-reminders.md +39 -0
  459. package/src/agents/meta/codex-keeper/critical-requirements.md +29 -0
  460. package/src/agents/meta/codex-keeper/identity.md +45 -0
  461. package/src/agents/meta/codex-keeper/metadata.yaml +12 -0
  462. package/src/agents/meta/codex-keeper/output.md +384 -0
  463. package/src/agents/meta/codex-keeper/playbook.md +1183 -0
  464. package/src/agents/meta/convention-keeper/critical-reminders.md +32 -0
  465. package/src/agents/meta/convention-keeper/critical-requirements.md +32 -0
  466. package/src/agents/meta/convention-keeper/identity.md +33 -0
  467. package/src/agents/meta/convention-keeper/metadata.yaml +12 -0
  468. package/src/agents/meta/convention-keeper/output.md +206 -0
  469. package/src/agents/meta/convention-keeper/playbook.md +180 -0
  470. package/src/agents/meta/skill-summoner/critical-reminders.md +112 -0
  471. package/src/agents/meta/skill-summoner/critical-requirements.md +62 -0
  472. package/src/agents/meta/skill-summoner/identity.md +31 -0
  473. package/src/agents/meta/skill-summoner/metadata.yaml +13 -0
  474. package/src/agents/meta/skill-summoner/output.md +390 -0
  475. package/src/agents/meta/skill-summoner/playbook.md +1457 -0
  476. package/src/agents/pattern/pattern-scout/critical-reminders.md +71 -0
  477. package/src/agents/pattern/pattern-scout/critical-requirements.md +31 -0
  478. package/src/agents/pattern/pattern-scout/identity.md +25 -0
  479. package/src/agents/pattern/pattern-scout/metadata.yaml +10 -0
  480. package/src/agents/pattern/pattern-scout/output.md +290 -0
  481. package/src/agents/pattern/pattern-scout/playbook.md +1806 -0
  482. package/src/agents/pattern/web-pattern-critique/critical-reminders.md +30 -0
  483. package/src/agents/pattern/web-pattern-critique/critical-requirements.md +28 -0
  484. package/src/agents/pattern/web-pattern-critique/identity.md +41 -0
  485. package/src/agents/pattern/web-pattern-critique/metadata.yaml +12 -0
  486. package/src/agents/pattern/web-pattern-critique/output.md +314 -0
  487. package/src/agents/pattern/web-pattern-critique/playbook.md +572 -0
  488. package/src/agents/planning/api-pm/critical-reminders.md +48 -0
  489. package/src/agents/planning/api-pm/critical-requirements.md +41 -0
  490. package/src/agents/planning/api-pm/identity.md +39 -0
  491. package/src/agents/planning/api-pm/metadata.yaml +12 -0
  492. package/src/agents/planning/api-pm/output.md +475 -0
  493. package/src/agents/planning/api-pm/playbook.md +129 -0
  494. package/src/agents/planning/web-pm/critical-reminders.md +36 -0
  495. package/src/agents/planning/web-pm/critical-requirements.md +32 -0
  496. package/src/agents/planning/web-pm/identity.md +26 -0
  497. package/src/agents/planning/web-pm/metadata.yaml +12 -0
  498. package/src/agents/planning/web-pm/output.md +314 -0
  499. package/src/agents/planning/web-pm/playbook.md +318 -0
  500. package/src/agents/researcher/api-researcher/critical-reminders.md +27 -0
  501. package/src/agents/researcher/api-researcher/critical-requirements.md +28 -0
  502. package/src/agents/researcher/api-researcher/identity.md +71 -0
  503. package/src/agents/researcher/api-researcher/metadata.yaml +10 -0
  504. package/src/agents/researcher/api-researcher/output.md +254 -0
  505. package/src/agents/researcher/api-researcher/playbook.md +201 -0
  506. package/src/agents/researcher/web-researcher/critical-reminders.md +39 -0
  507. package/src/agents/researcher/web-researcher/critical-requirements.md +26 -0
  508. package/src/agents/researcher/web-researcher/identity.md +69 -0
  509. package/src/agents/researcher/web-researcher/metadata.yaml +10 -0
  510. package/src/agents/researcher/web-researcher/output.md +241 -0
  511. package/src/agents/researcher/web-researcher/playbook.md +217 -0
  512. package/src/agents/reviewer/ai-reviewer/critical-reminders.md +40 -0
  513. package/src/agents/reviewer/ai-reviewer/critical-requirements.md +37 -0
  514. package/src/agents/reviewer/ai-reviewer/identity.md +51 -0
  515. package/src/agents/reviewer/ai-reviewer/metadata.yaml +10 -0
  516. package/src/agents/reviewer/ai-reviewer/output.md +395 -0
  517. package/src/agents/reviewer/ai-reviewer/playbook.md +90 -0
  518. package/src/agents/reviewer/api-reviewer/critical-reminders.md +31 -0
  519. package/src/agents/reviewer/api-reviewer/critical-requirements.md +27 -0
  520. package/src/agents/reviewer/api-reviewer/identity.md +51 -0
  521. package/src/agents/reviewer/api-reviewer/metadata.yaml +12 -0
  522. package/src/agents/reviewer/api-reviewer/output.md +343 -0
  523. package/src/agents/reviewer/api-reviewer/playbook.md +288 -0
  524. package/src/agents/reviewer/cli-reviewer/critical-reminders.md +33 -0
  525. package/src/agents/reviewer/cli-reviewer/critical-requirements.md +30 -0
  526. package/src/agents/reviewer/cli-reviewer/identity.md +44 -0
  527. package/src/agents/reviewer/cli-reviewer/metadata.yaml +12 -0
  528. package/src/agents/reviewer/cli-reviewer/output.md +414 -0
  529. package/src/agents/reviewer/cli-reviewer/playbook.md +218 -0
  530. package/src/agents/reviewer/infra-reviewer/critical-reminders.md +38 -0
  531. package/src/agents/reviewer/infra-reviewer/critical-requirements.md +38 -0
  532. package/src/agents/reviewer/infra-reviewer/identity.md +53 -0
  533. package/src/agents/reviewer/infra-reviewer/metadata.yaml +10 -0
  534. package/src/agents/reviewer/infra-reviewer/output.md +364 -0
  535. package/src/agents/reviewer/infra-reviewer/playbook.md +161 -0
  536. package/src/agents/reviewer/web-reviewer/critical-reminders.md +31 -0
  537. package/src/agents/reviewer/web-reviewer/critical-requirements.md +26 -0
  538. package/src/agents/reviewer/web-reviewer/identity.md +40 -0
  539. package/src/agents/reviewer/web-reviewer/metadata.yaml +12 -0
  540. package/src/agents/reviewer/web-reviewer/output.md +333 -0
  541. package/src/agents/reviewer/web-reviewer/playbook.md +156 -0
  542. package/src/agents/tester/api-tester/critical-reminders.md +41 -0
  543. package/src/agents/tester/api-tester/critical-requirements.md +41 -0
  544. package/src/agents/tester/api-tester/identity.md +47 -0
  545. package/src/agents/tester/api-tester/metadata.yaml +12 -0
  546. package/src/agents/tester/api-tester/output.md +284 -0
  547. package/src/agents/tester/api-tester/playbook.md +275 -0
  548. package/src/agents/tester/cli-tester/critical-reminders.md +36 -0
  549. package/src/agents/tester/cli-tester/critical-requirements.md +36 -0
  550. package/src/agents/tester/cli-tester/identity.md +43 -0
  551. package/src/agents/tester/cli-tester/metadata.yaml +12 -0
  552. package/src/agents/tester/cli-tester/output.md +313 -0
  553. package/src/agents/tester/cli-tester/playbook.md +221 -0
  554. package/src/agents/tester/web-tester/critical-reminders.md +31 -0
  555. package/src/agents/tester/web-tester/critical-requirements.md +28 -0
  556. package/src/agents/tester/web-tester/identity.md +41 -0
  557. package/src/agents/tester/web-tester/metadata.yaml +12 -0
  558. package/src/agents/tester/web-tester/output.md +321 -0
  559. package/src/agents/tester/web-tester/playbook.md +428 -0
  560. package/src/schemas/agent-frontmatter.schema.json +88 -0
  561. package/src/schemas/agent.schema.json +103 -0
  562. package/src/schemas/custom-metadata.schema.json +74 -0
  563. package/src/schemas/hooks.schema.json +47 -0
  564. package/src/schemas/marketplace.schema.json +119 -0
  565. package/src/schemas/metadata.schema.json +387 -0
  566. package/src/schemas/plugin.schema.json +127 -0
  567. package/src/schemas/project-config.schema.json +189 -0
  568. package/src/schemas/project-source-config.schema.json +96 -0
  569. package/src/schemas/skill-frontmatter.schema.json +42 -0
  570. package/src/schemas/stack.schema.json +191 -0
  571. package/src/schemas/stacks.schema.json +107 -0
  572. package/bin/run.js +0 -3
@@ -0,0 +1,428 @@
1
+ ## Your Investigation Process
2
+
3
+ Before writing tests:
4
+
5
+ ```xml
6
+ <test_planning>
7
+ 1. **Read specification thoroughly**
8
+ - Understand functional requirements
9
+ - Identify edge cases
10
+ - Note constraints
11
+
12
+ 2. **Examine existing test patterns**
13
+ - Look at similar test files in codebase
14
+ - Note testing utilities being used
15
+ - Understand test structure conventions
16
+
17
+ 3. **Identify behaviors to test**
18
+ - Happy path functionality
19
+ - Edge cases and boundary conditions
20
+ - Error handling
21
+ - Integration with existing code
22
+
23
+ 4. **Plan test structure**
24
+ - Group related tests in describe blocks
25
+ - Name tests clearly ("should X when Y")
26
+ - Use existing test utilities/helpers
27
+ </test_planning>
28
+ ```
29
+
30
+ ---
31
+
32
+ ## Tester Workflow
33
+
34
+ **ALWAYS follow the Red-Green-Refactor cycle:**
35
+
36
+ ```xml
37
+ <tester_workflow>
38
+ **RED: Write Failing Tests**
39
+ 1. Analyze requirements and extract all behaviors
40
+ 2. Write comprehensive tests for each behavior
41
+ 3. Run tests -> they should FAIL (no implementation yet)
42
+ 4. Verify tests fail for the RIGHT reason
43
+ 5. Document expected behavior clearly
44
+
45
+ **GREEN: Implement to Pass**
46
+ 1. Write minimal code to make tests pass
47
+ 2. Don't add extra features not in tests
48
+ 3. Run tests -> they should PASS
49
+ 4. All tests green? Move to next behavior
50
+
51
+ **REFACTOR: Improve Code**
52
+ 1. Clean up implementation without changing behavior
53
+ 2. Remove duplication
54
+ 3. Improve clarity and maintainability
55
+ 4. Run tests -> they should STILL PASS
56
+ 5. Tests are your safety net
57
+
58
+ **Hand Off to Developer:**
59
+ - Provide complete test file
60
+ - Document coverage analysis
61
+ - Confirm all tests failing (ready for implementation)
62
+ - Specify expected patterns to follow
63
+ </tester_workflow>
64
+ ```
65
+
66
+ ---
67
+
68
+ ## Test Naming Conventions
69
+
70
+ **Test names should describe behavior, not implementation:**
71
+
72
+ ```typescript
73
+ // Good - describes behavior from user perspective
74
+ it("displays error message when email is invalid");
75
+ it("calls onSubmit when form is valid");
76
+ it("disables submit button while loading");
77
+ it("retains form data when modal is reopened");
78
+
79
+ // Bad - describes implementation
80
+ it("sets error state");
81
+ it("calls handleSubmit function");
82
+ it("updates button disabled prop");
83
+ it("calls useState with initial value");
84
+ ```
85
+
86
+ ---
87
+
88
+ ## What to Test
89
+
90
+ ### 1. Happy Path (Primary Flows)
91
+
92
+ **Always test the main use case:**
93
+
94
+ ```typescript
95
+ describe("ProfileForm", () => {
96
+ it("successfully submits valid profile data", async () => {
97
+ // User fills out form correctly and submits
98
+ // Expect success message and data saved
99
+ });
100
+ });
101
+ ```
102
+
103
+ ### 2. Validation & Error Cases
104
+
105
+ **Test all validation rules:**
106
+
107
+ ```typescript
108
+ it('shows error when email missing @ symbol', () => { ... })
109
+ it('shows error when name exceeds 50 characters', () => { ... })
110
+ it('shows error when required field is empty', () => { ... })
111
+ it('prevents submission when validation fails', () => { ... })
112
+ ```
113
+
114
+ ### 3. Edge Cases
115
+
116
+ **Test boundary conditions:**
117
+
118
+ ```typescript
119
+ it('handles empty form submission', () => { ... })
120
+ it('handles exactly 50 character name (boundary)', () => { ... })
121
+ it('handles rapid repeated clicks', () => { ... })
122
+ it('handles special characters in input', () => { ... })
123
+ ```
124
+
125
+ ### 4. Error Scenarios
126
+
127
+ **Test failure modes:**
128
+
129
+ ```typescript
130
+ it('displays error message when API call fails', () => { ... })
131
+ it('handles network timeout gracefully', () => { ... })
132
+ it('shows generic error for unknown failures', () => { ... })
133
+ it('allows retry after error', () => { ... })
134
+ ```
135
+
136
+ ### 5. Integration Points
137
+
138
+ **Test interactions with other systems:**
139
+
140
+ ```typescript
141
+ it('calls user API with correct data', () => { ... })
142
+ it('triggers navigation after save', () => { ... })
143
+ it('closes modal after successful submission', () => { ... })
144
+ ```
145
+
146
+ ### 6. Accessibility
147
+
148
+ **Test screen reader support:**
149
+
150
+ ```typescript
151
+ it('has accessible form labels', () => { ... })
152
+ it('announces errors to screen readers', () => { ... })
153
+ it('manages focus correctly on modal open', () => { ... })
154
+ it('allows keyboard navigation', () => { ... })
155
+ ```
156
+
157
+ ---
158
+
159
+ ## What NOT to Test
160
+
161
+ **DON'T test:**
162
+
163
+ - **Implementation details** - Specific hooks used, internal state
164
+ - **External libraries** - React, MobX are already tested
165
+ - **Styling** - Unless functional (like visibility)
166
+ - **Third-party components** - Trust their tests
167
+
168
+ **DO test:**
169
+
170
+ - **Component behavior** - Does it show/hide correctly?
171
+ - **User interactions** - What happens when clicked?
172
+ - **Data flow** - Does data update correctly?
173
+ - **Error states** - What happens when something fails?
174
+
175
+ ---
176
+
177
+ ## Testing Best Practices
178
+
179
+ ### 1. Test Behavior, Not Implementation
180
+
181
+ ```typescript
182
+ // Bad - tests implementation details
183
+ expect(component.state.loading).toBe(true);
184
+ expect(useState).toHaveBeenCalledWith({ name: "" });
185
+
186
+ // Good - tests user-visible behavior
187
+ expect(screen.getByRole("button")).toBeDisabled();
188
+ expect(screen.getByText("Loading...")).toBeInTheDocument();
189
+ ```
190
+
191
+ ### 2. Use Testing Library Queries Correctly
192
+
193
+ **Priority order:**
194
+
195
+ 1. **`getByRole`** - Most accessible
196
+ 2. **`getByLabelText`** - Form elements
197
+ 3. **`getByPlaceholderText`** - Only when no label
198
+ 4. **`getByText`** - Content
199
+ 5. **`getByTestId`** - Last resort
200
+
201
+ ```typescript
202
+ // Best - accessible and robust
203
+ screen.getByRole("button", { name: "Save" });
204
+ screen.getByLabelText("Email");
205
+
206
+ // Okay - readable but less accessible
207
+ screen.getByText("Profile Settings");
208
+
209
+ // Avoid - not accessible, implementation detail
210
+ screen.getByTestId("save-button");
211
+ screen.getByClassName("submit-btn");
212
+ ```
213
+
214
+ ### 3. Async Testing Patterns
215
+
216
+ ```typescript
217
+ // Best - finds element when it appears
218
+ expect(await screen.findByText("Saved!")).toBeInTheDocument();
219
+
220
+ // Good - waits for condition
221
+ await waitFor(() => {
222
+ expect(screen.getByText("Saved!")).toBeInTheDocument();
223
+ });
224
+
225
+ // Good - waits for element to disappear
226
+ await waitForElementToBeRemoved(() => screen.getByText("Loading..."));
227
+
228
+ // Bad - doesn't wait, will fail
229
+ expect(screen.getByText("Saved!")).toBeInTheDocument();
230
+ ```
231
+
232
+ ### 4. Mock External Dependencies
233
+
234
+ ```typescript
235
+ // Mock API calls
236
+ jest.mock("@/lib/api-client", () => ({
237
+ apiClient: {
238
+ put: jest.fn(),
239
+ get: jest.fn(),
240
+ },
241
+ }));
242
+
243
+ // Mock stores
244
+ jest.mock("@/stores/user-store", () => ({
245
+ userStore: {
246
+ updateUser: jest.fn(),
247
+ user: { id: "123", name: "John" },
248
+ },
249
+ }));
250
+ ```
251
+
252
+ ### 5. Clean Up After Tests
253
+
254
+ ```typescript
255
+ beforeEach(() => {
256
+ // Reset before each test
257
+ jest.clearAllMocks();
258
+ });
259
+
260
+ afterEach(() => {
261
+ // Clean up after each test
262
+ cleanup(); // RTL cleanup
263
+ jest.restoreAllMocks();
264
+ });
265
+ ```
266
+
267
+ ---
268
+
269
+ ## Test Anti-Patterns to Avoid
270
+
271
+ ### 1. Testing Implementation Details
272
+
273
+ ```typescript
274
+ // Bad - breaks when implementation changes
275
+ expect(useState).toHaveBeenCalledWith({ name: "", email: "" });
276
+ expect(component.find(".error-message")).toHaveLength(1);
277
+
278
+ // Good - tests behavior
279
+ expect(screen.getByLabelText("Name")).toHaveValue("");
280
+ expect(screen.getByRole("alert")).toHaveTextContent("Invalid email");
281
+ ```
282
+
283
+ ### 2. Overly Coupled Tests
284
+
285
+ ```typescript
286
+ // Bad - tests depend on each other
287
+ let sharedState;
288
+
289
+ it("test 1", () => {
290
+ sharedState = { value: 5 };
291
+ });
292
+
293
+ it("test 2", () => {
294
+ expect(sharedState.value).toBe(5); // Breaks if test 1 doesn't run
295
+ });
296
+
297
+ // Good - tests are independent
298
+ it("test 1", () => {
299
+ const state = { value: 5 };
300
+ // Test using state
301
+ });
302
+ ```
303
+
304
+ ### 3. Testing Too Much at Once
305
+
306
+ ```typescript
307
+ // Bad - giant test doing everything
308
+ it('form works', () => {
309
+ // 50 lines testing rendering, validation, submission, errors...
310
+ })
311
+
312
+ // Good - focused tests
313
+ it('validates email format', () => { ... })
314
+ it('shows error for empty name', () => { ... })
315
+ it('submits form data successfully', () => { ... })
316
+ ```
317
+
318
+ ### 4. Not Testing Error Cases
319
+
320
+ ```typescript
321
+ // Bad - only happy path
322
+ it('saves profile successfully', () => { ... })
323
+
324
+ // Good - includes error cases
325
+ describe('profile save', () => {
326
+ it('saves profile successfully', () => { ... })
327
+ it('displays error when API fails', () => { ... })
328
+ it('handles network timeout', () => { ... })
329
+ it('shows validation errors', () => { ... })
330
+ })
331
+ ```
332
+
333
+ ---
334
+
335
+ ## Critical Rules for Test Writing
336
+
337
+ ### 1. Never Test Implementation - Test Behavior
338
+
339
+ The developer should be able to refactor implementation without breaking tests (as long as behavior stays the same).
340
+
341
+ ### 2. Tests Must Fail First (RED)
342
+
343
+ If tests pass before implementation exists, they're not testing anything useful. Always verify tests fail for the RIGHT reason.
344
+
345
+ ### 3. Use Existing Test Utilities
346
+
347
+ Check the codebase for:
348
+
349
+ - Custom render functions
350
+ - Test data factories
351
+ - Shared mock utilities
352
+ - Helper functions
353
+
354
+ ### 4. Test What Matters to Users
355
+
356
+ Focus on:
357
+
358
+ - Can they see what they need?
359
+ - Can they interact successfully?
360
+ - Does feedback appear correctly?
361
+ - Do errors help them recover?
362
+
363
+ ---
364
+
365
+ ## Collaboration with Developer Agent
366
+
367
+ ```xml
368
+ <tdd_developer_handoff>
369
+ **You provide:**
370
+ - Comprehensive test file with all behaviors covered
371
+ - Documentation of expected behavior
372
+ - Coverage analysis (what's tested, what's not)
373
+ - Test status (all failing, ready for implementation)
374
+
375
+ **Developer implements:**
376
+ - Code to make tests pass
377
+ - Following existing patterns
378
+ - Without modifying tests
379
+
380
+ **You verify:**
381
+ - Tests pass after implementation
382
+ - Coverage is adequate
383
+ - Edge cases are handled
384
+ - No tests were modified
385
+
386
+ **If tests fail after implementation:**
387
+ - Developer debugs their implementation (not the tests)
388
+ - Developer asks you if test behavior is unclear
389
+ - You clarify intent, don't change tests to pass
390
+ </tdd_developer_handoff>
391
+ ```
392
+
393
+ ---
394
+
395
+ ## When Tests Should Change
396
+
397
+ **Tests should only be modified when:**
398
+
399
+ 1. **Requirements change** - Specification updated, tests must follow
400
+ 2. **Tests are incorrect** - You wrote the wrong expected behavior
401
+ 3. **Test structure improvements** - Better organization, but same assertions
402
+
403
+ **Tests should NEVER change because:**
404
+
405
+ - Developer found them inconvenient
406
+ - Implementation is "close enough"
407
+ - Tests are "too strict"
408
+ - Implementation is easier with different behavior
409
+
410
+ **Golden rule:** Tests are the specification. Developer implements to the spec. If the spec (tests) is wrong, discuss and revise deliberately - never change tests to make broken code pass.
411
+
412
+ ---
413
+
414
+ <retrieval_strategy>
415
+
416
+ ## Just-in-Time Loading
417
+
418
+ **When exploring test patterns:**
419
+
420
+ - Don't pre-load every test file in the codebase
421
+ - Start with file patterns: `*.test.ts`, `*.spec.ts`
422
+ - Use Glob to find similar test files first
423
+ - Use Grep to search for specific patterns (describe blocks, mocking)
424
+ - Read detailed test files only when needed for reference
425
+
426
+ This preserves context window for actual test writing.
427
+
428
+ </retrieval_strategy>
@@ -0,0 +1,118 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ buildAgentConfigs
4
+ } from "../chunk-DIBCRIMR.js";
5
+ import {
6
+ ALL_SKILLS_TEST_CATEGORIES_MATRIX
7
+ } from "../chunk-THKIOI32.js";
8
+ import "../chunk-K3OU6TGX.js";
9
+ import "../chunk-V7QOSGQA.js";
10
+ import {
11
+ beforeEach,
12
+ describe,
13
+ globalExpect,
14
+ it
15
+ } from "../chunk-I3XKEGHM.js";
16
+ import "../chunk-EZ7STXUV.js";
17
+ import "../chunk-UTFN6UJS.js";
18
+ import "../chunk-EVXG3X6G.js";
19
+ import "../chunk-OJIESW5B.js";
20
+ import "../chunk-UFURYGD3.js";
21
+ import "../chunk-RBHYLCUB.js";
22
+ import "../chunk-LAXAQ3PZ.js";
23
+ import "../chunk-NM3EDGB5.js";
24
+ import "../chunk-NHCGC6DG.js";
25
+ import "../chunk-BNE4HHIH.js";
26
+ import "../chunk-TYJLR32W.js";
27
+ import "../chunk-IOJR5TOY.js";
28
+ import "../chunk-3YGUHWLR.js";
29
+ import "../chunk-QQLRX4KI.js";
30
+ import "../chunk-WK4J2CHH.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-6RBQBOBS.js";
37
+ import "../chunk-LYYXX2W5.js";
38
+ import "../chunk-SHHOMVWC.js";
39
+ import "../chunk-YA4QQKKE.js";
40
+ import "../chunk-XA57SX4T.js";
41
+ import "../chunk-FYPUUYSG.js";
42
+ import "../chunk-DAG2ULNF.js";
43
+ import "../chunk-VG2TVBFN.js";
44
+ import "../chunk-IHO75PMZ.js";
45
+ import "../chunk-5V2O6C3T.js";
46
+ import {
47
+ useWizardStore
48
+ } from "../chunk-44LLPS2N.js";
49
+ import "../chunk-P3PN5SVI.js";
50
+ import {
51
+ generateProjectConfigFromSkills,
52
+ mergeConfigs
53
+ } from "../chunk-TVHRMRD3.js";
54
+ import "../chunk-3LIU2ZEF.js";
55
+ import {
56
+ initializeMatrix
57
+ } from "../chunk-DG2NGZ7S.js";
58
+ import "../chunk-VEP23B5W.js";
59
+ import "../chunk-O5ASLZ2K.js";
60
+ import "../chunk-YU2VGX5R.js";
61
+ import {
62
+ init_esm_shims
63
+ } from "../chunk-P56WJ5FA.js";
64
+
65
+ // src/cli/stores/d227-same-scope-tombstone-duplicate.test.ts
66
+ init_esm_shims();
67
+ var AGENT = "web-developer";
68
+ var LONE_GLOBAL_TOMBSTONE = buildAgentConfigs([AGENT], {
69
+ scope: "global",
70
+ excluded: true
71
+ });
72
+ var SINGLE_ACTIVE_GLOBAL = buildAgentConfigs([AGENT], { scope: "global" });
73
+ describe("D-227 same-scope tombstone duplicate", () => {
74
+ beforeEach(() => {
75
+ initializeMatrix(ALL_SKILLS_TEST_CATEGORIES_MATRIX);
76
+ useWizardStore.getState().reset();
77
+ });
78
+ it.fails(
79
+ "preselectAgentsFromDomains re-including a lone global tombstone must not duplicate it at the same scope",
80
+ () => {
81
+ useWizardStore.setState({ agentConfigs: LONE_GLOBAL_TOMBSTONE });
82
+ const store = useWizardStore.getState();
83
+ store.toggleDomain("web");
84
+ store.preselectAgentsFromDomains();
85
+ const agentConfigs = useWizardStore.getState().agentConfigs.filter((ac) => ac.name === AGENT);
86
+ globalExpect(agentConfigs).toStrictEqual(SINGLE_ACTIVE_GLOBAL);
87
+ }
88
+ );
89
+ it.fails(
90
+ "preselectAgentsFromStack re-including a lone global tombstone must not duplicate it at the same scope",
91
+ () => {
92
+ useWizardStore.setState({
93
+ globalAgentPreselections: { agents: [AGENT], configs: LONE_GLOBAL_TOMBSTONE }
94
+ });
95
+ const store = useWizardStore.getState();
96
+ store.preselectAgentsFromStack([AGENT]);
97
+ const agentConfigs = useWizardStore.getState().agentConfigs.filter((ac) => ac.name === AGENT);
98
+ globalExpect(agentConfigs).toStrictEqual(SINGLE_ACTIVE_GLOBAL);
99
+ }
100
+ );
101
+ it.fails("the same-scope duplicate must not reach the merged project config", () => {
102
+ useWizardStore.setState({ agentConfigs: LONE_GLOBAL_TOMBSTONE });
103
+ const store = useWizardStore.getState();
104
+ store.toggleDomain("web");
105
+ store.preselectAgentsFromDomains();
106
+ const { agentConfigs, selectedAgents } = useWizardStore.getState();
107
+ const generated = generateProjectConfigFromSkills("test-project", [], {
108
+ selectedAgents: [...selectedAgents],
109
+ skillConfigs: [],
110
+ agentConfigs
111
+ });
112
+ const emptyExisting = { name: "test-project", agents: [], skills: [] };
113
+ const merged = mergeConfigs(generated, emptyExisting);
114
+ const mergedAgent = merged.agents.filter((a) => a.name === AGENT);
115
+ globalExpect(mergedAgent).toStrictEqual(SINGLE_ACTIVE_GLOBAL);
116
+ });
117
+ });
118
+ //# sourceMappingURL=d227-same-scope-tombstone-duplicate.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/cli/stores/d227-same-scope-tombstone-duplicate.test.ts"],"sourcesContent":["/**\n * Confirmed-still-broken documentation for the D-227 same-scope active+tombstone\n * duplicate (see .ai-docs/agent-findings/2026-07-17-d227-same-scope-active-tombstone-duplicate.md).\n *\n * When the ONLY saved entry for an agent is a stale GLOBAL-scope excluded tombstone\n * (no active counterpart) and that agent is re-included by preselection, the active\n * builder (buildAgentConfigForName) emits a fresh { scope: \"global\" } active entry\n * while the unconditional `filter(ac => ac.excluded)` step ALSO preserves the\n * { scope: \"global\", excluded: true } tombstone — a same-scope active+tombstone\n * duplicate for one agent. config-merger's compound key\n * (`name:scope[:excluded]`) treats the two as distinct, so both survive into config.\n *\n * These tests assert the CORRECT (post-fix) behavior — a single active global entry,\n * with the stale tombstone cleared — and are marked `it.fails` because the current\n * code still emits the duplicate. They document the store-level mechanism, which is\n * where the bug is reachable (directly-seeded state); the second finding\n * (2026-07-17-d227-preselect-fix-not-e2e-reachable.md) establishes the same branch is\n * NOT reachable through a realistic CLI init/stack flow, so unit-level is the correct gate.\n */\nimport { describe, expect, it, beforeEach } from \"vitest\";\nimport { useWizardStore } from \"./wizard-store\";\nimport { initializeMatrix } from \"../lib/matrix/matrix-provider\";\nimport { ALL_SKILLS_TEST_CATEGORIES_MATRIX } from \"../lib/__tests__/mock-data/mock-matrices\";\nimport { buildAgentConfigs } from \"../lib/__tests__/factories/config-factories\";\nimport { generateProjectConfigFromSkills } from \"../lib/configuration/config-generator\";\nimport { mergeConfigs } from \"../lib/configuration/config-merger\";\nimport type { AgentScopeConfig, ProjectConfig } from \"../types\";\n\nconst AGENT = \"web-developer\";\nconst LONE_GLOBAL_TOMBSTONE: AgentScopeConfig[] = buildAgentConfigs([AGENT], {\n scope: \"global\",\n excluded: true,\n});\nconst SINGLE_ACTIVE_GLOBAL: AgentScopeConfig[] = buildAgentConfigs([AGENT], { scope: \"global\" });\n\ndescribe(\"D-227 same-scope tombstone duplicate\", () => {\n beforeEach(() => {\n initializeMatrix(ALL_SKILLS_TEST_CATEGORIES_MATRIX);\n useWizardStore.getState().reset();\n });\n\n it.fails(\n \"preselectAgentsFromDomains re-including a lone global tombstone must not duplicate it at the same scope\",\n () => {\n useWizardStore.setState({ agentConfigs: LONE_GLOBAL_TOMBSTONE });\n const store = useWizardStore.getState();\n\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const agentConfigs = useWizardStore.getState().agentConfigs.filter((ac) => ac.name === AGENT);\n expect(agentConfigs).toStrictEqual(SINGLE_ACTIVE_GLOBAL);\n },\n );\n\n it.fails(\n \"preselectAgentsFromStack re-including a lone global tombstone must not duplicate it at the same scope\",\n () => {\n useWizardStore.setState({\n globalAgentPreselections: { agents: [AGENT], configs: LONE_GLOBAL_TOMBSTONE },\n });\n const store = useWizardStore.getState();\n\n store.preselectAgentsFromStack([AGENT]);\n\n const agentConfigs = useWizardStore.getState().agentConfigs.filter((ac) => ac.name === AGENT);\n expect(agentConfigs).toStrictEqual(SINGLE_ACTIVE_GLOBAL);\n },\n );\n\n it.fails(\"the same-scope duplicate must not reach the merged project config\", () => {\n useWizardStore.setState({ agentConfigs: LONE_GLOBAL_TOMBSTONE });\n const store = useWizardStore.getState();\n\n store.toggleDomain(\"web\");\n store.preselectAgentsFromDomains();\n\n const { agentConfigs, selectedAgents } = useWizardStore.getState();\n const generated = generateProjectConfigFromSkills(\"test-project\", [], {\n selectedAgents: [...selectedAgents],\n skillConfigs: [],\n agentConfigs,\n });\n const emptyExisting: ProjectConfig = { name: \"test-project\", agents: [], skills: [] };\n const merged = mergeConfigs(generated, emptyExisting);\n\n const mergedAgent = merged.agents.filter((a) => a.name === AGENT);\n expect(mergedAgent).toStrictEqual(SINGLE_ACTIVE_GLOBAL);\n });\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AA4BA,IAAM,QAAQ;AACd,IAAM,wBAA4C,kBAAkB,CAAC,KAAK,GAAG;AAAA,EAC3E,OAAO;AAAA,EACP,UAAU;AACZ,CAAC;AACD,IAAM,uBAA2C,kBAAkB,CAAC,KAAK,GAAG,EAAE,OAAO,SAAS,CAAC;AAE/F,SAAS,wCAAwC,MAAM;AACrD,aAAW,MAAM;AACf,qBAAiB,iCAAiC;AAClD,mBAAe,SAAS,EAAE,MAAM;AAAA,EAClC,CAAC;AAED,KAAG;AAAA,IACD;AAAA,IACA,MAAM;AACJ,qBAAe,SAAS,EAAE,cAAc,sBAAsB,CAAC;AAC/D,YAAM,QAAQ,eAAe,SAAS;AAEtC,YAAM,aAAa,KAAK;AACxB,YAAM,2BAA2B;AAEjC,YAAM,eAAe,eAAe,SAAS,EAAE,aAAa,OAAO,CAAC,OAAO,GAAG,SAAS,KAAK;AAC5F,mBAAO,YAAY,EAAE,cAAc,oBAAoB;AAAA,IACzD;AAAA,EACF;AAEA,KAAG;AAAA,IACD;AAAA,IACA,MAAM;AACJ,qBAAe,SAAS;AAAA,QACtB,0BAA0B,EAAE,QAAQ,CAAC,KAAK,GAAG,SAAS,sBAAsB;AAAA,MAC9E,CAAC;AACD,YAAM,QAAQ,eAAe,SAAS;AAEtC,YAAM,yBAAyB,CAAC,KAAK,CAAC;AAEtC,YAAM,eAAe,eAAe,SAAS,EAAE,aAAa,OAAO,CAAC,OAAO,GAAG,SAAS,KAAK;AAC5F,mBAAO,YAAY,EAAE,cAAc,oBAAoB;AAAA,IACzD;AAAA,EACF;AAEA,KAAG,MAAM,qEAAqE,MAAM;AAClF,mBAAe,SAAS,EAAE,cAAc,sBAAsB,CAAC;AAC/D,UAAM,QAAQ,eAAe,SAAS;AAEtC,UAAM,aAAa,KAAK;AACxB,UAAM,2BAA2B;AAEjC,UAAM,EAAE,cAAc,eAAe,IAAI,eAAe,SAAS;AACjE,UAAM,YAAY,gCAAgC,gBAAgB,CAAC,GAAG;AAAA,MACpE,gBAAgB,CAAC,GAAG,cAAc;AAAA,MAClC,cAAc,CAAC;AAAA,MACf;AAAA,IACF,CAAC;AACD,UAAM,gBAA+B,EAAE,MAAM,gBAAgB,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE;AACpF,UAAM,SAAS,aAAa,WAAW,aAAa;AAEpD,UAAM,cAAc,OAAO,OAAO,OAAO,CAAC,MAAM,EAAE,SAAS,KAAK;AAChE,iBAAO,WAAW,EAAE,cAAc,oBAAoB;AAAA,EACxD,CAAC;AACH,CAAC;","names":[]}
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import {
3
+ WIZARD_STEP_ORDER,
4
+ createInitialState,
5
+ hydrateWizardStore,
6
+ useWizardStore
7
+ } from "../chunk-44LLPS2N.js";
8
+ import "../chunk-TVHRMRD3.js";
9
+ import "../chunk-3LIU2ZEF.js";
10
+ import "../chunk-DG2NGZ7S.js";
11
+ import "../chunk-VEP23B5W.js";
12
+ import "../chunk-O5ASLZ2K.js";
13
+ import "../chunk-YU2VGX5R.js";
14
+ import "../chunk-P56WJ5FA.js";
15
+ export {
16
+ WIZARD_STEP_ORDER,
17
+ createInitialState,
18
+ hydrateWizardStore,
19
+ useWizardStore
20
+ };
21
+ //# sourceMappingURL=wizard-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}