@avi770/testteam 1.2.0 → 3.0.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 (324) hide show
  1. package/CHANGELOG.md +53 -1
  2. package/README.md +72 -7
  3. package/agents/15-regression-sentinel.ts +3 -2
  4. package/agents/24-signup-onboarding-tester.ts +429 -0
  5. package/agents/25-crud-flow-tester.ts +302 -0
  6. package/agents/26-form-validator.ts +297 -0
  7. package/agents/27-search-filter-tester.ts +326 -0
  8. package/agents/28-navigation-routing-tester.ts +425 -0
  9. package/agents/29-responsive-interaction-tester.ts +350 -0
  10. package/agents/30-multi-user-scenario-tester.ts +319 -0
  11. package/agents/31-load-tester.ts +134 -0
  12. package/agents/32-memory-leak-detector.ts +194 -0
  13. package/agents/33-bundle-analyzer.ts +132 -0
  14. package/agents/34-xss-scanner.ts +191 -0
  15. package/agents/35-csrf-tester.ts +82 -0
  16. package/agents/36-auth-fuzzer.ts +194 -0
  17. package/agents/37-dependency-scanner.ts +176 -0
  18. package/agents/38-secrets-scanner.ts +137 -0
  19. package/agents/39-api-contract-tester.ts +199 -0
  20. package/agents/40-rate-limit-tester.ts +94 -0
  21. package/agents/41-api-pagination-tester.ts +97 -0
  22. package/agents/42-graphql-tester.ts +222 -0
  23. package/agents/43-data-consistency-checker.ts +205 -0
  24. package/agents/44-backup-recovery-tester.ts +152 -0
  25. package/agents/45-data-privacy-scanner.ts +125 -0
  26. package/agents/46-seo-auditor.ts +294 -0
  27. package/agents/47-social-preview-tester.ts +232 -0
  28. package/agents/48-lighthouse-auditor.ts +213 -0
  29. package/agents/49-i18n-tester.ts +198 -0
  30. package/agents/50-timezone-tester.ts +173 -0
  31. package/agents/51-error-recovery-tester.ts +155 -0
  32. package/agents/52-offline-mode-tester.ts +180 -0
  33. package/agents/53-graceful-degradation-tester.ts +156 -0
  34. package/agents/54-websocket-tester.ts +151 -0
  35. package/agents/55-realtime-sync-tester.ts +194 -0
  36. package/agents/56-file-upload-tester.ts +194 -0
  37. package/agents/57-export-tester.ts +174 -0
  38. package/agents/58-payment-flow-tester.ts +183 -0
  39. package/agents/59-ssl-tls-auditor.ts +141 -0
  40. package/agents/60-dns-cdn-tester.ts +117 -0
  41. package/agents/61-docker-health-checker.ts +111 -0
  42. package/agents/62-env-config-validator.ts +152 -0
  43. package/agents/63-log-quality-auditor.ts +136 -0
  44. package/agents/64-analytics-tracker-tester.ts +165 -0
  45. package/agents/65-gdpr-compliance-tester.ts +215 -0
  46. package/agents/66-soc2-control-validator.ts +210 -0
  47. package/agents/67-wcag-aaa-tester.ts +241 -0
  48. package/agents/68-dead-code-detector.ts +135 -0
  49. package/agents/69-type-safety-auditor.ts +164 -0
  50. package/agents/70-complexity-analyzer.ts +179 -0
  51. package/agents/__tests__/24-signup-onboarding-tester.test.ts +274 -0
  52. package/agents/__tests__/25-crud-flow-tester.test.ts +322 -0
  53. package/agents/__tests__/26-form-validator.test.ts +345 -0
  54. package/agents/__tests__/27-search-filter-tester.test.ts +311 -0
  55. package/agents/__tests__/28-navigation-routing-tester.test.ts +328 -0
  56. package/agents/__tests__/29-responsive-interaction-tester.test.ts +297 -0
  57. package/agents/__tests__/30-multi-user-scenario-tester.test.ts +328 -0
  58. package/agents/__tests__/31-load-tester.test.ts +189 -0
  59. package/agents/__tests__/32-memory-leak-detector.test.ts +251 -0
  60. package/agents/__tests__/33-bundle-analyzer.test.ts +237 -0
  61. package/agents/__tests__/34-xss-scanner.test.ts +258 -0
  62. package/agents/__tests__/35-csrf-tester.test.ts +200 -0
  63. package/agents/__tests__/36-auth-fuzzer.test.ts +214 -0
  64. package/agents/__tests__/37-dependency-scanner.test.ts +266 -0
  65. package/agents/__tests__/38-secrets-scanner.test.ts +224 -0
  66. package/agents/__tests__/39-api-contract-tester.test.ts +312 -0
  67. package/agents/__tests__/40-rate-limit-tester.test.ts +192 -0
  68. package/agents/__tests__/41-api-pagination-tester.test.ts +198 -0
  69. package/agents/__tests__/42-graphql-tester.test.ts +252 -0
  70. package/agents/__tests__/43-data-consistency-checker.test.ts +232 -0
  71. package/agents/__tests__/44-backup-recovery-tester.test.ts +222 -0
  72. package/agents/__tests__/45-data-privacy-scanner.test.ts +223 -0
  73. package/agents/__tests__/46-seo-auditor.test.ts +261 -0
  74. package/agents/__tests__/47-social-preview-tester.test.ts +245 -0
  75. package/agents/__tests__/48-lighthouse-auditor.test.ts +276 -0
  76. package/agents/__tests__/49-i18n-tester.test.ts +201 -0
  77. package/agents/__tests__/50-timezone-tester.test.ts +172 -0
  78. package/agents/__tests__/51-error-recovery-tester.test.ts +162 -0
  79. package/agents/__tests__/52-offline-mode-tester.test.ts +164 -0
  80. package/agents/__tests__/53-graceful-degradation-tester.test.ts +168 -0
  81. package/agents/__tests__/54-websocket-tester.test.ts +157 -0
  82. package/agents/__tests__/55-realtime-sync-tester.test.ts +181 -0
  83. package/agents/__tests__/56-file-upload-tester.test.ts +172 -0
  84. package/agents/__tests__/57-export-tester.test.ts +169 -0
  85. package/agents/__tests__/58-payment-flow-tester.test.ts +182 -0
  86. package/agents/__tests__/59-ssl-tls-auditor.test.ts +179 -0
  87. package/agents/__tests__/60-dns-cdn-tester.test.ts +176 -0
  88. package/agents/__tests__/61-docker-health-checker.test.ts +150 -0
  89. package/agents/__tests__/62-env-config-validator.test.ts +166 -0
  90. package/agents/__tests__/63-log-quality-auditor.test.ts +175 -0
  91. package/agents/__tests__/64-analytics-tracker-tester.test.ts +158 -0
  92. package/agents/__tests__/65-gdpr-compliance-tester.test.ts +174 -0
  93. package/agents/__tests__/66-soc2-control-validator.test.ts +183 -0
  94. package/agents/__tests__/67-wcag-aaa-tester.test.ts +190 -0
  95. package/agents/__tests__/68-dead-code-detector.test.ts +174 -0
  96. package/agents/__tests__/69-type-safety-auditor.test.ts +173 -0
  97. package/agents/__tests__/70-complexity-analyzer.test.ts +177 -0
  98. package/agents/__tests__/registry.test.ts +13 -13
  99. package/agents/base-agent.ts +8 -0
  100. package/agents/registry.ts +171 -28
  101. package/core/__tests__/integration.test.ts +4 -4
  102. package/core/__tests__/orchestrator.test.ts +17 -16
  103. package/core/cli.ts +128 -6
  104. package/core/license.ts +208 -211
  105. package/core/orchestrator.ts +78 -5
  106. package/dist/agents/15-regression-sentinel.d.ts +2 -1
  107. package/dist/agents/15-regression-sentinel.d.ts.map +1 -1
  108. package/dist/agents/15-regression-sentinel.js +2 -2
  109. package/dist/agents/15-regression-sentinel.js.map +1 -1
  110. package/dist/agents/24-signup-onboarding-tester.d.ts +35 -0
  111. package/dist/agents/24-signup-onboarding-tester.d.ts.map +1 -0
  112. package/dist/agents/24-signup-onboarding-tester.js +357 -0
  113. package/dist/agents/24-signup-onboarding-tester.js.map +1 -0
  114. package/dist/agents/25-crud-flow-tester.d.ts +11 -0
  115. package/dist/agents/25-crud-flow-tester.d.ts.map +1 -0
  116. package/dist/agents/25-crud-flow-tester.js +253 -0
  117. package/dist/agents/25-crud-flow-tester.js.map +1 -0
  118. package/dist/agents/26-form-validator.d.ts +12 -0
  119. package/dist/agents/26-form-validator.d.ts.map +1 -0
  120. package/dist/agents/26-form-validator.js +257 -0
  121. package/dist/agents/26-form-validator.js.map +1 -0
  122. package/dist/agents/27-search-filter-tester.d.ts +20 -0
  123. package/dist/agents/27-search-filter-tester.d.ts.map +1 -0
  124. package/dist/agents/27-search-filter-tester.js +267 -0
  125. package/dist/agents/27-search-filter-tester.js.map +1 -0
  126. package/dist/agents/28-navigation-routing-tester.d.ts +32 -0
  127. package/dist/agents/28-navigation-routing-tester.d.ts.map +1 -0
  128. package/dist/agents/28-navigation-routing-tester.js +363 -0
  129. package/dist/agents/28-navigation-routing-tester.js.map +1 -0
  130. package/dist/agents/29-responsive-interaction-tester.d.ts +26 -0
  131. package/dist/agents/29-responsive-interaction-tester.d.ts.map +1 -0
  132. package/dist/agents/29-responsive-interaction-tester.js +272 -0
  133. package/dist/agents/29-responsive-interaction-tester.js.map +1 -0
  134. package/dist/agents/30-multi-user-scenario-tester.d.ts +24 -0
  135. package/dist/agents/30-multi-user-scenario-tester.d.ts.map +1 -0
  136. package/dist/agents/30-multi-user-scenario-tester.js +254 -0
  137. package/dist/agents/30-multi-user-scenario-tester.js.map +1 -0
  138. package/dist/agents/31-load-tester.d.ts +12 -0
  139. package/dist/agents/31-load-tester.d.ts.map +1 -0
  140. package/dist/agents/31-load-tester.js +110 -0
  141. package/dist/agents/31-load-tester.js.map +1 -0
  142. package/dist/agents/32-memory-leak-detector.d.ts +12 -0
  143. package/dist/agents/32-memory-leak-detector.d.ts.map +1 -0
  144. package/dist/agents/32-memory-leak-detector.js +167 -0
  145. package/dist/agents/32-memory-leak-detector.js.map +1 -0
  146. package/dist/agents/33-bundle-analyzer.d.ts +10 -0
  147. package/dist/agents/33-bundle-analyzer.d.ts.map +1 -0
  148. package/dist/agents/33-bundle-analyzer.js +111 -0
  149. package/dist/agents/33-bundle-analyzer.js.map +1 -0
  150. package/dist/agents/34-xss-scanner.d.ts +11 -0
  151. package/dist/agents/34-xss-scanner.d.ts.map +1 -0
  152. package/dist/agents/34-xss-scanner.js +164 -0
  153. package/dist/agents/34-xss-scanner.js.map +1 -0
  154. package/dist/agents/35-csrf-tester.d.ts +11 -0
  155. package/dist/agents/35-csrf-tester.d.ts.map +1 -0
  156. package/dist/agents/35-csrf-tester.js +70 -0
  157. package/dist/agents/35-csrf-tester.js.map +1 -0
  158. package/dist/agents/36-auth-fuzzer.d.ts +13 -0
  159. package/dist/agents/36-auth-fuzzer.d.ts.map +1 -0
  160. package/dist/agents/36-auth-fuzzer.js +163 -0
  161. package/dist/agents/36-auth-fuzzer.js.map +1 -0
  162. package/dist/agents/37-dependency-scanner.d.ts +11 -0
  163. package/dist/agents/37-dependency-scanner.d.ts.map +1 -0
  164. package/dist/agents/37-dependency-scanner.js +139 -0
  165. package/dist/agents/37-dependency-scanner.js.map +1 -0
  166. package/dist/agents/38-secrets-scanner.d.ts +11 -0
  167. package/dist/agents/38-secrets-scanner.d.ts.map +1 -0
  168. package/dist/agents/38-secrets-scanner.js +116 -0
  169. package/dist/agents/38-secrets-scanner.js.map +1 -0
  170. package/dist/agents/39-api-contract-tester.d.ts +12 -0
  171. package/dist/agents/39-api-contract-tester.d.ts.map +1 -0
  172. package/dist/agents/39-api-contract-tester.js +142 -0
  173. package/dist/agents/39-api-contract-tester.js.map +1 -0
  174. package/dist/agents/40-rate-limit-tester.d.ts +12 -0
  175. package/dist/agents/40-rate-limit-tester.d.ts.map +1 -0
  176. package/dist/agents/40-rate-limit-tester.js +79 -0
  177. package/dist/agents/40-rate-limit-tester.js.map +1 -0
  178. package/dist/agents/41-api-pagination-tester.d.ts +12 -0
  179. package/dist/agents/41-api-pagination-tester.d.ts.map +1 -0
  180. package/dist/agents/41-api-pagination-tester.js +79 -0
  181. package/dist/agents/41-api-pagination-tester.js.map +1 -0
  182. package/dist/agents/42-graphql-tester.d.ts +13 -0
  183. package/dist/agents/42-graphql-tester.d.ts.map +1 -0
  184. package/dist/agents/42-graphql-tester.js +187 -0
  185. package/dist/agents/42-graphql-tester.js.map +1 -0
  186. package/dist/agents/43-data-consistency-checker.d.ts +11 -0
  187. package/dist/agents/43-data-consistency-checker.d.ts.map +1 -0
  188. package/dist/agents/43-data-consistency-checker.js +176 -0
  189. package/dist/agents/43-data-consistency-checker.js.map +1 -0
  190. package/dist/agents/44-backup-recovery-tester.d.ts +11 -0
  191. package/dist/agents/44-backup-recovery-tester.d.ts.map +1 -0
  192. package/dist/agents/44-backup-recovery-tester.js +128 -0
  193. package/dist/agents/44-backup-recovery-tester.js.map +1 -0
  194. package/dist/agents/45-data-privacy-scanner.d.ts +11 -0
  195. package/dist/agents/45-data-privacy-scanner.d.ts.map +1 -0
  196. package/dist/agents/45-data-privacy-scanner.js +100 -0
  197. package/dist/agents/45-data-privacy-scanner.js.map +1 -0
  198. package/dist/agents/46-seo-auditor.d.ts +12 -0
  199. package/dist/agents/46-seo-auditor.d.ts.map +1 -0
  200. package/dist/agents/46-seo-auditor.js +275 -0
  201. package/dist/agents/46-seo-auditor.js.map +1 -0
  202. package/dist/agents/47-social-preview-tester.d.ts +11 -0
  203. package/dist/agents/47-social-preview-tester.d.ts.map +1 -0
  204. package/dist/agents/47-social-preview-tester.js +219 -0
  205. package/dist/agents/47-social-preview-tester.js.map +1 -0
  206. package/dist/agents/48-lighthouse-auditor.d.ts +11 -0
  207. package/dist/agents/48-lighthouse-auditor.d.ts.map +1 -0
  208. package/dist/agents/48-lighthouse-auditor.js +192 -0
  209. package/dist/agents/48-lighthouse-auditor.js.map +1 -0
  210. package/dist/agents/49-i18n-tester.d.ts +13 -0
  211. package/dist/agents/49-i18n-tester.d.ts.map +1 -0
  212. package/dist/agents/49-i18n-tester.js +172 -0
  213. package/dist/agents/49-i18n-tester.js.map +1 -0
  214. package/dist/agents/50-timezone-tester.d.ts +11 -0
  215. package/dist/agents/50-timezone-tester.d.ts.map +1 -0
  216. package/dist/agents/50-timezone-tester.js +152 -0
  217. package/dist/agents/50-timezone-tester.js.map +1 -0
  218. package/dist/agents/51-error-recovery-tester.d.ts +11 -0
  219. package/dist/agents/51-error-recovery-tester.d.ts.map +1 -0
  220. package/dist/agents/51-error-recovery-tester.js +134 -0
  221. package/dist/agents/51-error-recovery-tester.js.map +1 -0
  222. package/dist/agents/52-offline-mode-tester.d.ts +12 -0
  223. package/dist/agents/52-offline-mode-tester.d.ts.map +1 -0
  224. package/dist/agents/52-offline-mode-tester.js +161 -0
  225. package/dist/agents/52-offline-mode-tester.js.map +1 -0
  226. package/dist/agents/53-graceful-degradation-tester.d.ts +12 -0
  227. package/dist/agents/53-graceful-degradation-tester.d.ts.map +1 -0
  228. package/dist/agents/53-graceful-degradation-tester.js +130 -0
  229. package/dist/agents/53-graceful-degradation-tester.js.map +1 -0
  230. package/dist/agents/54-websocket-tester.d.ts +10 -0
  231. package/dist/agents/54-websocket-tester.d.ts.map +1 -0
  232. package/dist/agents/54-websocket-tester.js +132 -0
  233. package/dist/agents/54-websocket-tester.js.map +1 -0
  234. package/dist/agents/55-realtime-sync-tester.d.ts +11 -0
  235. package/dist/agents/55-realtime-sync-tester.d.ts.map +1 -0
  236. package/dist/agents/55-realtime-sync-tester.js +175 -0
  237. package/dist/agents/55-realtime-sync-tester.js.map +1 -0
  238. package/dist/agents/56-file-upload-tester.d.ts +12 -0
  239. package/dist/agents/56-file-upload-tester.d.ts.map +1 -0
  240. package/dist/agents/56-file-upload-tester.js +166 -0
  241. package/dist/agents/56-file-upload-tester.js.map +1 -0
  242. package/dist/agents/57-export-tester.d.ts +11 -0
  243. package/dist/agents/57-export-tester.d.ts.map +1 -0
  244. package/dist/agents/57-export-tester.js +155 -0
  245. package/dist/agents/57-export-tester.js.map +1 -0
  246. package/dist/agents/58-payment-flow-tester.d.ts +11 -0
  247. package/dist/agents/58-payment-flow-tester.d.ts.map +1 -0
  248. package/dist/agents/58-payment-flow-tester.js +159 -0
  249. package/dist/agents/58-payment-flow-tester.js.map +1 -0
  250. package/dist/agents/59-ssl-tls-auditor.d.ts +10 -0
  251. package/dist/agents/59-ssl-tls-auditor.d.ts.map +1 -0
  252. package/dist/agents/59-ssl-tls-auditor.js +132 -0
  253. package/dist/agents/59-ssl-tls-auditor.js.map +1 -0
  254. package/dist/agents/60-dns-cdn-tester.d.ts +10 -0
  255. package/dist/agents/60-dns-cdn-tester.d.ts.map +1 -0
  256. package/dist/agents/60-dns-cdn-tester.js +105 -0
  257. package/dist/agents/60-dns-cdn-tester.js.map +1 -0
  258. package/dist/agents/61-docker-health-checker.d.ts +10 -0
  259. package/dist/agents/61-docker-health-checker.d.ts.map +1 -0
  260. package/dist/agents/61-docker-health-checker.js +95 -0
  261. package/dist/agents/61-docker-health-checker.js.map +1 -0
  262. package/dist/agents/62-env-config-validator.d.ts +10 -0
  263. package/dist/agents/62-env-config-validator.d.ts.map +1 -0
  264. package/dist/agents/62-env-config-validator.js +132 -0
  265. package/dist/agents/62-env-config-validator.js.map +1 -0
  266. package/dist/agents/63-log-quality-auditor.d.ts +9 -0
  267. package/dist/agents/63-log-quality-auditor.d.ts.map +1 -0
  268. package/dist/agents/63-log-quality-auditor.js +121 -0
  269. package/dist/agents/63-log-quality-auditor.js.map +1 -0
  270. package/dist/agents/64-analytics-tracker-tester.d.ts +10 -0
  271. package/dist/agents/64-analytics-tracker-tester.d.ts.map +1 -0
  272. package/dist/agents/64-analytics-tracker-tester.js +146 -0
  273. package/dist/agents/64-analytics-tracker-tester.js.map +1 -0
  274. package/dist/agents/65-gdpr-compliance-tester.d.ts +13 -0
  275. package/dist/agents/65-gdpr-compliance-tester.d.ts.map +1 -0
  276. package/dist/agents/65-gdpr-compliance-tester.js +186 -0
  277. package/dist/agents/65-gdpr-compliance-tester.js.map +1 -0
  278. package/dist/agents/66-soc2-control-validator.d.ts +14 -0
  279. package/dist/agents/66-soc2-control-validator.d.ts.map +1 -0
  280. package/dist/agents/66-soc2-control-validator.js +178 -0
  281. package/dist/agents/66-soc2-control-validator.js.map +1 -0
  282. package/dist/agents/67-wcag-aaa-tester.d.ts +13 -0
  283. package/dist/agents/67-wcag-aaa-tester.d.ts.map +1 -0
  284. package/dist/agents/67-wcag-aaa-tester.js +207 -0
  285. package/dist/agents/67-wcag-aaa-tester.js.map +1 -0
  286. package/dist/agents/68-dead-code-detector.d.ts +9 -0
  287. package/dist/agents/68-dead-code-detector.d.ts.map +1 -0
  288. package/dist/agents/68-dead-code-detector.js +116 -0
  289. package/dist/agents/68-dead-code-detector.js.map +1 -0
  290. package/dist/agents/69-type-safety-auditor.d.ts +9 -0
  291. package/dist/agents/69-type-safety-auditor.d.ts.map +1 -0
  292. package/dist/agents/69-type-safety-auditor.js +148 -0
  293. package/dist/agents/69-type-safety-auditor.js.map +1 -0
  294. package/dist/agents/70-complexity-analyzer.d.ts +10 -0
  295. package/dist/agents/70-complexity-analyzer.d.ts.map +1 -0
  296. package/dist/agents/70-complexity-analyzer.js +154 -0
  297. package/dist/agents/70-complexity-analyzer.js.map +1 -0
  298. package/dist/agents/base-agent.d.ts +3 -1
  299. package/dist/agents/base-agent.d.ts.map +1 -1
  300. package/dist/agents/base-agent.js +7 -1
  301. package/dist/agents/base-agent.js.map +1 -1
  302. package/dist/agents/registry.d.ts +5 -4
  303. package/dist/agents/registry.d.ts.map +1 -1
  304. package/dist/agents/registry.js +170 -29
  305. package/dist/agents/registry.js.map +1 -1
  306. package/dist/clients/agent-mvp.d.ts +66 -0
  307. package/dist/clients/agent-mvp.d.ts.map +1 -0
  308. package/dist/clients/agent-mvp.js +91 -0
  309. package/dist/clients/agent-mvp.js.map +1 -0
  310. package/dist/clients/total-recall.d.ts +37 -0
  311. package/dist/clients/total-recall.d.ts.map +1 -0
  312. package/dist/clients/total-recall.js +224 -0
  313. package/dist/clients/total-recall.js.map +1 -0
  314. package/dist/core/cli.d.ts +3 -0
  315. package/dist/core/cli.d.ts.map +1 -1
  316. package/dist/core/cli.js +122 -6
  317. package/dist/core/cli.js.map +1 -1
  318. package/dist/core/license.js +2 -5
  319. package/dist/core/license.js.map +1 -1
  320. package/dist/core/orchestrator.d.ts +10 -1
  321. package/dist/core/orchestrator.d.ts.map +1 -1
  322. package/dist/core/orchestrator.js +66 -5
  323. package/dist/core/orchestrator.js.map +1 -1
  324. package/package.json +2 -2
