@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
@@ -62,21 +62,21 @@ describe('Orchestrator', () => {
62
62
  const orchestrator = new Orchestrator(stubConfig);
63
63
  const plan = orchestrator.dryRun('alpha');
64
64
 
65
- expect(plan.map(e => e.agentId)).toEqual([1, 2, 23, 3, 4, 5]);
65
+ expect(plan.map(e => e.agentId)).toEqual([1, 2, 23, 24, 3, 4, 5, 37, 38, 62, 68, 69, 70]);
66
66
  });
67
67
 
68
68
  it('returns the correct agent IDs for beta', () => {
69
69
  const orchestrator = new Orchestrator(stubConfig);
70
70
  const plan = orchestrator.dryRun('beta');
71
71
 
72
- expect(plan.map(e => e.agentId)).toEqual([5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
72
+ 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]);
73
73
  });
74
74
 
75
75
  it('returns the correct agent IDs for uat', () => {
76
76
  const orchestrator = new Orchestrator(stubConfig);
77
77
  const plan = orchestrator.dryRun('uat');
78
78
 
79
- expect(plan.map(e => e.agentId)).toEqual([5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17]);
79
+ expect(plan.map(e => e.agentId)).toEqual([5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 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]);
80
80
  });
81
81
 
82
82
  it('returns the correct agent IDs for release', () => {
@@ -163,12 +163,12 @@ describe('Orchestrator', () => {
163
163
 
164
164
  it('skips unregistered agents and includes them in skippedAgents', async () => {
165
165
  const orchestrator = new Orchestrator(stubConfig, tmpDir);
166
- // Register only agent 1, not 2, 23, 3, 4, 5
166
+ // Register only agent 1, not the others in alpha dispatch
167
167
  orchestrator.registerAgent(1, createMockAgent(1));
168
168
 
169
169
  const result = await orchestrator.runPhase('alpha');
170
170
 
171
- expect(result.skippedAgents).toEqual(expect.arrayContaining([2, 23, 3, 4, 5]));
171
+ expect(result.skippedAgents).toEqual(expect.arrayContaining([2, 23, 24, 3, 4, 5, 37, 38, 62, 68, 69, 70]));
172
172
  expect(result.skippedAgents).not.toContain(1);
173
173
  });
174
174
 
@@ -255,7 +255,7 @@ describe('Orchestrator', () => {
255
255
 
256
256
  it('free tier blocks beta phase', async () => {
257
257
  const orchestrator = createOrchestratorWithTier('free');
258
- registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
258
+ registerPhaseAgents(orchestrator, [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]);
259
259
 
260
260
  const result = await orchestrator.runPhase('beta');
261
261
 
@@ -266,7 +266,7 @@ describe('Orchestrator', () => {
266
266
 
267
267
  it('free tier blocks uat phase', async () => {
268
268
  const orchestrator = createOrchestratorWithTier('free');
269
- registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17]);
269
+ registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 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]);
270
270
 
271
271
  const result = await orchestrator.runPhase('uat');
272
272
 
@@ -321,8 +321,8 @@ describe('Orchestrator', () => {
321
321
 
322
322
  it('free tier skips pro agents with info finding', async () => {
323
323
  const orchestrator = createOrchestratorWithTier('free');
324
- // Alpha phase: [1, 2, 23, 3, 4, 5]. Agent 23 is pro tier.
325
- registerPhaseAgents(orchestrator, [1, 2, 23, 3, 4, 5]);
324
+ // Alpha phase: [1, 2, 23, 24, 3, 4, 5]. Agent 23 and 24 are pro tier.
325
+ registerPhaseAgents(orchestrator, [1, 2, 23, 24, 3, 4, 5]);
326
326
 
327
327
  const result = await orchestrator.runPhase('alpha');
328
328
 
@@ -360,11 +360,11 @@ describe('Orchestrator', () => {
360
360
  it('pro tier skips enterprise agents with info finding', async () => {
361
361
  const orchestrator = createOrchestratorWithTier('pro');
362
362
  // Beta phase includes enterprise agents: 14, 16, 18, 19
363
- registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
363
+ registerPhaseAgents(orchestrator, [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]);
364
364
 
365
365
  const result = await orchestrator.runPhase('beta');
366
366
 
367
- // Enterprise agents 14, 16, 18, 19 should be skipped
367
+ // Enterprise agents 14, 16, 18, 19, 30 should be skipped
368
368
  expect(result.skippedAgents).toContain(14);
369
369
  expect(result.skippedAgents).toContain(16);
370
370
  expect(result.skippedAgents).toContain(18);
@@ -384,7 +384,7 @@ describe('Orchestrator', () => {
384
384
  it('pro tier allows all phases but gates enterprise agents', async () => {
385
385
  const orchestrator = createOrchestratorWithTier('pro');
386
386
  // UAT includes enterprise agents: 14, 18, 19, 20
387
- registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17]);
387
+ registerPhaseAgents(orchestrator, [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 37, 38, 39, 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]);
388
388
 
389
389
  const result = await orchestrator.runPhase('uat');
390
390
 
@@ -397,12 +397,13 @@ describe('Orchestrator', () => {
397
397
  expect(result.agentResults[18].status).toBe('skipped');
398
398
  expect(result.agentResults[19].status).toBe('skipped');
399
399
  expect(result.agentResults[20].status).toBe('skipped');
400
+ expect(result.agentResults[30].status).toBe('skipped');
400
401
  });
401
402
 
402
403
  it('enterprise tier allows all agents', async () => {
403
404
  const orchestrator = createOrchestratorWithTier('enterprise');
404
405
  // Beta phase: all agents should run
405
- registerPhaseAgents(orchestrator, [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]);
406
+ registerPhaseAgents(orchestrator, [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]);
406
407
 
407
408
  const result = await orchestrator.runPhase('beta');
408
409
 
@@ -430,7 +431,7 @@ describe('Orchestrator', () => {
430
431
  orchestrator._getLicenseTier = () => 'enterprise';
431
432
 
432
433
  // Register all alpha agents
433
- for (const id of [1, 2, 23, 3, 4, 5]) {
434
+ for (const id of [1, 2, 23, 24, 3, 4, 5]) {
434
435
  orchestrator.registerAgent(id, createMockAgent(id, { durationMs: 100000 }));
435
436
  }
436
437
 
@@ -450,7 +451,7 @@ describe('Orchestrator', () => {
450
451
 
451
452
  const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
452
453
 
453
- for (const id of [1, 2, 23, 3, 4, 5]) {
454
+ for (const id of [1, 2, 23, 24, 3, 4, 5]) {
454
455
  orchestrator.registerAgent(id, createMockAgent(id, { durationMs: 100000 }));
455
456
  }
456
457
 
@@ -466,7 +467,7 @@ describe('Orchestrator', () => {
466
467
  orchestrator._getLicenseTier = () => 'enterprise';
467
468
 
468
469
  // Beta phase has parallel-safe agents: 6, 7, 8, 12, 13, etc.
469
- for (const id of [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22]) {
470
+ for (const id of [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]) {
470
471
  orchestrator.registerAgent(id, createMockAgent(id));
471
472
  }
472
473
 
package/core/cli.ts CHANGED
@@ -6,6 +6,8 @@ import { registerAllAgents } from '../agents/registry';
6
6
  import { runInitWizard } from './init';
7
7
  import { determineExitCode, writeCISummary, detectCIEnvironment } from './ci-output';
8
8
  import type { ExitCode } from './ci-output';
9
+ import { TotalRecallClient } from '../clients/total-recall';
10
+ import { AgentMvpClient } from '../clients/agent-mvp';
9
11
  import * as path from 'path';
10
12
 
11
13
  const PHASES: readonly Phase[] = ['alpha', 'beta', 'uat', 'release'];
@@ -15,6 +17,9 @@ interface ParsedArgs {
15
17
  dryRun: boolean;
16
18
  agent: number | null;
17
19
  configPath: string;
20
+ recallQuery: string | null;
21
+ reputation: boolean;
22
+ coaching: string | null;
18
23
  }
19
24
 
20
25
  function printUsage(): void {
@@ -27,6 +32,9 @@ Options:
27
32
  --dry-run Show dispatch plan without executing
28
33
  --agent <id> Run a single agent by ID
29
34
  --config <path> Path to config file (default: testteam.config.ts)
35
+ --recall <query> Query Total Recall memory and print results
36
+ --reputation Query agent reputations and print a table
37
+ --coaching <agentId> Query coaching flags for an agent
30
38
  --help Show this help message
31
39
  `.trim());
32
40
  }
@@ -37,6 +45,9 @@ export function parseArgs(argv: string[]): ParsedArgs {
37
45
  let dryRun = false;
38
46
  let agent: number | null = null;
39
47
  let configPath = 'testteam.config.ts';
48
+ let recallQuery: string | null = null;
49
+ let reputation = false;
50
+ let coaching: string | null = null;
40
51
 
41
52
  for (let i = 0; i < args.length; i++) {
42
53
  const arg = args[i];
@@ -67,6 +78,25 @@ export function parseArgs(argv: string[]): ParsedArgs {
67
78
  throw new Error('--config requires a path argument');
68
79
  }
69
80
  break;
81
+ case '--recall': {
82
+ const value = args[++i];
83
+ if (!value) {
84
+ throw new Error('--recall requires a query argument');
85
+ }
86
+ recallQuery = value;
87
+ break;
88
+ }
89
+ case '--reputation':
90
+ reputation = true;
91
+ break;
92
+ case '--coaching': {
93
+ const value = args[++i];
94
+ if (!value) {
95
+ throw new Error('--coaching requires an agent ID argument');
96
+ }
97
+ coaching = value;
98
+ break;
99
+ }
70
100
  case '--help':
71
101
  printUsage();
72
102
  process.exit(0);
@@ -76,7 +106,16 @@ export function parseArgs(argv: string[]): ParsedArgs {
76
106
  }
77
107
  }
78
108
 
79
- return { phase, dryRun, agent, configPath };
109
+ return { phase, dryRun, agent, configPath, recallQuery, reputation, coaching };
110
+ }
111
+
112
+ async function checkMahAvailability(baseUrl = 'http://localhost:3300'): Promise<boolean> {
113
+ try {
114
+ const res = await fetch(`${baseUrl}/health`);
115
+ return res.ok;
116
+ } catch {
117
+ return false;
118
+ }
80
119
  }
81
120
 
82
121
  async function loadConfig(configPath: string): Promise<TestTeamConfig> {
@@ -112,7 +151,54 @@ export async function main(argv: string[] = process.argv): Promise<number> {
112
151
  return 1;
113
152
  }
114
153
 
115
- const { phase, dryRun, configPath } = parsed;
154
+ const { phase, dryRun, configPath, recallQuery, reputation, coaching } = parsed;
155
+
156
+ // Handle --recall: query Total Recall and exit
157
+ if (recallQuery) {
158
+ const tr = new TotalRecallClient();
159
+ const available = await tr.isAvailable();
160
+ if (!available) {
161
+ console.error('Total Recall is not running at http://localhost:3777');
162
+ return 1;
163
+ }
164
+ const results = await tr.recallFindings(recallQuery);
165
+ console.log(JSON.stringify(results, null, 2));
166
+ return 0;
167
+ }
168
+
169
+ // Handle --coaching: query Agent-MVP coaching flags for a specific agent and exit
170
+ if (coaching) {
171
+ const mvp = new AgentMvpClient();
172
+ const mvpAvailable = await mvp.isAvailable();
173
+ if (!mvpAvailable) {
174
+ console.error('Agent-MVP is not running at http://localhost:3200');
175
+ return 1;
176
+ }
177
+ const flags = await mvp.getCoachingFlags(coaching);
178
+ if (flags.length > 0) {
179
+ console.log(JSON.stringify(flags, null, 2));
180
+ } else {
181
+ console.log(`No coaching flags for agent "${coaching}".`);
182
+ }
183
+ return 0;
184
+ }
185
+
186
+ // Handle --reputation: query Agent-MVP for all agent reputations and exit
187
+ if (reputation) {
188
+ const mvp = new AgentMvpClient();
189
+ const mvpAvailable = await mvp.isAvailable();
190
+ if (!mvpAvailable) {
191
+ console.error('Agent-MVP is not running at http://localhost:3200');
192
+ return 1;
193
+ }
194
+ const leaderboard = await mvp.getReputation('leaderboard');
195
+ if (leaderboard) {
196
+ console.log(JSON.stringify(leaderboard, null, 2));
197
+ } else {
198
+ console.log('No reputation data available.');
199
+ }
200
+ return 0;
201
+ }
116
202
 
117
203
  if (!dryRun && !phase) {
118
204
  console.error('--phase is required unless using --dry-run');
@@ -120,6 +206,10 @@ export async function main(argv: string[] = process.argv): Promise<number> {
120
206
  return 1;
121
207
  }
122
208
 
209
+ // Startup banner
210
+ console.log('TestTeam v3.0.0 — Learning Agents');
211
+ console.log('─'.repeat(40));
212
+
123
213
  // Load and validate config
124
214
  let rawConfig: TestTeamConfig;
125
215
  try {
@@ -131,6 +221,33 @@ export async function main(argv: string[] = process.argv): Promise<number> {
131
221
 
132
222
  const config = validateConfig(rawConfig);
133
223
 
224
+ // Initialize Total Recall (optional — continues normally if unavailable)
225
+ const totalRecall = new TotalRecallClient();
226
+ const trAvailable = await totalRecall.isAvailable();
227
+ if (trAvailable) {
228
+ await totalRecall.startSession();
229
+ console.log('[Total Recall] Connected — findings will be stored in memory');
230
+ } else {
231
+ console.log('[Total Recall] Not available at http://localhost:3777 — running without memory');
232
+ }
233
+
234
+ // Initialize Agent-MVP client (optional ��� continues normally if unavailable)
235
+ const agentMvp = new AgentMvpClient();
236
+ const mvpAvailable = await agentMvp.isAvailable();
237
+ if (mvpAvailable) {
238
+ console.log('[Agent-MVP] Connected — agent scores will be reported');
239
+ } else {
240
+ console.log('[Agent-MVP] Not available at http://localhost:3200 — running without scoring');
241
+ }
242
+
243
+ // Check MAH availability (optional — informational only)
244
+ const mahAvailable = await checkMahAvailability();
245
+ if (mahAvailable) {
246
+ console.log('[MAH] Connected — multi-agent hub active');
247
+ } else {
248
+ console.log('[MAH] Not available at http://localhost:3300 — running without hub');
249
+ }
250
+
134
251
  // Shared run directory so all phases write results to the same location.
135
252
  // This ensures the Reporter (Agent 10, release phase) can read results
136
253
  // from prior phases (alpha, beta, uat).
@@ -142,8 +259,8 @@ export async function main(argv: string[] = process.argv): Promise<number> {
142
259
  : [phase];
143
260
 
144
261
  for (const p of targetPhases) {
145
- const phaseOrchestrator = new Orchestrator(config, sharedRunDir);
146
- registerAllAgents(phaseOrchestrator, config, p, sharedRunDir);
262
+ const phaseOrchestrator = new Orchestrator(config, sharedRunDir, mvpAvailable ? agentMvp : undefined);
263
+ registerAllAgents(phaseOrchestrator, config, p, sharedRunDir, trAvailable ? totalRecall : undefined);
147
264
  const plan = phaseOrchestrator.dryRun(p);
148
265
  console.log(`\nPhase: ${p}`);
149
266
  for (const entry of plan) {
@@ -166,8 +283,8 @@ export async function main(argv: string[] = process.argv): Promise<number> {
166
283
  for (const p of targetPhases) {
167
284
  console.log(`\nRunning phase: ${p}`);
168
285
  try {
169
- const phaseOrchestrator = new Orchestrator(config, sharedRunDir);
170
- registerAllAgents(phaseOrchestrator, config, p, sharedRunDir);
286
+ const phaseOrchestrator = new Orchestrator(config, sharedRunDir, mvpAvailable ? agentMvp : undefined);
287
+ registerAllAgents(phaseOrchestrator, config, p, sharedRunDir, trAvailable ? totalRecall : undefined);
171
288
  const result = await phaseOrchestrator.runPhase(p);
172
289
 
173
290
  if (result.skippedAgents.length > 0) {
@@ -195,6 +312,11 @@ export async function main(argv: string[] = process.argv): Promise<number> {
195
312
  }
196
313
  }
197
314
 
315
+ // Close Total Recall session
316
+ if (trAvailable) {
317
+ await totalRecall.endSession().catch(() => {});
318
+ }
319
+
198
320
  // Determine structured exit code:
199
321
  // - 0: All gates passed, no advisory failures
200
322
  // - 1: Blocking agent failures (or runtime errors)