@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,167 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import { join } from 'path';
3
+ import { BaseAgent } from './base-agent';
4
+ import { validateCodeQuality } from '../helpers/quality-gate';
5
+ const COVERAGE_DIR = 'coverage';
6
+ const GENERATED_TESTS_DIR = 'tests/generated';
7
+ const VITEST_CONFIG_PATHS = ['vitest.config.ts', 'vitest.config.js', 'vite.config.ts'];
8
+ async function fileExists(p) {
9
+ try {
10
+ await stat(p);
11
+ return true;
12
+ }
13
+ catch {
14
+ return false;
15
+ }
16
+ }
17
+ async function findCoverageJsonFiles(dir) {
18
+ try {
19
+ const entries = await readdir(dir);
20
+ return entries.filter((f) => f.endsWith('.json')).map((f) => join(dir, f));
21
+ }
22
+ catch {
23
+ return [];
24
+ }
25
+ }
26
+ async function parseCoverageSummary(filePath) {
27
+ try {
28
+ const raw = await readFile(filePath, 'utf8');
29
+ const parsed = JSON.parse(raw);
30
+ if (parsed !== null && typeof parsed === 'object' && 'total' in parsed) {
31
+ return parsed;
32
+ }
33
+ return null;
34
+ }
35
+ catch {
36
+ return null;
37
+ }
38
+ }
39
+ async function findGeneratedTestFiles(dir) {
40
+ try {
41
+ const entries = await readdir(dir);
42
+ return entries
43
+ .filter((f) => f.endsWith('.ts') || f.endsWith('.tsx') || f.endsWith('.js'))
44
+ .map((f) => join(dir, f));
45
+ }
46
+ catch {
47
+ return [];
48
+ }
49
+ }
50
+ export class TestGeneratorAgent extends BaseAgent {
51
+ agentId = 3;
52
+ agentName = 'Test Generator';
53
+ async preFlight() {
54
+ // Audit: verify coverage data availability (advisory only — may not exist on first run)
55
+ const coverageFiles = await findCoverageJsonFiles(COVERAGE_DIR);
56
+ if (coverageFiles.length === 0) {
57
+ // Advisory — not a hard pre-flight failure; coverage may not exist on first run
58
+ }
59
+ // Validate: verify vitest config is present so generated tests can actually run
60
+ const vitestConfigChecks = await Promise.all(VITEST_CONFIG_PATHS.map((p) => fileExists(p)));
61
+ const vitestConfigExists = vitestConfigChecks.some(Boolean);
62
+ if (!vitestConfigExists) {
63
+ // Advisory only — project may use a differently-named config
64
+ }
65
+ // Pre-check: note whether generated tests directory exists
66
+ const generatedDirExists = await fileExists(GENERATED_TESTS_DIR);
67
+ if (!generatedDirExists) {
68
+ // Advisory — directory will be created when tests are first generated
69
+ }
70
+ }
71
+ async execute() {
72
+ const findings = [];
73
+ // -----------------------------------------------------------------------
74
+ // Phase 1: Coverage gap detection
75
+ // -----------------------------------------------------------------------
76
+ const coverageFiles = await findCoverageJsonFiles(COVERAGE_DIR);
77
+ if (coverageFiles.length === 0) {
78
+ findings.push({
79
+ id: '3-no-coverage-data',
80
+ type: 'code-bug-logic',
81
+ severity: 'medium',
82
+ agentId: this.agentId,
83
+ module: 'test-coverage',
84
+ description: 'Coverage analysis not available: no JSON files found in coverage/. ' +
85
+ 'Run vitest with --coverage to generate coverage data.',
86
+ });
87
+ }
88
+ else {
89
+ const thresholds = this.config.thresholds.unitCoverage;
90
+ for (const filePath of coverageFiles) {
91
+ const summary = await parseCoverageSummary(filePath);
92
+ if (!summary)
93
+ continue;
94
+ this.addEvidence({
95
+ type: 'report',
96
+ path: filePath,
97
+ description: `Coverage summary from ${filePath}`,
98
+ });
99
+ for (const [entry, coverage] of Object.entries(summary)) {
100
+ if (entry === 'total')
101
+ continue;
102
+ const gaps = [];
103
+ if (coverage.lines.pct < thresholds.lines) {
104
+ gaps.push(`lines ${coverage.lines.pct.toFixed(1)}% < ${thresholds.lines}%`);
105
+ }
106
+ if (coverage.functions.pct < thresholds.functions) {
107
+ gaps.push(`functions ${coverage.functions.pct.toFixed(1)}% < ${thresholds.functions}%`);
108
+ }
109
+ if (coverage.branches.pct < thresholds.branches) {
110
+ gaps.push(`branches ${coverage.branches.pct.toFixed(1)}% < ${thresholds.branches}%`);
111
+ }
112
+ if (coverage.statements.pct < thresholds.statements) {
113
+ gaps.push(`statements ${coverage.statements.pct.toFixed(1)}% < ${thresholds.statements}%`);
114
+ }
115
+ if (gaps.length > 0) {
116
+ findings.push({
117
+ id: `3-coverage-gap-${entry.replace(/[^a-zA-Z0-9]/g, '-').slice(0, 60)}`,
118
+ type: 'code-bug-logic',
119
+ severity: 'medium',
120
+ agentId: this.agentId,
121
+ module: 'test-coverage',
122
+ description: `Coverage below threshold for "${entry}": ${gaps.join(', ')}`,
123
+ file: entry,
124
+ });
125
+ }
126
+ }
127
+ }
128
+ }
129
+ // -----------------------------------------------------------------------
130
+ // Phase 2: Quality gate on generated test files
131
+ // AVI-OS: validate code quality of any previously generated tests
132
+ // -----------------------------------------------------------------------
133
+ const generatedTestFiles = await findGeneratedTestFiles(GENERATED_TESTS_DIR);
134
+ for (const testFilePath of generatedTestFiles) {
135
+ let fileContent;
136
+ try {
137
+ fileContent = await readFile(testFilePath, 'utf-8');
138
+ }
139
+ catch {
140
+ // If we cannot read the file, skip it silently
141
+ continue;
142
+ }
143
+ const violations = validateCodeQuality(fileContent, testFilePath);
144
+ for (const violation of violations) {
145
+ findings.push({
146
+ id: `3-quality-violation-${testFilePath.replace(/[^a-zA-Z0-9]/g, '-').slice(-50)}-L${violation.line ?? 0}`,
147
+ type: 'code-bug-logic',
148
+ severity: violation.severity === 'error' ? 'high' : 'medium',
149
+ agentId: this.agentId,
150
+ module: 'test-quality-gate',
151
+ description: `Quality violation in generated test "${testFilePath}" [${violation.rule}]: ${violation.message}`,
152
+ file: testFilePath,
153
+ suggestedFix: `Fix the ${violation.rule} violation to comply with AVI-OS coding quality standards`,
154
+ });
155
+ }
156
+ if (violations.length === 0) {
157
+ this.addEvidence({
158
+ type: 'log',
159
+ path: testFilePath,
160
+ description: `Quality gate passed for generated test: ${testFilePath}`,
161
+ });
162
+ }
163
+ }
164
+ return findings;
165
+ }
166
+ }
167
+ //# sourceMappingURL=03-test-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"03-test-generator.js","sourceRoot":"","sources":["../../agents/03-test-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Finding } from '../core/types';
2
+ import { BaseAgent } from './base-agent';
3
+ export declare class UnitRunnerAgent extends BaseAgent {
4
+ readonly agentId = 4;
5
+ readonly agentName = "Unit Runner";
6
+ protected preFlight(): Promise<void>;
7
+ protected execute(): Promise<Finding[]>;
8
+ }
9
+ //# sourceMappingURL=04-unit-runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"04-unit-runner.d.ts","sourceRoot":"","sources":["../../agents/04-unit-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAuDzC,qBAAa,eAAgB,SAAQ,SAAS;IAC5C,QAAQ,CAAC,OAAO,KAAK;IACrB,QAAQ,CAAC,SAAS,iBAAiB;cAEnB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;cAe1B,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CAkF9C"}
@@ -0,0 +1,113 @@
1
+ import { execFile } from 'child_process';
2
+ import { join } from 'path';
3
+ import { BaseAgent } from './base-agent';
4
+ function execFileAsync(file, args, cwd) {
5
+ return new Promise((resolve, reject) => {
6
+ execFile(file, args, { maxBuffer: 10 * 1024 * 1024, shell: true, cwd: cwd ?? process.cwd() }, (error, stdout, stderr) => {
7
+ // vitest exits with non-zero when tests fail — capture output regardless
8
+ if (error && !stdout) {
9
+ reject(error);
10
+ return;
11
+ }
12
+ resolve({ stdout: stdout ?? '', stderr: stderr ?? '' });
13
+ });
14
+ });
15
+ }
16
+ const DEFAULT_SUITE_CONFIGS = [
17
+ { label: 'root', args: ['vitest', 'run', '--reporter=json'] },
18
+ { label: 'api', args: ['vitest', 'run', '--reporter=json'], cwd: 'apps/api' },
19
+ { label: 'workers', args: ['vitest', 'run', '--reporter=json'], cwd: 'apps/workers' },
20
+ ];
21
+ export class UnitRunnerAgent extends BaseAgent {
22
+ agentId = 4;
23
+ agentName = 'Unit Runner';
24
+ async preFlight() {
25
+ const projectRoot = this.config.projectRoot ?? process.cwd();
26
+ const { stdout } = await execFileAsync('npx', ['vitest', '--version'], projectRoot);
27
+ if (!stdout.trim()) {
28
+ throw new Error('vitest is not available: no version output from npx vitest --version');
29
+ }
30
+ // Build workspace packages so cross-references resolve (e.g. @basandmore/shared)
31
+ try {
32
+ await execFileAsync('npx', ['prisma', 'generate'], projectRoot);
33
+ await execFileAsync('npx', ['pnpm', '--filter', '@basandmore/shared', 'run', 'build'], projectRoot);
34
+ }
35
+ catch {
36
+ // Non-fatal: monorepo build step is best-effort
37
+ }
38
+ }
39
+ async execute() {
40
+ const findings = [];
41
+ for (const suite of DEFAULT_SUITE_CONFIGS) {
42
+ const reportPath = join(this.runDir, `vitest-${suite.label}-report.json`);
43
+ let stdout = '';
44
+ let stderr = '';
45
+ try {
46
+ const projectRoot = this.config.projectRoot ?? process.cwd();
47
+ const suiteCwd = suite.cwd ? join(projectRoot, suite.cwd) : projectRoot;
48
+ ({ stdout, stderr } = await execFileAsync('npx', suite.args, suiteCwd));
49
+ }
50
+ catch (err) {
51
+ findings.push({
52
+ id: `4-suite-${suite.label}-exec-error`,
53
+ type: 'infra-issue',
54
+ severity: 'high',
55
+ agentId: this.agentId,
56
+ module: `unit-tests-${suite.label}`,
57
+ description: `Failed to run vitest suite "${suite.label}": ${err instanceof Error ? err.message : String(err)}`,
58
+ });
59
+ continue;
60
+ }
61
+ this.addEvidence({
62
+ type: 'log',
63
+ path: reportPath,
64
+ description: `Vitest JSON report for ${suite.label} suite`,
65
+ });
66
+ let report = null;
67
+ try {
68
+ // vitest --reporter=json writes JSON to stdout
69
+ const jsonStart = stdout.indexOf('{');
70
+ if (jsonStart !== -1) {
71
+ report = JSON.parse(stdout.slice(jsonStart));
72
+ }
73
+ }
74
+ catch {
75
+ findings.push({
76
+ id: `4-suite-${suite.label}-parse-error`,
77
+ type: 'infra-issue',
78
+ severity: 'high',
79
+ agentId: this.agentId,
80
+ module: `unit-tests-${suite.label}`,
81
+ description: `Could not parse vitest JSON output for suite "${suite.label}". stderr: ${stderr.slice(0, 500)}`,
82
+ });
83
+ continue;
84
+ }
85
+ if (report === null) {
86
+ findings.push({
87
+ id: `4-suite-${suite.label}-no-output`,
88
+ type: 'infra-issue',
89
+ severity: 'high',
90
+ agentId: this.agentId,
91
+ module: `unit-tests-${suite.label}`,
92
+ description: `No JSON output from vitest suite "${suite.label}". stderr: ${stderr.slice(0, 500)}`,
93
+ });
94
+ continue;
95
+ }
96
+ const failedAssertions = report.testResults.flatMap((tr) => tr.assertionResults.filter((ar) => ar.status === 'failed'));
97
+ for (const failedAssertion of failedAssertions) {
98
+ const safeId = failedAssertion.fullName.replace(/\s+/g, '-').slice(0, 60);
99
+ findings.push({
100
+ id: `4-${suite.label}-${safeId}`,
101
+ type: 'test-bug',
102
+ severity: 'high',
103
+ agentId: this.agentId,
104
+ module: `unit-tests-${suite.label}`,
105
+ description: `Test failed: ${failedAssertion.fullName}`,
106
+ stackTrace: failedAssertion.failureMessages.join('\n'),
107
+ });
108
+ }
109
+ }
110
+ return findings;
111
+ }
112
+ }
113
+ //# sourceMappingURL=04-unit-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"04-unit-runner.js","sourceRoot":"","sources":["../../agents/04-unit-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { Finding } from '../core/types';
2
+ import { BaseAgent } from './base-agent';
3
+ export declare class BrowserCrawlerAgent extends BaseAgent {
4
+ readonly agentId = 5;
5
+ readonly agentName = "Browser Crawler";
6
+ protected preFlight(): Promise<void>;
7
+ protected execute(): Promise<Finding[]>;
8
+ private executeSmoke;
9
+ private executeRelease;
10
+ private executeBeta;
11
+ private executeUat;
12
+ /**
13
+ * UAT edge-case pass: visit each module and attempt inputs with empty strings,
14
+ * unicode characters, emoji, and max-length strings to probe boundary handling.
15
+ */
16
+ private runUatEdgeCases;
17
+ /**
18
+ * UAT destructive pass: for each destructive element discovered, snapshot the entity
19
+ * state via API, execute the action, verify outcome, then restore via API.
20
+ * If restore fails → log critical finding and stop further destructive tests.
21
+ */
22
+ private runUatDestructivePass;
23
+ /**
24
+ * For each module: navigate, discover interactive elements, interact with
25
+ * non-destructive ones, fill + submit forms, open/close modals.
26
+ * Returns findings discovered in this pass; does NOT push to the outer array directly.
27
+ */
28
+ private runInteractionPass;
29
+ }
30
+ //# sourceMappingURL=05-browser-crawler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"05-browser-crawler.d.ts","sourceRoot":"","sources":["../../agents/05-browser-crawler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAqBzC,qBAAa,mBAAoB,SAAQ,SAAS;IAChD,QAAQ,CAAC,OAAO,KAAK;IACrB,QAAQ,CAAC,SAAS,qBAAqB;cAEvB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;cAa1B,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAgB/B,YAAY;YA6IZ,cAAc;YA0Gd,WAAW;YAmGX,UAAU;IAgGxB;;;OAGG;YACW,eAAe;IAgE7B;;;;OAIG;YACW,qBAAqB;IAoGnC;;;;OAIG;YACW,kBAAkB;CA+GjC"}