@avi770/testteam 1.2.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 (325) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/LICENSE +21 -0
  3. package/README.md +167 -0
  4. package/agents/01-analyst.ts +100 -0
  5. package/agents/02-seed-architect.ts +59 -0
  6. package/agents/03-test-generator.ts +191 -0
  7. package/agents/04-unit-runner.ts +160 -0
  8. package/agents/05-browser-crawler.ts +790 -0
  9. package/agents/06-api-exerciser.ts +311 -0
  10. package/agents/07-security-scout.ts +188 -0
  11. package/agents/08-a11y-guardian.ts +212 -0
  12. package/agents/09-healer.ts +228 -0
  13. package/agents/10-reporter.ts +266 -0
  14. package/agents/11-fixer.ts +253 -0
  15. package/agents/12-ux-inspector.ts +444 -0
  16. package/agents/13-performance-profiler.ts +271 -0
  17. package/agents/14-data-integrity-auditor.ts +417 -0
  18. package/agents/15-regression-sentinel.ts +307 -0
  19. package/agents/16-chaos-agent.ts +228 -0
  20. package/agents/17-documentation-validator.ts +266 -0
  21. package/agents/18-integration-watchdog.ts +178 -0
  22. package/agents/19-tenant-isolation-auditor.ts +199 -0
  23. package/agents/20-workflow-completion-tester.ts +203 -0
  24. package/agents/21-state-session-tester.ts +262 -0
  25. package/agents/22-email-notification-verifier.ts +244 -0
  26. package/agents/23-migration-tester.ts +80 -0
  27. package/agents/__tests__/01-analyst.test.ts +188 -0
  28. package/agents/__tests__/02-seed-architect.test.ts +152 -0
  29. package/agents/__tests__/03-test-generator-full.test.ts +321 -0
  30. package/agents/__tests__/03-test-generator.test.ts +318 -0
  31. package/agents/__tests__/04-unit-runner.test.ts +320 -0
  32. package/agents/__tests__/05-browser-crawler-beta.test.ts +492 -0
  33. package/agents/__tests__/05-browser-crawler-release.test.ts +412 -0
  34. package/agents/__tests__/05-browser-crawler-uat.test.ts +578 -0
  35. package/agents/__tests__/05-browser-crawler.test.ts +518 -0
  36. package/agents/__tests__/06-api-exerciser.test.ts +619 -0
  37. package/agents/__tests__/07-security-scout.test.ts +382 -0
  38. package/agents/__tests__/08-a11y-guardian.test.ts +530 -0
  39. package/agents/__tests__/09-healer.test.ts +384 -0
  40. package/agents/__tests__/10-reporter.test.ts +366 -0
  41. package/agents/__tests__/11-fixer.test.ts +406 -0
  42. package/agents/__tests__/12-ux-inspector-extended.test.ts +465 -0
  43. package/agents/__tests__/12-ux-inspector.test.ts +443 -0
  44. package/agents/__tests__/13-performance-profiler.test.ts +411 -0
  45. package/agents/__tests__/14-data-integrity-auditor-extended.test.ts +573 -0
  46. package/agents/__tests__/14-data-integrity-auditor.test.ts +407 -0
  47. package/agents/__tests__/15-regression-sentinel.test.ts +657 -0
  48. package/agents/__tests__/16-chaos-agent.test.ts +427 -0
  49. package/agents/__tests__/17-documentation-validator.test.ts +402 -0
  50. package/agents/__tests__/18-integration-watchdog.test.ts +263 -0
  51. package/agents/__tests__/19-tenant-isolation-auditor.test.ts +400 -0
  52. package/agents/__tests__/20-workflow-completion-tester.test.ts +586 -0
  53. package/agents/__tests__/21-state-session-tester.test.ts +374 -0
  54. package/agents/__tests__/22-email-notification-verifier.test.ts +441 -0
  55. package/agents/__tests__/23-migration-tester.test.ts +145 -0
  56. package/agents/__tests__/base-agent.test.ts +188 -0
  57. package/agents/__tests__/registry.test.ts +218 -0
  58. package/agents/base-agent.ts +77 -0
  59. package/agents/registry.ts +136 -0
  60. package/baselines/api-schemas/.gitkeep +0 -0
  61. package/baselines/performance/.gitkeep +0 -0
  62. package/baselines/screenshots/.gitkeep +0 -0
  63. package/bin/testteam.js +10 -0
  64. package/core/__tests__/ci-output.test.ts +430 -0
  65. package/core/__tests__/cli.test.ts +387 -0
  66. package/core/__tests__/config.test.ts +78 -0
  67. package/core/__tests__/cost-tracker.test.ts +158 -0
  68. package/core/__tests__/evidence.test.ts +265 -0
  69. package/core/__tests__/fix-loop.test.ts +210 -0
  70. package/core/__tests__/health-check.test.ts +44 -0
  71. package/core/__tests__/init.test.ts +609 -0
  72. package/core/__tests__/integration.test.ts +204 -0
  73. package/core/__tests__/license-gen.test.ts +227 -0
  74. package/core/__tests__/license.test.ts +326 -0
  75. package/core/__tests__/multi-browser.test.ts +278 -0
  76. package/core/__tests__/orchestrator.test.ts +519 -0
  77. package/core/__tests__/phase-gate.test.ts +43 -0
  78. package/core/__tests__/report-html.test.ts +398 -0
  79. package/core/__tests__/report-upload.test.ts +325 -0
  80. package/core/__tests__/run-counter.test.ts +234 -0
  81. package/core/ci-output.ts +240 -0
  82. package/core/cli.ts +232 -0
  83. package/core/config.ts +178 -0
  84. package/core/cost-tracker.ts +59 -0
  85. package/core/evidence.ts +132 -0
  86. package/core/fix-loop.ts +85 -0
  87. package/core/health-check.ts +54 -0
  88. package/core/init.ts +546 -0
  89. package/core/license-gen.ts +212 -0
  90. package/core/license.ts +211 -0
  91. package/core/messages.ts +67 -0
  92. package/core/multi-browser.ts +136 -0
  93. package/core/orchestrator.ts +354 -0
  94. package/core/phase-gate.ts +55 -0
  95. package/core/report-html.ts +657 -0
  96. package/core/report-upload.ts +188 -0
  97. package/core/run-counter.ts +175 -0
  98. package/core/types.ts +57 -0
  99. package/dist/agents/01-analyst.d.ts +11 -0
  100. package/dist/agents/01-analyst.d.ts.map +1 -0
  101. package/dist/agents/01-analyst.js +75 -0
  102. package/dist/agents/01-analyst.js.map +1 -0
  103. package/dist/agents/02-seed-architect.d.ts +11 -0
  104. package/dist/agents/02-seed-architect.d.ts.map +1 -0
  105. package/dist/agents/02-seed-architect.js +51 -0
  106. package/dist/agents/02-seed-architect.js.map +1 -0
  107. package/dist/agents/03-test-generator.d.ts +9 -0
  108. package/dist/agents/03-test-generator.d.ts.map +1 -0
  109. package/dist/agents/03-test-generator.js +167 -0
  110. package/dist/agents/03-test-generator.js.map +1 -0
  111. package/dist/agents/04-unit-runner.d.ts +9 -0
  112. package/dist/agents/04-unit-runner.d.ts.map +1 -0
  113. package/dist/agents/04-unit-runner.js +113 -0
  114. package/dist/agents/04-unit-runner.js.map +1 -0
  115. package/dist/agents/05-browser-crawler.d.ts +30 -0
  116. package/dist/agents/05-browser-crawler.d.ts.map +1 -0
  117. package/dist/agents/05-browser-crawler.js +685 -0
  118. package/dist/agents/05-browser-crawler.js.map +1 -0
  119. package/dist/agents/06-api-exerciser.d.ts +23 -0
  120. package/dist/agents/06-api-exerciser.d.ts.map +1 -0
  121. package/dist/agents/06-api-exerciser.js +253 -0
  122. package/dist/agents/06-api-exerciser.js.map +1 -0
  123. package/dist/agents/07-security-scout.d.ts +11 -0
  124. package/dist/agents/07-security-scout.d.ts.map +1 -0
  125. package/dist/agents/07-security-scout.js +142 -0
  126. package/dist/agents/07-security-scout.js.map +1 -0
  127. package/dist/agents/08-a11y-guardian.d.ts +13 -0
  128. package/dist/agents/08-a11y-guardian.d.ts.map +1 -0
  129. package/dist/agents/08-a11y-guardian.js +176 -0
  130. package/dist/agents/08-a11y-guardian.js.map +1 -0
  131. package/dist/agents/09-healer.d.ts +33 -0
  132. package/dist/agents/09-healer.d.ts.map +1 -0
  133. package/dist/agents/09-healer.js +167 -0
  134. package/dist/agents/09-healer.js.map +1 -0
  135. package/dist/agents/10-reporter.d.ts +26 -0
  136. package/dist/agents/10-reporter.d.ts.map +1 -0
  137. package/dist/agents/10-reporter.js +215 -0
  138. package/dist/agents/10-reporter.js.map +1 -0
  139. package/dist/agents/11-fixer.d.ts +26 -0
  140. package/dist/agents/11-fixer.d.ts.map +1 -0
  141. package/dist/agents/11-fixer.js +195 -0
  142. package/dist/agents/11-fixer.js.map +1 -0
  143. package/dist/agents/12-ux-inspector.d.ts +15 -0
  144. package/dist/agents/12-ux-inspector.d.ts.map +1 -0
  145. package/dist/agents/12-ux-inspector.js +364 -0
  146. package/dist/agents/12-ux-inspector.js.map +1 -0
  147. package/dist/agents/13-performance-profiler.d.ts +13 -0
  148. package/dist/agents/13-performance-profiler.d.ts.map +1 -0
  149. package/dist/agents/13-performance-profiler.js +216 -0
  150. package/dist/agents/13-performance-profiler.js.map +1 -0
  151. package/dist/agents/14-data-integrity-auditor.d.ts +12 -0
  152. package/dist/agents/14-data-integrity-auditor.d.ts.map +1 -0
  153. package/dist/agents/14-data-integrity-auditor.js +356 -0
  154. package/dist/agents/14-data-integrity-auditor.js.map +1 -0
  155. package/dist/agents/15-regression-sentinel.d.ts +25 -0
  156. package/dist/agents/15-regression-sentinel.d.ts.map +1 -0
  157. package/dist/agents/15-regression-sentinel.js +251 -0
  158. package/dist/agents/15-regression-sentinel.js.map +1 -0
  159. package/dist/agents/16-chaos-agent.d.ts +9 -0
  160. package/dist/agents/16-chaos-agent.d.ts.map +1 -0
  161. package/dist/agents/16-chaos-agent.js +207 -0
  162. package/dist/agents/16-chaos-agent.js.map +1 -0
  163. package/dist/agents/17-documentation-validator.d.ts +31 -0
  164. package/dist/agents/17-documentation-validator.d.ts.map +1 -0
  165. package/dist/agents/17-documentation-validator.js +246 -0
  166. package/dist/agents/17-documentation-validator.js.map +1 -0
  167. package/dist/agents/18-integration-watchdog.d.ts +10 -0
  168. package/dist/agents/18-integration-watchdog.d.ts.map +1 -0
  169. package/dist/agents/18-integration-watchdog.js +138 -0
  170. package/dist/agents/18-integration-watchdog.js.map +1 -0
  171. package/dist/agents/19-tenant-isolation-auditor.d.ts +9 -0
  172. package/dist/agents/19-tenant-isolation-auditor.d.ts.map +1 -0
  173. package/dist/agents/19-tenant-isolation-auditor.js +166 -0
  174. package/dist/agents/19-tenant-isolation-auditor.js.map +1 -0
  175. package/dist/agents/20-workflow-completion-tester.d.ts +12 -0
  176. package/dist/agents/20-workflow-completion-tester.d.ts.map +1 -0
  177. package/dist/agents/20-workflow-completion-tester.js +159 -0
  178. package/dist/agents/20-workflow-completion-tester.js.map +1 -0
  179. package/dist/agents/21-state-session-tester.d.ts +10 -0
  180. package/dist/agents/21-state-session-tester.d.ts.map +1 -0
  181. package/dist/agents/21-state-session-tester.js +233 -0
  182. package/dist/agents/21-state-session-tester.js.map +1 -0
  183. package/dist/agents/22-email-notification-verifier.d.ts +11 -0
  184. package/dist/agents/22-email-notification-verifier.d.ts.map +1 -0
  185. package/dist/agents/22-email-notification-verifier.js +199 -0
  186. package/dist/agents/22-email-notification-verifier.js.map +1 -0
  187. package/dist/agents/23-migration-tester.d.ts +10 -0
  188. package/dist/agents/23-migration-tester.d.ts.map +1 -0
  189. package/dist/agents/23-migration-tester.js +74 -0
  190. package/dist/agents/23-migration-tester.js.map +1 -0
  191. package/dist/agents/base-agent.d.ts +19 -0
  192. package/dist/agents/base-agent.d.ts.map +1 -0
  193. package/dist/agents/base-agent.js +67 -0
  194. package/dist/agents/base-agent.js.map +1 -0
  195. package/dist/agents/registry.d.ts +29 -0
  196. package/dist/agents/registry.d.ts.map +1 -0
  197. package/dist/agents/registry.js +117 -0
  198. package/dist/agents/registry.js.map +1 -0
  199. package/dist/core/ci-output.d.ts +35 -0
  200. package/dist/core/ci-output.d.ts.map +1 -0
  201. package/dist/core/ci-output.js +193 -0
  202. package/dist/core/ci-output.js.map +1 -0
  203. package/dist/core/cli.d.ts +11 -0
  204. package/dist/core/cli.d.ts.map +1 -0
  205. package/dist/core/cli.js +197 -0
  206. package/dist/core/cli.js.map +1 -0
  207. package/dist/core/config.d.ts +111 -0
  208. package/dist/core/config.d.ts.map +1 -0
  209. package/dist/core/config.js +42 -0
  210. package/dist/core/config.js.map +1 -0
  211. package/dist/core/cost-tracker.d.ts +22 -0
  212. package/dist/core/cost-tracker.d.ts.map +1 -0
  213. package/dist/core/cost-tracker.js +41 -0
  214. package/dist/core/cost-tracker.js.map +1 -0
  215. package/dist/core/evidence.d.ts +28 -0
  216. package/dist/core/evidence.d.ts.map +1 -0
  217. package/dist/core/evidence.js +95 -0
  218. package/dist/core/evidence.js.map +1 -0
  219. package/dist/core/fix-loop.d.ts +29 -0
  220. package/dist/core/fix-loop.d.ts.map +1 -0
  221. package/dist/core/fix-loop.js +70 -0
  222. package/dist/core/fix-loop.js.map +1 -0
  223. package/dist/core/health-check.d.ts +21 -0
  224. package/dist/core/health-check.d.ts.map +1 -0
  225. package/dist/core/health-check.js +26 -0
  226. package/dist/core/health-check.js.map +1 -0
  227. package/dist/core/init.d.ts +2 -0
  228. package/dist/core/init.d.ts.map +1 -0
  229. package/dist/core/init.js +435 -0
  230. package/dist/core/init.js.map +1 -0
  231. package/dist/core/license-gen.d.ts +12 -0
  232. package/dist/core/license-gen.d.ts.map +1 -0
  233. package/dist/core/license-gen.js +169 -0
  234. package/dist/core/license-gen.js.map +1 -0
  235. package/dist/core/license.d.ts +33 -0
  236. package/dist/core/license.d.ts.map +1 -0
  237. package/dist/core/license.js +170 -0
  238. package/dist/core/license.js.map +1 -0
  239. package/dist/core/messages.d.ts +10 -0
  240. package/dist/core/messages.d.ts.map +1 -0
  241. package/dist/core/messages.js +47 -0
  242. package/dist/core/messages.js.map +1 -0
  243. package/dist/core/multi-browser.d.ts +36 -0
  244. package/dist/core/multi-browser.d.ts.map +1 -0
  245. package/dist/core/multi-browser.js +88 -0
  246. package/dist/core/multi-browser.js.map +1 -0
  247. package/dist/core/orchestrator.d.ts +48 -0
  248. package/dist/core/orchestrator.d.ts.map +1 -0
  249. package/dist/core/orchestrator.js +291 -0
  250. package/dist/core/orchestrator.js.map +1 -0
  251. package/dist/core/phase-gate.d.ts +4 -0
  252. package/dist/core/phase-gate.d.ts.map +1 -0
  253. package/dist/core/phase-gate.js +39 -0
  254. package/dist/core/phase-gate.js.map +1 -0
  255. package/dist/core/report-html.d.ts +9 -0
  256. package/dist/core/report-html.d.ts.map +1 -0
  257. package/dist/core/report-html.js +617 -0
  258. package/dist/core/report-html.js.map +1 -0
  259. package/dist/core/report-upload.d.ts +16 -0
  260. package/dist/core/report-upload.d.ts.map +1 -0
  261. package/dist/core/report-upload.js +124 -0
  262. package/dist/core/report-upload.js.map +1 -0
  263. package/dist/core/run-counter.d.ts +40 -0
  264. package/dist/core/run-counter.d.ts.map +1 -0
  265. package/dist/core/run-counter.js +120 -0
  266. package/dist/core/run-counter.js.map +1 -0
  267. package/dist/core/types.d.ts +53 -0
  268. package/dist/core/types.d.ts.map +1 -0
  269. package/dist/core/types.js +2 -0
  270. package/dist/core/types.js.map +1 -0
  271. package/dist/helpers/api-client.d.ts +30 -0
  272. package/dist/helpers/api-client.d.ts.map +1 -0
  273. package/dist/helpers/api-client.js +77 -0
  274. package/dist/helpers/api-client.js.map +1 -0
  275. package/dist/helpers/element-discovery.d.ts +18 -0
  276. package/dist/helpers/element-discovery.d.ts.map +1 -0
  277. package/dist/helpers/element-discovery.js +82 -0
  278. package/dist/helpers/element-discovery.js.map +1 -0
  279. package/dist/helpers/env-resolver.d.ts +29 -0
  280. package/dist/helpers/env-resolver.d.ts.map +1 -0
  281. package/dist/helpers/env-resolver.js +51 -0
  282. package/dist/helpers/env-resolver.js.map +1 -0
  283. package/dist/helpers/form-filler.d.ts +13 -0
  284. package/dist/helpers/form-filler.d.ts.map +1 -0
  285. package/dist/helpers/form-filler.js +98 -0
  286. package/dist/helpers/form-filler.js.map +1 -0
  287. package/dist/helpers/modal-handler.d.ts +16 -0
  288. package/dist/helpers/modal-handler.d.ts.map +1 -0
  289. package/dist/helpers/modal-handler.js +95 -0
  290. package/dist/helpers/modal-handler.js.map +1 -0
  291. package/dist/helpers/navigation.d.ts +37 -0
  292. package/dist/helpers/navigation.d.ts.map +1 -0
  293. package/dist/helpers/navigation.js +83 -0
  294. package/dist/helpers/navigation.js.map +1 -0
  295. package/dist/helpers/quality-gate.d.ts +17 -0
  296. package/dist/helpers/quality-gate.d.ts.map +1 -0
  297. package/dist/helpers/quality-gate.js +144 -0
  298. package/dist/helpers/quality-gate.js.map +1 -0
  299. package/dist/helpers/screenshot.d.ts +24 -0
  300. package/dist/helpers/screenshot.d.ts.map +1 -0
  301. package/dist/helpers/screenshot.js +76 -0
  302. package/dist/helpers/screenshot.js.map +1 -0
  303. package/dist/helpers/seed-validator.d.ts +15 -0
  304. package/dist/helpers/seed-validator.d.ts.map +1 -0
  305. package/dist/helpers/seed-validator.js +53 -0
  306. package/dist/helpers/seed-validator.js.map +1 -0
  307. package/helpers/__tests__/api-client.test.ts +199 -0
  308. package/helpers/__tests__/element-discovery.test.ts +202 -0
  309. package/helpers/__tests__/form-filler-extended.test.ts +212 -0
  310. package/helpers/__tests__/form-filler.test.ts +99 -0
  311. package/helpers/__tests__/modal-handler.test.ts +152 -0
  312. package/helpers/__tests__/navigation.test.ts +214 -0
  313. package/helpers/__tests__/quality-gate.test.ts +117 -0
  314. package/helpers/__tests__/screenshot.test.ts +139 -0
  315. package/helpers/__tests__/seed-validator.test.ts +114 -0
  316. package/helpers/api-client.ts +111 -0
  317. package/helpers/element-discovery.ts +105 -0
  318. package/helpers/env-resolver.ts +69 -0
  319. package/helpers/form-filler.ts +126 -0
  320. package/helpers/modal-handler.ts +108 -0
  321. package/helpers/navigation.ts +100 -0
  322. package/helpers/quality-gate.ts +180 -0
  323. package/helpers/screenshot.ts +111 -0
  324. package/helpers/seed-validator.ts +70 -0
  325. package/package.json +88 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../core/orchestrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAW,MAAM,SAAS,CAAC;AAC5E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAwB7C,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,GAAG,UAAU,GAAG,cAAc,CAAC;CACnD;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,eAAe,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC1C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAiBD,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;IAC5D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,MAAM,CAAS;IAEvB;;;OAGG;IACH,eAAe,EAAE,MAAM,WAAW,CAA0B;gBAEhD,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,EAAE,MAAM;IAKpD,uDAAuD;IACvD,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI;IAItD,2DAA2D;IAC3D,oBAAoB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI;IAIjD,uEAAuE;IACvE,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,EAAE;IAazC,qFAAqF;IAC/E,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IAsLrD;;;;;;;OAOG;YACW,UAAU;IAwDxB,kCAAkC;IAClC,SAAS,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,291 @@