@@ -0,0 +1,177 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import type { ValidatedConfig } from '../../core/config';
3
+ import type { Phase } from '../../core/types';
4
+
5
+ function makeConfig(overrides: Partial<ValidatedConfig> = {}): ValidatedConfig {
6
+ return {
7
+ schemaVersion: 1, name: 'test',
8
+ projectRoot: '/fake/project',
9
+ auth: { loginUrl: '/login', credentials: { admin: { email: 'a@t.com', password: 's' } } },
10
+ modules: [{ id: 'dashboard', route: '/dashboard', sidebarIcon: true }],
11
+ environments: { alpha: { baseUrl: 'http://localhost:3000', seed: false } },
12
+ portals: [], breakpoints: [], integrations: [], workers: [], workflows: [],
13
+ accuracy: { enabled: false, decimalPrecision: 2, currencySymbol: '$', timezone: 'UTC' },
14
+ tenancy: { enabled: false, isolationField: 'firmId', testFirms: [] },
15
+ costBudget: { maxPerRun: 100, maxPerAgent: 10, alertThreshold: 0.8, onExceeded: 'abort' },
16
+ agentClassification: { blocking: [], advisory: [] },
17
+ thresholds: { unitCoverage: { lines: 80, functions: 80, branches: 80, statements: 80 }, lighthouse: { accessibility: 90, performance: 90, bestPractices: 90, seo: 90 }, apiResponseTime: 2000, bundleSizeLimit: 500000, maxConsoleErrors: 0 },
18
+ disabledAgents: [], disabledAgentSet: new Set<number>(),
19
+ ...overrides,
20
+ };
21
+ }
22
+
23
+ const fetchMock = vi.fn().mockResolvedValue({ ok: true, status: 200 });
24
+ vi.stubGlobal('fetch', fetchMock);
25
+
26
+ vi.mock('../../helpers/navigation', () => ({
27
+ login: vi.fn().mockResolvedValue(undefined),
28
+ waitForSectionLoad: vi.fn().mockResolvedValue(undefined),
29
+ navigateToSection: vi.fn().mockResolvedValue(undefined),
30
+ switchPortal: vi.fn().mockResolvedValue(undefined),
31
+ }));
32
+
33
+ const existsSyncMock = vi.fn();
34
+ const readFileSyncMock = vi.fn();
35
+ const readdirSyncMock = vi.fn();
36
+
37
+ vi.mock('node:fs', () => ({
38
+ existsSync: (...args: unknown[]) => existsSyncMock(...args),
39
+ readFileSync: (...args: unknown[]) => readFileSyncMock(...args),
40
+ readdirSync: (...args: unknown[]) => readdirSyncMock(...args),
41
+ }));
42
+
43
+ const { ComplexityAnalyzerAgent } = await import('../70-complexity-analyzer');
44
+
45
+ function createAgent(config: ValidatedConfig = makeConfig(), phase: Phase = 'beta') {
46
+ return new ComplexityAnalyzerAgent(config, phase, '/tmp/test-run');
47
+ }
48
+
49
+ describe('ComplexityAnalyzerAgent', () => {
50
+ beforeEach(() => {
51
+ existsSyncMock.mockReset().mockReturnValue(true);
52
+ readFileSyncMock.mockReset();
53
+ readdirSyncMock.mockReset();
54
+ });
55
+
56
+ it('has agentId 70 and correct name', () => {
57
+ const agent = createAgent();
58
+ expect(agent.agentId).toBe(70);
59
+ expect(agent.agentName).toBe('Complexity Analyzer');
60
+ });
61
+
62
+ it('reports no src dir', async () => {
63
+ existsSyncMock.mockReturnValue(false);
64
+ const agent = createAgent();
65
+ const result = await agent.run();
66
+ const finding = result.findings.find(f => f.id.includes('no-src-dir'));
67
+ expect(finding).toBeDefined();
68
+ });
69
+
70
+ it('reports files over 500 lines as low', async () => {
71
+ readdirSyncMock.mockReturnValue([
72
+ { name: 'big.ts', isFile: () => true, isDirectory: () => false },
73
+ ]);
74
+ readFileSyncMock.mockReturnValue(Array(600).fill('const x = 1;').join('\n'));
75
+ const agent = createAgent();
76
+ const result = await agent.run();
77
+ const finding = result.findings.find(f => f.id.includes('long-file'));
78
+ expect(finding).toBeDefined();
79
+ expect(finding!.severity).toBe('low');
80
+ });
81
+
82
+ it('reports files over 1000 lines as medium', async () => {
83
+ readdirSyncMock.mockReturnValue([
84
+ { name: 'huge.ts', isFile: () => true, isDirectory: () => false },
85
+ ]);
86
+ readFileSyncMock.mockReturnValue(Array(1100).fill('const x = 1;').join('\n'));
87
+ const agent = createAgent();
88
+ const result = await agent.run();
89
+ const finding = result.findings.find(f => f.id.includes('very-long-file'));
90
+ expect(finding).toBeDefined();
91
+ expect(finding!.severity).toBe('medium');
92
+ });
93
+
94
+ it('reports complex functions with >15 branches', async () => {
95
+ readdirSyncMock.mockReturnValue([
96
+ { name: 'complex.ts', isFile: () => true, isDirectory: () => false },
97
+ ]);
98
+ const branches = Array(20).fill(' if (x) { y++; }').join('\n');
99
+ readFileSyncMock.mockReturnValue(`function complexFn() {\n${branches}\n}`);
100
+ const agent = createAgent();
101
+ const result = await agent.run();
102
+ const finding = result.findings.find(f => f.id.includes('complex-function'));
103
+ expect(finding).toBeDefined();
104
+ expect(finding!.severity).toBe('medium');
105
+ });
106
+
107
+ it('no findings for simple code', async () => {
108
+ readdirSyncMock.mockReturnValue([
109
+ { name: 'simple.ts', isFile: () => true, isDirectory: () => false },
110
+ ]);
111
+ readFileSyncMock.mockReturnValue('function simple() {\n return 1;\n}');
112
+ const agent = createAgent();
113
+ const result = await agent.run();
114
+ const complexFinding = result.findings.find(f => f.id.includes('complex-function'));
115
+ expect(complexFinding).toBeUndefined();
116
+ });
117
+
118
+ it('skips test files', async () => {
119
+ readdirSyncMock.mockReturnValue([
120
+ { name: 'app.test.ts', isFile: () => true, isDirectory: () => false },
121
+ ]);
122
+ const agent = createAgent();
123
+ const result = await agent.run();
124
+ expect(result.status).toBeDefined();
125
+ });
126
+
127
+ it('limits complex function findings to 10', async () => {
128
+ readdirSyncMock.mockReturnValue([
129
+ { name: 'complex.ts', isFile: () => true, isDirectory: () => false },
130
+ ]);
131
+ const funcs = Array.from({ length: 15 }, (_, i) => {
132
+ const branches = Array(20).fill(' if (x) { y++; }').join('\n');
133
+ return `function fn${i}() {\n${branches}\n}`;
134
+ }).join('\n');
135
+ readFileSyncMock.mockReturnValue(funcs);
136
+ const agent = createAgent();
137
+ const result = await agent.run();
138
+ const complexFindings = result.findings.filter(f => f.id.match(/complex-function-\d+/));
139
+ expect(complexFindings.length).toBe(10);
140
+ const summary = result.findings.find(f => f.id.includes('complex-functions-summary'));
141
+ expect(summary).toBeDefined();
142
+ });
143
+
144
+ it('adds evidence with scan stats', async () => {
145
+ readdirSyncMock.mockReturnValue([
146
+ { name: 'app.ts', isFile: () => true, isDirectory: () => false },
147
+ ]);
148
+ readFileSyncMock.mockReturnValue('const x = 1;');
149
+ const agent = createAgent();
150
+ const result = await agent.run();
151
+ expect(result.evidence.length).toBeGreaterThan(0);
152
+ });
153
+
154
+ it('recurses into subdirectories', async () => {
155
+ readdirSyncMock
156
+ .mockReturnValueOnce([
157
+ { name: 'sub', isFile: () => false, isDirectory: () => true },
158
+ ])
159
+ .mockReturnValueOnce([
160
+ { name: 'helper.ts', isFile: () => true, isDirectory: () => false },
161
+ ]);
162
+ readFileSyncMock.mockReturnValue('const x = 1;');
163
+ const agent = createAgent();
164
+ const result = await agent.run();
165
+ expect(result.status).toBeDefined();
166
+ });
167
+
168
+ it('handles empty file', async () => {
169
+ readdirSyncMock.mockReturnValue([
170
+ { name: 'empty.ts', isFile: () => true, isDirectory: () => false },
171
+ ]);
172
+ readFileSyncMock.mockReturnValue('');
173
+ const agent = createAgent();
174
+ const result = await agent.run();
175
+ expect(result.status).toBeDefined();
176
+ });
177
+ });
@@ -7,8 +7,8 @@ import {
7
7
  } from '../registry';
8
8
 
9
9
  describe('AGENT_TIERS', () => {
10
- it('should contain exactly 23 agents', () => {
11
- expect(Object.keys(AGENT_TIERS)).toHaveLength(23);
10
+ it('should contain exactly 70 agents', () => {
11
+ expect(Object.keys(AGENT_TIERS)).toHaveLength(70);
12
12
  });
13
13
 
14
14
  it('should have 8 free-tier agents', () => {
@@ -16,14 +16,14 @@ describe('AGENT_TIERS', () => {
16
16
  expect(freeAgents).toHaveLength(8);
17
17
  });
18
18
 
19
- it('should have 9 pro-tier agents', () => {
19
+ it('should have 26 pro-tier agents', () => {
20
20
  const proAgents = Object.entries(AGENT_TIERS).filter(([, t]) => t === 'pro');
21
- expect(proAgents).toHaveLength(9);
21
+ expect(proAgents).toHaveLength(26);
22
22
  });
23
23
 
24
- it('should have 6 enterprise-tier agents', () => {
24
+ it('should have 36 enterprise-tier agents', () => {
25
25
  const entAgents = Object.entries(AGENT_TIERS).filter(([, t]) => t === 'enterprise');
26
- expect(entAgents).toHaveLength(6);
26
+ expect(entAgents).toHaveLength(36);
27
27
  });
28
28
 
29
29
  it('should classify known agents correctly', () => {
@@ -52,8 +52,8 @@ describe('getAgentTier', () => {
52
52
 
53
53
  describe('isAgentAvailable', () => {
54
54
  const freeAgents = [1, 2, 3, 4, 5, 9, 10, 11];
55
- const proAgents = [6, 7, 8, 12, 13, 15, 21, 22, 23];
56
- const enterpriseAgents = [14, 16, 17, 18, 19, 20];
55
+ const proAgents = [6, 7, 8, 12, 13, 15, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 37, 38, 46, 48, 62, 68, 69, 70];
56
+ const enterpriseAgents = [14, 16, 17, 18, 19, 20, 30, 34, 35, 36, 39, 40, 41, 42, 43, 44, 45, 47, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 63, 64, 65, 66, 67];
57
57
 
58
58
  describe('free license', () => {
59
59
  it('should allow free-tier agents', () => {
@@ -113,10 +113,10 @@ describe('isAgentAvailable', () => {
113
113
  // ---------------------------------------------------------------------------
114
114
 
115
115
  describe('registerAllAgents', () => {
116
- // We need to test that registerAllAgents creates 23 agents and registers them all.
116
+ // We need to test that registerAllAgents creates 70 agents and registers them all.
117
117
  // We mock the orchestrator's registerAgent method.
118
118
 
119
- it('registers all 23 agents with the orchestrator', async () => {
119
+ it('registers all 70 agents with the orchestrator', async () => {
120
120
  // We need to dynamically import to avoid circular dependencies with mocked modules
121
121
  // Instead, test the function signature by checking it registers the right count
122
122
  const { registerAllAgents } = await import('../registry');
@@ -158,13 +158,13 @@ describe('registerAllAgents', () => {
158
158
  '/tmp/run',
159
159
  );
160
160
 
161
- expect(mockOrchestrator.registerAgent).toHaveBeenCalledTimes(23);
161
+ expect(mockOrchestrator.registerAgent).toHaveBeenCalledTimes(70);
162
162
 
163
- // Verify agent IDs 1-23 are all registered
163
+ // Verify agent IDs 1-70 are all registered
164
164
  const registeredIds = mockOrchestrator.registerAgent.mock.calls.map(
165
165
  (call: unknown[]) => call[0],
166
166
  );
167
- for (let i = 1; i <= 23; i++) {
167
+ for (let i = 1; i <= 70; i++) {
168
168
  expect(registeredIds).toContain(i);
169
169
  }
170
170
  });
@@ -1,11 +1,13 @@
1
1
  import type { AgentResult, Finding, Phase, EvidenceItem } from '../core/types';
2
2
  import type { ValidatedConfig } from '../core/config';
3
+ import type { TotalRecallClient } from '../clients/total-recall';
3
4
 
4
5
  export abstract class BaseAgent {
5
6
  constructor(
6
7
  protected readonly config: ValidatedConfig,
7
8
  protected readonly phase: Phase,
8
9
  protected readonly runDir: string,
10
+ protected readonly totalRecall?: TotalRecallClient,
9
11
  ) {}
10
12
 
11
13
  abstract readonly agentId: number;
@@ -16,6 +18,12 @@ export abstract class BaseAgent {
16
18
  try {
17
19
  await this.preFlight();
18
20
  const findings = await this.execute();
21
+
22
+ // Store findings in Total Recall if available (fire-and-forget)
23
+ if (this.totalRecall && findings.length > 0) {
24
+ await this.totalRecall.storeFindings(this.agentId, this.agentName, findings).catch(() => {});
25
+ }
26
+
19
27
  const completedAt = new Date().toISOString();
20
28
  return {
21
29
  agentId: this.agentId,
@@ -1,6 +1,7 @@
1
1
  import type { ValidatedConfig } from '../core/config';
2
2
  import type { Phase } from '../core/types';
3
3
  import type { Orchestrator } from '../core/orchestrator';
4
+ import type { TotalRecallClient } from '../clients/total-recall';
4
5
 
5
6
  /** License tier type used for agent gating */
6
7
  export type LicenseTier = 'free' | 'pro' | 'enterprise';
@@ -8,8 +9,8 @@ export type LicenseTier = 'free' | 'pro' | 'enterprise';
8
9
  /**
9
10
  * Maps each agent number to its license tier.
10
11
  * - free (8 agents): core testing pipeline
11
- * - pro (9 agents): advanced testing capabilities
12
- * - enterprise (6 agents): full platform auditing
12
+ * - pro (26 agents): advanced testing capabilities
13
+ * - enterprise (36 agents): full platform auditing
13
14
  */
14
15
  export const AGENT_TIERS: Record<number, LicenseTier> = {
15
16
  /* ── Free tier (8) ── */
@@ -22,7 +23,7 @@ export const AGENT_TIERS: Record<number, LicenseTier> = {
22
23
  10: 'free', // Reporter
23
24
  11: 'free', // Fixer
24
25
 
25
- /* ── Pro tier (9) ── */
26
+ /* ── Pro tier (26) ── */
26
27
  6: 'pro', // API Exerciser
27
28
  7: 'pro', // Security Scout
28
29
  8: 'pro', // A11y Guardian
@@ -32,14 +33,61 @@ export const AGENT_TIERS: Record<number, LicenseTier> = {
32
33
  21: 'pro', // State & Session Tester
33
34
  22: 'pro', // Email Notification Verifier
34
35
  23: 'pro', // Migration Tester
36
+ 24: 'pro', // Signup & Onboarding Tester
37
+ 25: 'pro', // CRUD Flow Tester
38
+ 26: 'pro', // Form Validator
39
+ 27: 'pro', // Search & Filter Tester
40
+ 28: 'pro', // Navigation & Routing Tester
41
+ 29: 'pro', // Responsive Interaction Tester
42
+ 31: 'pro', // Load Tester
43
+ 32: 'pro', // Memory Leak Detector
44
+ 33: 'pro', // Bundle Analyzer
45
+ 37: 'pro', // Dependency Scanner
46
+ 38: 'pro', // Secrets Scanner
47
+ 46: 'pro', // SEO Auditor
48
+ 48: 'pro', // Lighthouse Auditor
49
+ 62: 'pro', // Env Config Validator
50
+ 68: 'pro', // Dead Code Detector
51
+ 69: 'pro', // Type Safety Auditor
52
+ 70: 'pro', // Complexity Analyzer
35
53
 
36
- /* ── Enterprise tier (6) ── */
54
+ /* ── Enterprise tier (36) ── */
37
55
  14: 'enterprise', // Data Integrity Auditor
38
56
  16: 'enterprise', // Chaos Agent
39
57
  17: 'enterprise', // Documentation Validator
40
58
  18: 'enterprise', // Integration Watchdog
41
59
  19: 'enterprise', // Tenant Isolation Auditor
42
60
  20: 'enterprise', // Workflow Completion Tester
61
+ 30: 'enterprise', // Multi-User Scenario Tester
62
+ 34: 'enterprise', // XSS Scanner
63
+ 35: 'enterprise', // CSRF Tester
64
+ 36: 'enterprise', // Auth Fuzzer
65
+ 39: 'enterprise', // API Contract Tester
66
+ 40: 'enterprise', // Rate Limit Tester
67
+ 41: 'enterprise', // API Pagination Tester
68
+ 42: 'enterprise', // GraphQL Tester
69
+ 43: 'enterprise', // Data Consistency Checker
70
+ 44: 'enterprise', // Backup Recovery Tester
71
+ 45: 'enterprise', // Data Privacy Scanner
72
+ 47: 'enterprise', // Social Preview Tester
73
+ 49: 'enterprise', // i18n Tester
74
+ 50: 'enterprise', // Timezone Tester
75
+ 51: 'enterprise', // Error Recovery Tester
76
+ 52: 'enterprise', // Offline Mode Tester
77
+ 53: 'enterprise', // Graceful Degradation Tester
78
+ 54: 'enterprise', // WebSocket Tester
79
+ 55: 'enterprise', // Realtime Sync Tester
80
+ 56: 'enterprise', // File Upload Tester
81
+ 57: 'enterprise', // Export Tester
82
+ 58: 'enterprise', // Payment Flow Tester
83
+ 59: 'enterprise', // SSL/TLS Auditor
84
+ 60: 'enterprise', // DNS/CDN Tester
85
+ 61: 'enterprise', // Docker Health Checker
86
+ 63: 'enterprise', // Log Quality Auditor
87
+ 64: 'enterprise', // Analytics Tracker Tester
88
+ 65: 'enterprise', // GDPR Compliance Tester
89
+ 66: 'enterprise', // SOC2 Control Validator
90
+ 67: 'enterprise', // WCAG AAA Tester
43
91
  };
44
92
 
45
93
  /** Returns the tier classification for a given agent number. */
@@ -91,9 +139,56 @@ import { WorkflowCompletionTesterAgent } from './20-workflow-completion-tester';
91
139
  import { StateSessionTesterAgent } from './21-state-session-tester';
92
140
  import { EmailNotificationVerifierAgent } from './22-email-notification-verifier';
93
141
  import { MigrationTesterAgent } from './23-migration-tester';
142
+ import { CrudFlowTesterAgent } from './25-crud-flow-tester';
143
+ import { FormValidatorAgent } from './26-form-validator';
144
+ import { SignupOnboardingTesterAgent } from './24-signup-onboarding-tester';
145
+ import { NavigationRoutingTesterAgent } from './28-navigation-routing-tester';
146
+ import { SearchFilterTesterAgent } from './27-search-filter-tester';
147
+ import { ResponsiveInteractionTesterAgent } from './29-responsive-interaction-tester';
148
+ import { MultiUserScenarioTesterAgent } from './30-multi-user-scenario-tester';
149
+ import { LoadTesterAgent } from './31-load-tester';
150
+ import { MemoryLeakDetectorAgent } from './32-memory-leak-detector';
151
+ import { BundleAnalyzerAgent } from './33-bundle-analyzer';
152
+ import { XssScannerAgent } from './34-xss-scanner';
153
+ import { CsrfTesterAgent } from './35-csrf-tester';
154
+ import { AuthFuzzerAgent } from './36-auth-fuzzer';
155
+ import { DependencyScannerAgent } from './37-dependency-scanner';
156
+ import { SecretsScannerAgent } from './38-secrets-scanner';
157
+ import { ApiContractTesterAgent } from './39-api-contract-tester';
158
+ import { RateLimitTesterAgent } from './40-rate-limit-tester';
159
+ import { ApiPaginationTesterAgent } from './41-api-pagination-tester';
160
+ import { GraphqlTesterAgent } from './42-graphql-tester';
161
+ import { DataConsistencyCheckerAgent } from './43-data-consistency-checker';
162
+ import { BackupRecoveryTesterAgent } from './44-backup-recovery-tester';
163
+ import { DataPrivacyScannerAgent } from './45-data-privacy-scanner';
164
+ import { SeoAuditorAgent } from './46-seo-auditor';
165
+ import { SocialPreviewTesterAgent } from './47-social-preview-tester';
166
+ import { LighthouseAuditorAgent } from './48-lighthouse-auditor';
167
+ import { I18nTesterAgent } from './49-i18n-tester';
168
+ import { TimezoneTesterAgent } from './50-timezone-tester';
169
+ import { ErrorRecoveryTesterAgent } from './51-error-recovery-tester';
170
+ import { OfflineModeTesterAgent } from './52-offline-mode-tester';
171
+ import { GracefulDegradationTesterAgent } from './53-graceful-degradation-tester';
172
+ import { WebSocketTesterAgent } from './54-websocket-tester';
173
+ import { RealtimeSyncTesterAgent } from './55-realtime-sync-tester';
174
+ import { FileUploadTesterAgent } from './56-file-upload-tester';
175
+ import { ExportTesterAgent } from './57-export-tester';
176
+ import { PaymentFlowTesterAgent } from './58-payment-flow-tester';
177
+ import { SslTlsAuditorAgent } from './59-ssl-tls-auditor';
178
+ import { DnsCdnTesterAgent } from './60-dns-cdn-tester';
179
+ import { DockerHealthCheckerAgent } from './61-docker-health-checker';
180
+ import { EnvConfigValidatorAgent } from './62-env-config-validator';
181
+ import { LogQualityAuditorAgent } from './63-log-quality-auditor';
182
+ import { AnalyticsTrackerTesterAgent } from './64-analytics-tracker-tester';
183
+ import { GdprComplianceTesterAgent } from './65-gdpr-compliance-tester';
184
+ import { Soc2ControlValidatorAgent } from './66-soc2-control-validator';
185
+ import { WcagAaaTesterAgent } from './67-wcag-aaa-tester';
186
+ import { DeadCodeDetectorAgent } from './68-dead-code-detector';
187
+ import { TypeSafetyAuditorAgent } from './69-type-safety-auditor';
188
+ import { ComplexityAnalyzerAgent } from './70-complexity-analyzer';
94
189
 
95
190
  /**
96
- * Register all 23 agents with the orchestrator.
191
+ * Register all 70 agents with the orchestrator.
97
192
  * Each agent is instantiated with the validated config, phase, and run directory.
98
193
  * Since agents may run in different phases, we register them for all phases
99
194
  * and the orchestrator handles dispatching only the ones needed per phase.
@@ -103,31 +198,79 @@ export function registerAllAgents(
103
198
  config: ValidatedConfig,
104
199
  phase: Phase,
105
200
  runDir: string,
201
+ totalRecall?: TotalRecallClient,
106
202
  ): void {
107
203
  const agents = [
108
- new AnalystAgent(config, phase, runDir),
109
- new SeedArchitectAgent(config, phase, runDir),
110
- new TestGeneratorAgent(config, phase, runDir),
111
- new UnitRunnerAgent(config, phase, runDir),
112
- new BrowserCrawlerAgent(config, phase, runDir),
113
- new ApiExerciserAgent(config, phase, runDir),
114
- new SecurityScoutAgent(config, phase, runDir),
115
- new A11yGuardianAgent(config, phase, runDir),
116
- new HealerAgent(config, phase, runDir),
117
- new ReporterAgent(config, phase, runDir),
118
- new FixerAgent(config, phase, runDir),
119
- new UxInspectorAgent(config, phase, runDir),
120
- new PerformanceProfilerAgent(config, phase, runDir),
121
- new DataIntegrityAuditorAgent(config, phase, runDir),
122
- new RegressionSentinelAgent(config, phase, runDir),
123
- new ChaosAgent(config, phase, runDir),
124
- new DocumentationValidatorAgent(config, phase, runDir),
125
- new IntegrationWatchdogAgent(config, phase, runDir),
126
- new TenantIsolationAuditorAgent(config, phase, runDir),
127
- new WorkflowCompletionTesterAgent(config, phase, runDir),
128
- new StateSessionTesterAgent(config, phase, runDir),
129
- new EmailNotificationVerifierAgent(config, phase, runDir),
130
- new MigrationTesterAgent(config, phase, runDir),
204
+ new AnalystAgent(config, phase, runDir, totalRecall),
205
+ new SeedArchitectAgent(config, phase, runDir, totalRecall),
206
+ new TestGeneratorAgent(config, phase, runDir, totalRecall),
207
+ new UnitRunnerAgent(config, phase, runDir, totalRecall),
208
+ new BrowserCrawlerAgent(config, phase, runDir, totalRecall),
209
+ new ApiExerciserAgent(config, phase, runDir, totalRecall),
210
+ new SecurityScoutAgent(config, phase, runDir, totalRecall),
211
+ new A11yGuardianAgent(config, phase, runDir, totalRecall),
212
+ new HealerAgent(config, phase, runDir, totalRecall),
213
+ new ReporterAgent(config, phase, runDir, totalRecall),
214
+ new FixerAgent(config, phase, runDir, totalRecall),
215
+ new UxInspectorAgent(config, phase, runDir, totalRecall),
216
+ new PerformanceProfilerAgent(config, phase, runDir, totalRecall),
217
+ new DataIntegrityAuditorAgent(config, phase, runDir, totalRecall),
218
+ new RegressionSentinelAgent(config, phase, runDir, totalRecall),
219
+ new ChaosAgent(config, phase, runDir, totalRecall),
220
+ new DocumentationValidatorAgent(config, phase, runDir, totalRecall),
221
+ new IntegrationWatchdogAgent(config, phase, runDir, totalRecall),
222
+ new TenantIsolationAuditorAgent(config, phase, runDir, totalRecall),
223
+ new WorkflowCompletionTesterAgent(config, phase, runDir, totalRecall),
224
+ new StateSessionTesterAgent(config, phase, runDir, totalRecall),
225
+ new EmailNotificationVerifierAgent(config, phase, runDir, totalRecall),
226
+ new MigrationTesterAgent(config, phase, runDir, totalRecall),
227
+ new SignupOnboardingTesterAgent(config, phase, runDir, totalRecall),
228
+ new CrudFlowTesterAgent(config, phase, runDir, totalRecall),
229
+ new FormValidatorAgent(config, phase, runDir, totalRecall),
230
+ new SearchFilterTesterAgent(config, phase, runDir, totalRecall),
231
+ new NavigationRoutingTesterAgent(config, phase, runDir, totalRecall),
232
+ new ResponsiveInteractionTesterAgent(config, phase, runDir, totalRecall),
233
+ new MultiUserScenarioTesterAgent(config, phase, runDir, totalRecall),
234
+ new LoadTesterAgent(config, phase, runDir, totalRecall),
235
+ new MemoryLeakDetectorAgent(config, phase, runDir, totalRecall),
236
+ new BundleAnalyzerAgent(config, phase, runDir, totalRecall),
237
+ new XssScannerAgent(config, phase, runDir, totalRecall),
238
+ new CsrfTesterAgent(config, phase, runDir, totalRecall),
239
+ new AuthFuzzerAgent(config, phase, runDir, totalRecall),
240
+ new DependencyScannerAgent(config, phase, runDir, totalRecall),
241
+ new SecretsScannerAgent(config, phase, runDir, totalRecall),
242
+ new ApiContractTesterAgent(config, phase, runDir, totalRecall),
243
+ new RateLimitTesterAgent(config, phase, runDir, totalRecall),
244
+ new ApiPaginationTesterAgent(config, phase, runDir, totalRecall),
245
+ new GraphqlTesterAgent(config, phase, runDir, totalRecall),
246
+ new DataConsistencyCheckerAgent(config, phase, runDir, totalRecall),
247
+ new BackupRecoveryTesterAgent(config, phase, runDir, totalRecall),
248
+ new DataPrivacyScannerAgent(config, phase, runDir, totalRecall),
249
+ new SeoAuditorAgent(config, phase, runDir, totalRecall),
250
+ new SocialPreviewTesterAgent(config, phase, runDir, totalRecall),
251
+ new LighthouseAuditorAgent(config, phase, runDir, totalRecall),
252
+ new I18nTesterAgent(config, phase, runDir, totalRecall),
253
+ new TimezoneTesterAgent(config, phase, runDir, totalRecall),
254
+ new ErrorRecoveryTesterAgent(config, phase, runDir, totalRecall),
255
+ new OfflineModeTesterAgent(config, phase, runDir, totalRecall),
256
+ new GracefulDegradationTesterAgent(config, phase, runDir, totalRecall),
257
+ new WebSocketTesterAgent(config, phase, runDir, totalRecall),
258
+ new RealtimeSyncTesterAgent(config, phase, runDir, totalRecall),
259
+ new FileUploadTesterAgent(config, phase, runDir, totalRecall),
260
+ new ExportTesterAgent(config, phase, runDir, totalRecall),
261
+ new PaymentFlowTesterAgent(config, phase, runDir, totalRecall),
262
+ new SslTlsAuditorAgent(config, phase, runDir, totalRecall),
263
+ new DnsCdnTesterAgent(config, phase, runDir, totalRecall),
264
+ new DockerHealthCheckerAgent(config, phase, runDir, totalRecall),
265
+ new EnvConfigValidatorAgent(config, phase, runDir, totalRecall),
266
+ new LogQualityAuditorAgent(config, phase, runDir, totalRecall),
267
+ new AnalyticsTrackerTesterAgent(config, phase, runDir, totalRecall),
268
+ new GdprComplianceTesterAgent(config, phase, runDir, totalRecall),
269
+ new Soc2ControlValidatorAgent(config, phase, runDir, totalRecall),
270
+ new WcagAaaTesterAgent(config, phase, runDir, totalRecall),
271
+ new DeadCodeDetectorAgent(config, phase, runDir, totalRecall),
272
+ new TypeSafetyAuditorAgent(config, phase, runDir, totalRecall),
273
+ new ComplexityAnalyzerAgent(config, phase, runDir, totalRecall),
131
274
  ];
132
275
 
133
276
  for (const agent of agents) {
@@ -169,20 +169,20 @@ describe('Sample Platform — TestTeam Integration', () => {
169
169
  });
170
170
 
171
171
  describe('Orchestrator.dryRun with sample config', () => {
172
- it('returns agent IDs [1, 2, 23, 3, 4, 5] for alpha phase', () => {
172
+ it('returns agent IDs [1, 2, 23, 24, 3, 4, 5, 37, 38, 62, 68, 69, 70] for alpha phase', () => {
173
173
  const validated = validateConfig(sampleConfig);
174
174
  const orchestrator = new Orchestrator(validated);
175
175
  const plan = orchestrator.dryRun('alpha');
176
176
 
177
- expect(plan.map(e => e.agentId)).toEqual([1, 2, 23, 3, 4, 5]);
177
+ expect(plan.map(e => e.agentId)).toEqual([1, 2, 23, 24, 3, 4, 5, 37, 38, 62, 68, 69, 70]);
178
178
  });
179
179
 
180
- it('returns agent IDs [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22] for beta phase', () => {
180
+ it('returns all 59 agent IDs for beta phase', () => {
181
181
  const validated = validateConfig(sampleConfig);
182
182
  const orchestrator = new Orchestrator(validated);
183
183
  const plan = orchestrator.dryRun('beta');
184
184
 
185
- expect(plan.map(e => e.agentId)).toEqual([5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
185
+ expect(plan.map(e => e.agentId)).toEqual([5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70]);
186
186
  });
187
187
 
188
188
  it('marks all alpha agents as unregistered when no agents are registered', () => {