1
+ import { runHealthChecks } from './health-check';
2
+ import { initRunDirectory, writeAgentResult, writeFinding } from './evidence';
3
+ import { classifyFinding } from './fix-loop';
4
+ import { CostTracker } from './cost-tracker';
5
+ import { evaluateGate } from './phase-gate';
6
+ import { getLicenseTier } from './license';
7
+ import { isAgentAvailable, getAgentTier } from '../agents/registry';
8
+ import { agentGatedMessage, phaseGatedMessage, getAgentDisplayName } from './messages';
9
+ import * as path from 'path';
10
+ /** Agent IDs to dispatch per phase, in execution order. */
11
+ const PHASE_DISPATCH = {
12
+ alpha: [1, 2, 23, 3, 4, 5],
13
+ beta: [5, 6, 7, 8, 12, 13, 14, 15, 16, 18, 19, 21, 22],
14
+ uat: [5, 6, 12, 13, 14, 15, 18, 19, 20, 21, 22, 17],
15
+ release: [10],
16
+ };
17
+ /**
18
+ * Agent IDs that are safe to run in parallel (read-only / non-destructive).
19
+ * Agents that write data (2, 3, 5, 16) must run sequentially.
20
+ */
21
+ const PARALLEL_SAFE = new Set([
22
+ 6, 7, 8, 12, 13, 14, 15, 18, 19, 21, 22,
23
+ ]);
24
+ /** Maximum number of fix-loop iterations per phase to prevent infinite heal/fix loops. */
25
+ const MAX_FIX_LOOP_ITERATIONS = 3;
26
+ /** Phases available per license tier. */
27
+ const PHASE_ACCESS = {
28
+ free: new Set(['alpha']),
29
+ pro: new Set(['alpha', 'beta', 'uat', 'release']),
30
+ enterprise: new Set(['alpha', 'beta', 'uat', 'release']),
31
+ };
32
+ /** Minimum tier required for non-free phases. */
33
+ const PHASE_REQUIRED_TIER = {
34
+ alpha: 'free',
35
+ beta: 'pro',
36
+ uat: 'pro',
37
+ release: 'pro',
38
+ };
39
+ export class Orchestrator {
40
+ config;
41
+ agents = new Map();
42
+ healthChecks = [];
43
+ runDir;
44
+ /**
45
+ * License tier resolver — injectable for testing.
46
+ * Defaults to `getLicenseTier()` from the license module.
47
+ */
48
+ _getLicenseTier = () => getLicenseTier();
49
+ constructor(config, runDir) {
50
+ this.config = config;
51
+ this.runDir = runDir ?? path.join(process.cwd(), '.run', `run-${Date.now()}`);
52
+ }
53
+ /** Register an agent instance for a given agent ID. */
54
+ registerAgent(agentId, agent) {
55
+ this.agents.set(agentId, agent);
56
+ }
57
+ /** Register health checks to run before agent dispatch. */
58
+ registerHealthChecks(checks) {
59
+ this.healthChecks.push(...checks);
60
+ }
61
+ /** Return the dispatch plan for a phase without executing anything. */
62
+ dryRun(phase) {
63
+ const agentIds = PHASE_DISPATCH[phase];
64
+ return agentIds.map(agentId => {
65
+ if (this.config.disabledAgentSet.has(agentId)) {
66
+ return { agentId, status: 'disabled' };
67
+ }
68
+ if (!this.agents.has(agentId)) {
69
+ return { agentId, status: 'unregistered' };
70
+ }
71
+ return { agentId, status: 'scheduled' };
72
+ });
73
+ }
74
+ /** Execute all agents for the given phase, evaluate the gate, and return results. */
75
+ async runPhase(phase) {
76
+ // Step 0: License-based phase gating
77
+ const currentTier = this._getLicenseTier();
78
+ if (!PHASE_ACCESS[currentTier].has(phase)) {
79
+ const requiredTier = PHASE_REQUIRED_TIER[phase];
80
+ const message = phaseGatedMessage(phase, requiredTier, currentTier);
81
+ console.warn(`[Orchestrator] ${message}`);
82
+ // Return empty result with a failed gate
83
+ const gate = {
84
+ phase,
85
+ passed: false,
86
+ blockingResults: [],
87
+ advisoryResults: [],
88
+ failedBlockingAgents: [],
89
+ timestamp: new Date().toISOString(),
90
+ };
91
+ return {
92
+ gate,
93
+ agentResults: {},
94
+ skippedAgents: PHASE_DISPATCH[phase].slice(),
95
+ costTracker: new CostTracker({
96
+ maxPerRun: this.config.costBudget.maxPerRun,
97
+ maxPerAgent: this.config.costBudget.maxPerAgent,
98
+ alertThreshold: this.config.costBudget.alertThreshold,
99
+ onExceeded: this.config.costBudget.onExceeded,
100
+ }),
101
+ };
102
+ }
103
+ // Step 1: Health checks
104
+ if (this.healthChecks.length > 0) {
105
+ const healthSummary = await runHealthChecks({ checks: this.healthChecks });
106
+ if (!healthSummary.canProceed) {
107
+ const failedNames = healthSummary.results
108
+ .filter(r => r.required && !r.passed)
109
+ .map(r => r.name)
110
+ .join(', ');
111
+ throw new Error(`Health checks failed: ${failedNames}`);
112
+ }
113
+ }
114
+ // Step 2: Initialize run directory
115
+ await initRunDirectory(this.runDir);
116
+ // Step 3: Create cost tracker
117
+ const costTracker = new CostTracker({
118
+ maxPerRun: this.config.costBudget.maxPerRun,
119
+ maxPerAgent: this.config.costBudget.maxPerAgent,
120
+ alertThreshold: this.config.costBudget.alertThreshold,
121
+ onExceeded: this.config.costBudget.onExceeded,
122
+ });
123
+ // Step 4: Dispatch agents
124
+ const agentIds = PHASE_DISPATCH[phase];
125
+ const agentResults = {};
126
+ const skippedAgents = [];
127
+ let budgetExhausted = false;
128
+ // Build dispatch batches: consecutive parallel-safe agents form a batch;
129
+ // sequential agents are dispatched alone.
130
+ const batches = [];
131
+ let currentBatch = [];
132
+ for (const agentId of agentIds) {
133
+ if (this.config.disabledAgentSet.has(agentId) || !this.agents.has(agentId)) {
134
+ // Flush current batch before skipping
135
+ if (currentBatch.length > 0) {
136
+ batches.push(currentBatch);
137
+ currentBatch = [];
138
+ }
139
+ skippedAgents.push(agentId);
140
+ continue;
141
+ }
142
+ // License-based agent gating
143
+ if (!isAgentAvailable(agentId, currentTier)) {
144
+ if (currentBatch.length > 0) {
145
+ batches.push(currentBatch);
146
+ currentBatch = [];
147
+ }
148
+ const agentName = getAgentDisplayName(agentId);
149
+ const requiredTier = getAgentTier(agentId);
150
+ const message = agentGatedMessage(agentId, agentName, requiredTier, currentTier);
151
+ console.warn(`[Orchestrator] ${message}`);
152
+ // Record a skipped result with an info finding
153
+ agentResults[agentId] = {
154
+ agentId,
155
+ agentName,
156
+ phase,
157
+ status: 'skipped',
158
+ startedAt: new Date().toISOString(),
159
+ completedAt: new Date().toISOString(),
160
+ durationMs: 0,
161
+ findings: [{
162
+ id: `license-gate-${agentId}`,
163
+ type: 'infra-issue',
164
+ severity: 'info',
165
+ agentId,
166
+ module: 'license',
167
+ description: message,
168
+ }],
169
+ evidence: [],
170
+ summary: message,
171
+ };
172
+ skippedAgents.push(agentId);
173
+ continue;
174
+ }
175
+ if (PARALLEL_SAFE.has(agentId)) {
176
+ currentBatch.push(agentId);
177
+ }
178
+ else {
179
+ // Flush any accumulated parallel batch first
180
+ if (currentBatch.length > 0) {
181
+ batches.push(currentBatch);
182
+ currentBatch = [];
183
+ }
184
+ // Sequential agent: single-element batch
185
+ batches.push([agentId]);
186
+ }
187
+ }
188
+ // Flush remaining parallel batch
189
+ if (currentBatch.length > 0) {
190
+ batches.push(currentBatch);
191
+ }
192
+ for (const batch of batches) {
193
+ if (budgetExhausted) {
194
+ skippedAgents.push(...batch);
195
+ continue;
196
+ }
197
+ const runAgent = async (agentId) => {
198
+ const agent = this.agents.get(agentId);
199
+ const result = await agent.run();
200
+ agentResults[agentId] = result;
201
+ // Track cost (duration-based placeholder: $0.0001 per second)
202
+ costTracker.trackCost(String(agentId), (result.durationMs / 1000) * 0.0001);
203
+ // Write results to evidence directory
204
+ await writeAgentResult(this.runDir, agentId, result);
205
+ };
206
+ if (batch.length === 1) {
207
+ await runAgent(batch[0]);
208
+ }
209
+ else {
210
+ await Promise.all(batch.map(runAgent));
211
+ }
212
+ // Enforce cost budget after each batch
213
+ const budgetCheck = costTracker.checkBudget();
214
+ if (budgetCheck.status === 'exceeded') {
215
+ const onExceeded = this.config.costBudget.onExceeded;
216
+ if (onExceeded === 'abort' || onExceeded === 'skip-remaining') {
217
+ budgetExhausted = true;
218
+ }
219
+ else {
220
+ console.warn(`[Orchestrator] Cost budget exceeded (total: $${budgetCheck.totalCost.toFixed(4)}) — continuing per alert-continue policy`);
221
+ }
222
+ }
223
+ }
224
+ // Step 5b: Run fix loop for cross-phase agents (Healer/Fixer)
225
+ await this.runFixLoop(agentResults, costTracker);
226
+ // Step 6: Evaluate the phase gate
227
+ const scheduledForPhase = new Set(PHASE_DISPATCH[phase]);
228
+ const gate = evaluateGate(phase, this.config.agentClassification, agentResults, this.config.disabledAgentSet, scheduledForPhase);
229
+ return { gate, agentResults, skippedAgents, costTracker };
230
+ }
231
+ /**
232
+ * After all phase agents complete, classify findings and dispatch cross-phase
233
+ * agents on demand:
234
+ * - Agent 9 (Healer) for test-bug findings
235
+ * - Agent 11 (Fixer) for code-bug findings
236
+ *
237
+ * Iterates up to MAX_FIX_LOOP_ITERATIONS times to prevent infinite heal/fix loops.
238
+ */
239
+ async runFixLoop(agentResults, costTracker) {
240
+ for (let iteration = 0; iteration < MAX_FIX_LOOP_ITERATIONS; iteration++) {
241
+ const allFindings = Object.values(agentResults).flatMap(r => r.findings);
242
+ if (allFindings.length === 0)
243
+ return;
244
+ // changedFiles is empty — we don't track VCS changes during a run
245
+ const changedFiles = [];
246
+ let hasTestBugs = false;
247
+ let hasCodeBugs = false;
248
+ for (const finding of allFindings) {
249
+ const findingType = classifyFinding(finding, changedFiles);
250
+ await writeFinding(this.runDir, { ...finding, type: findingType });
251
+ if (findingType === 'test-bug') {
252
+ hasTestBugs = true;
253
+ }
254
+ else {
255
+ hasCodeBugs = true;
256
+ }
257
+ }
258
+ let dispatched = false;
259
+ // Dispatch Agent 9 (Healer) for test-bugs
260
+ if (hasTestBugs) {
261
+ const healer = this.agents.get(9);
262
+ if (healer && !this.config.disabledAgentSet.has(9)) {
263
+ const result = await healer.run();
264
+ agentResults[9] = result;
265
+ costTracker.trackCost('9', result.durationMs * 0.001);
266
+ await writeAgentResult(this.runDir, 9, result);
267
+ dispatched = true;
268
+ }
269
+ }
270
+ // Dispatch Agent 11 (Fixer) for code-bugs
271
+ if (hasCodeBugs) {
272
+ const fixer = this.agents.get(11);
273
+ if (fixer && !this.config.disabledAgentSet.has(11)) {
274
+ const result = await fixer.run();
275
+ agentResults[11] = result;
276
+ costTracker.trackCost('11', result.durationMs * 0.001);
277
+ await writeAgentResult(this.runDir, 11, result);
278
+ dispatched = true;
279
+ }
280
+ }
281
+ // If no agents were dispatched, no further iterations are needed
282
+ if (!dispatched)
283
+ return;
284
+ }
285
+ }
286
+ /** Get the run directory path. */
287
+ getRunDir() {
288
+ return this.runDir;
289
+ }
290
+ }
291
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../core/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Phase, AgentResult, PhaseGateResult } from './types';
2
+ import type { AgentClassificationConfig } from './config';
3
+ export declare function evaluateGate(phase: Phase, classification: AgentClassificationConfig, results: Record<number, AgentResult>, disabledAgents?: Set<number>, scheduledAgents?: Set<number>): PhaseGateResult;
4
+ //# sourceMappingURL=phase-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-gate.d.ts","sourceRoot":"","sources":["../../core/phase-gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACnE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAE1D,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,yBAAyB,EACzC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,EACpC,cAAc,GAAE,GAAG,CAAC,MAAM,CAAa,EACvC,eAAe,GAAE,GAAG,CAAC,MAAM,CAAa,GACvC,eAAe,CA6CjB"}
@@ -0,0 +1,39 @@
1
+ export function evaluateGate(phase, classification, results, disabledAgents = new Set(), scheduledAgents = new Set()) {
2
+ const failedBlockingAgents = [];
3
+ const blockingResults = [];
4
+ const advisoryResults = [];
5
+ for (const agentId of classification.blocking) {
6
+ if (disabledAgents.has(agentId)) {
7
+ continue;
8
+ }
9
+ // Only evaluate agents that were actually scheduled for this phase
10
+ if (scheduledAgents.size > 0 && !scheduledAgents.has(agentId)) {
11
+ continue;
12
+ }
13
+ const result = results[agentId];
14
+ if (result === undefined || result.status === 'failed') {
15
+ failedBlockingAgents.push(agentId);
16
+ }
17
+ if (result !== undefined) {
18
+ blockingResults.push(result);
19
+ }
20
+ }
21
+ for (const agentId of classification.advisory) {
22
+ if (disabledAgents.has(agentId)) {
23
+ continue;
24
+ }
25
+ const result = results[agentId];
26
+ if (result !== undefined) {
27
+ advisoryResults.push(result);
28
+ }
29
+ }
30
+ return {
31
+ phase,
32
+ passed: failedBlockingAgents.length === 0,
33
+ blockingResults,
34
+ advisoryResults,
35
+ failedBlockingAgents,
36
+ timestamp: new Date().toISOString(),
37
+ };
38
+ }
39
+ //# sourceMappingURL=phase-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase-gate.js","sourceRoot":"","sources":["../../core/phase-gate.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,YAAY,CAC1B,KAAY,EACZ,cAAyC,EACzC,OAAoC,EACpC,iBAA8B,IAAI,GAAG,EAAE,EACvC,kBAA+B,IAAI,GAAG,EAAE;IAExC,MAAM,oBAAoB,GAAa,EAAE,CAAC;IAC1C,MAAM,eAAe,GAAkB,EAAE,CAAC;IAC1C,MAAM,eAAe,GAAkB,EAAE,CAAC;IAE1C,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QAED,mEAAmE;QACnE,IAAI,eAAe,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAEhC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACvD,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;QAC9C,IAAI,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,SAAS;QACX,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK;QACL,MAAM,EAAE,oBAAoB,CAAC,MAAM,KAAK,CAAC;QACzC,eAAe;QACf,eAAe;QACf,oBAAoB;QACpB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { RunState } from './types';
2
+ /**
3
+ * Generates a self-contained HTML report from test run results.
4
+ *
5
+ * The output file contains all CSS and JS inline — no external dependencies.
6
+ * It can be opened directly from the filesystem in any modern browser.
7
+ */
8
+ export declare function generateHTMLReport(state: RunState, outputPath: string): void;
9
+ //# sourceMappingURL=report-html.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-html.d.ts","sourceRoot":"","sources":["../../core/report-html.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAiE,MAAM,SAAS,CAAC;AAqkBvG;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAmE5E"}