@yasserkhanorg/impact-gate 2.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 (587) hide show
  1. package/LICENSE +168 -0
  2. package/README.md +520 -0
  3. package/dist/adapters/cypress.d.ts +10 -0
  4. package/dist/adapters/cypress.d.ts.map +1 -0
  5. package/dist/adapters/cypress.js +86 -0
  6. package/dist/adapters/framework_adapter.d.ts +41 -0
  7. package/dist/adapters/framework_adapter.d.ts.map +1 -0
  8. package/dist/adapters/framework_adapter.js +152 -0
  9. package/dist/adapters/playwright.d.ts +10 -0
  10. package/dist/adapters/playwright.d.ts.map +1 -0
  11. package/dist/adapters/playwright.js +86 -0
  12. package/dist/adapters/pytest.d.ts +10 -0
  13. package/dist/adapters/pytest.d.ts.map +1 -0
  14. package/dist/adapters/pytest.js +96 -0
  15. package/dist/adapters/supertest.d.ts +12 -0
  16. package/dist/adapters/supertest.d.ts.map +1 -0
  17. package/dist/adapters/supertest.js +85 -0
  18. package/dist/agent/api_catalog.d.ts +11 -0
  19. package/dist/agent/api_catalog.d.ts.map +1 -0
  20. package/dist/agent/api_catalog.js +210 -0
  21. package/dist/agent/config.d.ts +193 -0
  22. package/dist/agent/config.d.ts.map +1 -0
  23. package/dist/agent/config.js +875 -0
  24. package/dist/agent/feedback.d.ts +91 -0
  25. package/dist/agent/feedback.d.ts.map +1 -0
  26. package/dist/agent/feedback.js +323 -0
  27. package/dist/agent/git.d.ts +19 -0
  28. package/dist/agent/git.d.ts.map +1 -0
  29. package/dist/agent/git.js +257 -0
  30. package/dist/agent/handoff.d.ts +22 -0
  31. package/dist/agent/handoff.d.ts.map +1 -0
  32. package/dist/agent/handoff.js +180 -0
  33. package/dist/agent/llm_agents_flow.d.ts +15 -0
  34. package/dist/agent/llm_agents_flow.d.ts.map +1 -0
  35. package/dist/agent/llm_agents_flow.js +434 -0
  36. package/dist/agent/native_flow.d.ts +6 -0
  37. package/dist/agent/native_flow.d.ts.map +1 -0
  38. package/dist/agent/native_flow.js +179 -0
  39. package/dist/agent/pipeline.d.ts +7 -0
  40. package/dist/agent/pipeline.d.ts.map +1 -0
  41. package/dist/agent/pipeline.js +260 -0
  42. package/dist/agent/pipeline_types.d.ts +54 -0
  43. package/dist/agent/pipeline_types.d.ts.map +1 -0
  44. package/dist/agent/pipeline_types.js +4 -0
  45. package/dist/agent/pipeline_utils.d.ts +12 -0
  46. package/dist/agent/pipeline_utils.d.ts.map +1 -0
  47. package/dist/agent/pipeline_utils.js +156 -0
  48. package/dist/agent/plan.d.ts +170 -0
  49. package/dist/agent/plan.d.ts.map +1 -0
  50. package/dist/agent/plan.js +86 -0
  51. package/dist/agent/playwright_report.d.ts +8 -0
  52. package/dist/agent/playwright_report.d.ts.map +1 -0
  53. package/dist/agent/playwright_report.js +126 -0
  54. package/dist/agent/process_runner.d.ts +10 -0
  55. package/dist/agent/process_runner.d.ts.map +1 -0
  56. package/dist/agent/process_runner.js +92 -0
  57. package/dist/agent/spec_generator.d.ts +5 -0
  58. package/dist/agent/spec_generator.d.ts.map +1 -0
  59. package/dist/agent/spec_generator.js +253 -0
  60. package/dist/agent/test_path.d.ts +2 -0
  61. package/dist/agent/test_path.d.ts.map +1 -0
  62. package/dist/agent/test_path.js +23 -0
  63. package/dist/agent/traceability_capture.d.ts +18 -0
  64. package/dist/agent/traceability_capture.d.ts.map +1 -0
  65. package/dist/agent/traceability_capture.js +313 -0
  66. package/dist/agent/traceability_ingest.d.ts +21 -0
  67. package/dist/agent/traceability_ingest.d.ts.map +1 -0
  68. package/dist/agent/traceability_ingest.js +237 -0
  69. package/dist/agent/types.d.ts +42 -0
  70. package/dist/agent/types.d.ts.map +1 -0
  71. package/dist/agent/types.js +4 -0
  72. package/dist/agent/utils.d.ts +13 -0
  73. package/dist/agent/utils.d.ts.map +1 -0
  74. package/dist/agent/utils.js +152 -0
  75. package/dist/agent/validation_runner.d.ts +5 -0
  76. package/dist/agent/validation_runner.d.ts.map +1 -0
  77. package/dist/agent/validation_runner.js +77 -0
  78. package/dist/agentic/fix_loop.d.ts +26 -0
  79. package/dist/agentic/fix_loop.d.ts.map +1 -0
  80. package/dist/agentic/fix_loop.js +96 -0
  81. package/dist/agentic/playwright_runner.d.ts +43 -0
  82. package/dist/agentic/playwright_runner.d.ts.map +1 -0
  83. package/dist/agentic/playwright_runner.js +165 -0
  84. package/dist/agentic/runner.d.ts +27 -0
  85. package/dist/agentic/runner.d.ts.map +1 -0
  86. package/dist/agentic/runner.js +210 -0
  87. package/dist/agentic/types.d.ts +62 -0
  88. package/dist/agentic/types.d.ts.map +1 -0
  89. package/dist/agentic/types.js +4 -0
  90. package/dist/agents/coverage-evaluator.d.ts +8 -0
  91. package/dist/agents/coverage-evaluator.d.ts.map +1 -0
  92. package/dist/agents/coverage-evaluator.js +41 -0
  93. package/dist/agents/cross-impact.d.ts +13 -0
  94. package/dist/agents/cross-impact.d.ts.map +1 -0
  95. package/dist/agents/cross-impact.js +140 -0
  96. package/dist/agents/executor.d.ts +8 -0
  97. package/dist/agents/executor.d.ts.map +1 -0
  98. package/dist/agents/executor.js +75 -0
  99. package/dist/agents/explorer.d.ts +12 -0
  100. package/dist/agents/explorer.d.ts.map +1 -0
  101. package/dist/agents/explorer.js +43 -0
  102. package/dist/agents/generator.d.ts +8 -0
  103. package/dist/agents/generator.d.ts.map +1 -0
  104. package/dist/agents/generator.js +77 -0
  105. package/dist/agents/healer.d.ts +8 -0
  106. package/dist/agents/healer.d.ts.map +1 -0
  107. package/dist/agents/healer.js +31 -0
  108. package/dist/agents/impact-analyst.d.ts +8 -0
  109. package/dist/agents/impact-analyst.d.ts.map +1 -0
  110. package/dist/agents/impact-analyst.js +38 -0
  111. package/dist/agents/regression-advisor.d.ts +8 -0
  112. package/dist/agents/regression-advisor.d.ts.map +1 -0
  113. package/dist/agents/regression-advisor.js +116 -0
  114. package/dist/agents/strategist.d.ts +9 -0
  115. package/dist/agents/strategist.d.ts.map +1 -0
  116. package/dist/agents/strategist.js +92 -0
  117. package/dist/agents/test-designer.d.ts +8 -0
  118. package/dist/agents/test-designer.d.ts.map +1 -0
  119. package/dist/agents/test-designer.js +111 -0
  120. package/dist/anthropic_provider.d.ts +65 -0
  121. package/dist/anthropic_provider.d.ts.map +1 -0
  122. package/dist/anthropic_provider.js +334 -0
  123. package/dist/api.d.ts +48 -0
  124. package/dist/api.d.ts.map +1 -0
  125. package/dist/api.js +151 -0
  126. package/dist/base_provider.d.ts +109 -0
  127. package/dist/base_provider.d.ts.map +1 -0
  128. package/dist/base_provider.js +203 -0
  129. package/dist/budget_ledger.d.ts +28 -0
  130. package/dist/budget_ledger.d.ts.map +1 -0
  131. package/dist/budget_ledger.js +62 -0
  132. package/dist/cache/cached_provider.d.ts +49 -0
  133. package/dist/cache/cached_provider.d.ts.map +1 -0
  134. package/dist/cache/cached_provider.js +91 -0
  135. package/dist/cache/response_cache.d.ts +79 -0
  136. package/dist/cache/response_cache.d.ts.map +1 -0
  137. package/dist/cache/response_cache.js +177 -0
  138. package/dist/cli/commands/analyze.d.ts +3 -0
  139. package/dist/cli/commands/analyze.d.ts.map +1 -0
  140. package/dist/cli/commands/analyze.js +77 -0
  141. package/dist/cli/commands/bootstrap.d.ts +3 -0
  142. package/dist/cli/commands/bootstrap.d.ts.map +1 -0
  143. package/dist/cli/commands/bootstrap.js +109 -0
  144. package/dist/cli/commands/cost_report.d.ts +3 -0
  145. package/dist/cli/commands/cost_report.d.ts.map +1 -0
  146. package/dist/cli/commands/cost_report.js +115 -0
  147. package/dist/cli/commands/crew.d.ts +3 -0
  148. package/dist/cli/commands/crew.d.ts.map +1 -0
  149. package/dist/cli/commands/crew.js +255 -0
  150. package/dist/cli/commands/feedback.d.ts +3 -0
  151. package/dist/cli/commands/feedback.d.ts.map +1 -0
  152. package/dist/cli/commands/feedback.js +39 -0
  153. package/dist/cli/commands/finalize.d.ts +3 -0
  154. package/dist/cli/commands/finalize.d.ts.map +1 -0
  155. package/dist/cli/commands/finalize.js +41 -0
  156. package/dist/cli/commands/gate.d.ts +3 -0
  157. package/dist/cli/commands/gate.d.ts.map +1 -0
  158. package/dist/cli/commands/gate.js +89 -0
  159. package/dist/cli/commands/generate.d.ts +4 -0
  160. package/dist/cli/commands/generate.d.ts.map +1 -0
  161. package/dist/cli/commands/generate.js +108 -0
  162. package/dist/cli/commands/heal.d.ts +3 -0
  163. package/dist/cli/commands/heal.d.ts.map +1 -0
  164. package/dist/cli/commands/heal.js +60 -0
  165. package/dist/cli/commands/impact.d.ts +4 -0
  166. package/dist/cli/commands/impact.d.ts.map +1 -0
  167. package/dist/cli/commands/impact.js +33 -0
  168. package/dist/cli/commands/init.d.ts +2 -0
  169. package/dist/cli/commands/init.d.ts.map +1 -0
  170. package/dist/cli/commands/init.js +169 -0
  171. package/dist/cli/commands/llm_health.d.ts +2 -0
  172. package/dist/cli/commands/llm_health.d.ts.map +1 -0
  173. package/dist/cli/commands/llm_health.js +22 -0
  174. package/dist/cli/commands/plan.d.ts +4 -0
  175. package/dist/cli/commands/plan.d.ts.map +1 -0
  176. package/dist/cli/commands/plan.js +120 -0
  177. package/dist/cli/commands/plan_crew.d.ts +17 -0
  178. package/dist/cli/commands/plan_crew.d.ts.map +1 -0
  179. package/dist/cli/commands/plan_crew.js +316 -0
  180. package/dist/cli/commands/traceability.d.ts +4 -0
  181. package/dist/cli/commands/traceability.d.ts.map +1 -0
  182. package/dist/cli/commands/traceability.js +77 -0
  183. package/dist/cli/commands/train.d.ts +3 -0
  184. package/dist/cli/commands/train.d.ts.map +1 -0
  185. package/dist/cli/commands/train.js +391 -0
  186. package/dist/cli/defaults.d.ts +35 -0
  187. package/dist/cli/defaults.d.ts.map +1 -0
  188. package/dist/cli/defaults.js +172 -0
  189. package/dist/cli/errors.d.ts +27 -0
  190. package/dist/cli/errors.d.ts.map +1 -0
  191. package/dist/cli/errors.js +57 -0
  192. package/dist/cli/parse_args.d.ts +6 -0
  193. package/dist/cli/parse_args.d.ts.map +1 -0
  194. package/dist/cli/parse_args.js +257 -0
  195. package/dist/cli/types.d.ts +87 -0
  196. package/dist/cli/types.d.ts.map +1 -0
  197. package/dist/cli/types.js +4 -0
  198. package/dist/cli/usage.d.ts +2 -0
  199. package/dist/cli/usage.d.ts.map +1 -0
  200. package/dist/cli/usage.js +109 -0
  201. package/dist/cli.d.ts +3 -0
  202. package/dist/cli.d.ts.map +1 -0
  203. package/dist/cli.js +194 -0
  204. package/dist/crew/context.d.ts +55 -0
  205. package/dist/crew/context.d.ts.map +1 -0
  206. package/dist/crew/context.js +36 -0
  207. package/dist/crew/orchestrator.d.ts +50 -0
  208. package/dist/crew/orchestrator.d.ts.map +1 -0
  209. package/dist/crew/orchestrator.js +329 -0
  210. package/dist/crew/protocol.d.ts +46 -0
  211. package/dist/crew/protocol.d.ts.map +1 -0
  212. package/dist/crew/protocol.js +4 -0
  213. package/dist/crew/provider.d.ts +17 -0
  214. package/dist/crew/provider.d.ts.map +1 -0
  215. package/dist/crew/provider.js +36 -0
  216. package/dist/crew/sanitize.d.ts +3 -0
  217. package/dist/crew/sanitize.d.ts.map +1 -0
  218. package/dist/crew/sanitize.js +31 -0
  219. package/dist/crew/types.d.ts +52 -0
  220. package/dist/crew/types.d.ts.map +1 -0
  221. package/dist/crew/types.js +4 -0
  222. package/dist/crew/workflows.d.ts +52 -0
  223. package/dist/crew/workflows.d.ts.map +1 -0
  224. package/dist/crew/workflows.js +36 -0
  225. package/dist/custom_provider.d.ts +20 -0
  226. package/dist/custom_provider.d.ts.map +1 -0
  227. package/dist/custom_provider.js +277 -0
  228. package/dist/engine/ai_enrichment.d.ts +44 -0
  229. package/dist/engine/ai_enrichment.d.ts.map +1 -0
  230. package/dist/engine/ai_enrichment.js +267 -0
  231. package/dist/engine/diff_loader.d.ts +11 -0
  232. package/dist/engine/diff_loader.d.ts.map +1 -0
  233. package/dist/engine/diff_loader.js +63 -0
  234. package/dist/engine/impact_engine.d.ts +72 -0
  235. package/dist/engine/impact_engine.d.ts.map +1 -0
  236. package/dist/engine/impact_engine.js +298 -0
  237. package/dist/engine/plan_builder.d.ts +11 -0
  238. package/dist/engine/plan_builder.d.ts.map +1 -0
  239. package/dist/engine/plan_builder.js +599 -0
  240. package/dist/esm/adapters/cypress.js +49 -0
  241. package/dist/esm/adapters/framework_adapter.js +114 -0
  242. package/dist/esm/adapters/playwright.js +49 -0
  243. package/dist/esm/adapters/pytest.js +59 -0
  244. package/dist/esm/adapters/supertest.js +48 -0
  245. package/dist/esm/agent/api_catalog.js +199 -0
  246. package/dist/esm/agent/config.js +872 -0
  247. package/dist/esm/agent/feedback.js +317 -0
  248. package/dist/esm/agent/git.js +252 -0
  249. package/dist/esm/agent/handoff.js +177 -0
  250. package/dist/esm/agent/llm_agents_flow.js +421 -0
  251. package/dist/esm/agent/native_flow.js +175 -0
  252. package/dist/esm/agent/pipeline.js +256 -0
  253. package/dist/esm/agent/pipeline_types.js +3 -0
  254. package/dist/esm/agent/pipeline_utils.js +146 -0
  255. package/dist/esm/agent/plan.js +83 -0
  256. package/dist/esm/agent/playwright_report.js +123 -0
  257. package/dist/esm/agent/process_runner.js +83 -0
  258. package/dist/esm/agent/spec_generator.js +249 -0
  259. package/dist/esm/agent/test_path.js +20 -0
  260. package/dist/esm/agent/traceability_capture.js +310 -0
  261. package/dist/esm/agent/traceability_ingest.js +234 -0
  262. package/dist/esm/agent/types.js +3 -0
  263. package/dist/esm/agent/utils.js +138 -0
  264. package/dist/esm/agent/validation_runner.js +73 -0
  265. package/dist/esm/agentic/fix_loop.js +91 -0
  266. package/dist/esm/agentic/playwright_runner.js +161 -0
  267. package/dist/esm/agentic/runner.js +207 -0
  268. package/dist/esm/agentic/types.js +3 -0
  269. package/dist/esm/agents/coverage-evaluator.js +37 -0
  270. package/dist/esm/agents/cross-impact.js +136 -0
  271. package/dist/esm/agents/executor.js +71 -0
  272. package/dist/esm/agents/explorer.js +39 -0
  273. package/dist/esm/agents/generator.js +73 -0
  274. package/dist/esm/agents/healer.js +27 -0
  275. package/dist/esm/agents/impact-analyst.js +34 -0
  276. package/dist/esm/agents/regression-advisor.js +112 -0
  277. package/dist/esm/agents/strategist.js +88 -0
  278. package/dist/esm/agents/test-designer.js +107 -0
  279. package/dist/esm/anthropic_provider.js +326 -0
  280. package/dist/esm/api.js +143 -0
  281. package/dist/esm/base_provider.js +198 -0
  282. package/dist/esm/budget_ledger.js +58 -0
  283. package/dist/esm/cache/cached_provider.js +85 -0
  284. package/dist/esm/cache/response_cache.js +140 -0
  285. package/dist/esm/cli/commands/analyze.js +74 -0
  286. package/dist/esm/cli/commands/bootstrap.js +106 -0
  287. package/dist/esm/cli/commands/cost_report.js +112 -0
  288. package/dist/esm/cli/commands/crew.js +252 -0
  289. package/dist/esm/cli/commands/feedback.js +36 -0
  290. package/dist/esm/cli/commands/finalize.js +38 -0
  291. package/dist/esm/cli/commands/gate.js +86 -0
  292. package/dist/esm/cli/commands/generate.js +105 -0
  293. package/dist/esm/cli/commands/heal.js +57 -0
  294. package/dist/esm/cli/commands/impact.js +30 -0
  295. package/dist/esm/cli/commands/init.js +133 -0
  296. package/dist/esm/cli/commands/llm_health.js +19 -0
  297. package/dist/esm/cli/commands/plan.js +117 -0
  298. package/dist/esm/cli/commands/plan_crew.js +309 -0
  299. package/dist/esm/cli/commands/traceability.js +73 -0
  300. package/dist/esm/cli/commands/train.js +355 -0
  301. package/dist/esm/cli/defaults.js +165 -0
  302. package/dist/esm/cli/errors.js +52 -0
  303. package/dist/esm/cli/parse_args.js +251 -0
  304. package/dist/esm/cli/types.js +3 -0
  305. package/dist/esm/cli/usage.js +106 -0
  306. package/dist/esm/cli.js +192 -0
  307. package/dist/esm/crew/context.js +32 -0
  308. package/dist/esm/crew/orchestrator.js +325 -0
  309. package/dist/esm/crew/protocol.js +3 -0
  310. package/dist/esm/crew/provider.js +33 -0
  311. package/dist/esm/crew/sanitize.js +27 -0
  312. package/dist/esm/crew/types.js +3 -0
  313. package/dist/esm/crew/workflows.js +33 -0
  314. package/dist/esm/custom_provider.js +273 -0
  315. package/dist/esm/engine/ai_enrichment.js +264 -0
  316. package/dist/esm/engine/diff_loader.js +59 -0
  317. package/dist/esm/engine/impact_engine.js +291 -0
  318. package/dist/esm/engine/plan_builder.js +593 -0
  319. package/dist/esm/index.js +72 -0
  320. package/dist/esm/knowledge/api_surface.js +408 -0
  321. package/dist/esm/knowledge/cluster_utils.js +60 -0
  322. package/dist/esm/knowledge/context_loader.js +85 -0
  323. package/dist/esm/knowledge/failure_history.js +121 -0
  324. package/dist/esm/knowledge/kg_bridge.js +381 -0
  325. package/dist/esm/knowledge/kg_types.js +3 -0
  326. package/dist/esm/knowledge/route_families.js +393 -0
  327. package/dist/esm/knowledge/spec_index.js +122 -0
  328. package/dist/esm/logger.js +115 -0
  329. package/dist/esm/mcp-server.js +621 -0
  330. package/dist/esm/metrics/prometheus.js +149 -0
  331. package/dist/esm/model_router.js +59 -0
  332. package/dist/esm/ollama_provider.js +301 -0
  333. package/dist/esm/openai_provider.js +243 -0
  334. package/dist/esm/package.json +3 -0
  335. package/dist/esm/pipeline/orchestrator.js +228 -0
  336. package/dist/esm/pipeline/spec_verifier.js +75 -0
  337. package/dist/esm/pipeline/stage0_preprocess.js +102 -0
  338. package/dist/esm/pipeline/stage1_impact.js +140 -0
  339. package/dist/esm/pipeline/stage2_coverage.js +153 -0
  340. package/dist/esm/pipeline/stage3_generation.js +284 -0
  341. package/dist/esm/pipeline/stage4_heal.js +288 -0
  342. package/dist/esm/progress.js +112 -0
  343. package/dist/esm/prompts/coverage.js +57 -0
  344. package/dist/esm/prompts/cross-impact.js +53 -0
  345. package/dist/esm/prompts/generation.js +297 -0
  346. package/dist/esm/prompts/generation_profile.js +147 -0
  347. package/dist/esm/prompts/heal.js +91 -0
  348. package/dist/esm/prompts/impact.js +63 -0
  349. package/dist/esm/prompts/json_extract.js +36 -0
  350. package/dist/esm/prompts/strategist.js +61 -0
  351. package/dist/esm/prompts/test-designer.js +92 -0
  352. package/dist/esm/provider_factory.js +366 -0
  353. package/dist/esm/provider_interface.js +23 -0
  354. package/dist/esm/provider_utils.js +96 -0
  355. package/dist/esm/qa-agent/cli.js +205 -0
  356. package/dist/esm/qa-agent/orchestrator.js +120 -0
  357. package/dist/esm/qa-agent/phase1/runner.js +139 -0
  358. package/dist/esm/qa-agent/phase1/scope.js +126 -0
  359. package/dist/esm/qa-agent/phase2/agent_browser.js +95 -0
  360. package/dist/esm/qa-agent/phase2/agent_loop.js +351 -0
  361. package/dist/esm/qa-agent/phase2/exploration_state.js +97 -0
  362. package/dist/esm/qa-agent/phase2/tools.js +386 -0
  363. package/dist/esm/qa-agent/phase2/vision.js +75 -0
  364. package/dist/esm/qa-agent/phase3/feedback.js +34 -0
  365. package/dist/esm/qa-agent/phase3/reporter.js +145 -0
  366. package/dist/esm/qa-agent/phase3/spec_generator.js +62 -0
  367. package/dist/esm/qa-agent/phase3/verdict.js +66 -0
  368. package/dist/esm/qa-agent/safe_env.js +23 -0
  369. package/dist/esm/qa-agent/types.js +3 -0
  370. package/dist/esm/reporters/junit.js +86 -0
  371. package/dist/esm/reporters/reporter.js +3 -0
  372. package/dist/esm/reporters/sarif.js +132 -0
  373. package/dist/esm/resilience/circuit_breaker.js +78 -0
  374. package/dist/esm/resilience/retry.js +56 -0
  375. package/dist/esm/sanitize.js +66 -0
  376. package/dist/esm/training/enricher.js +345 -0
  377. package/dist/esm/training/kg_scanner.js +115 -0
  378. package/dist/esm/training/merger.js +204 -0
  379. package/dist/esm/training/scanner.js +923 -0
  380. package/dist/esm/training/types.js +6 -0
  381. package/dist/esm/training/validator.js +254 -0
  382. package/dist/esm/validation/guardrails.js +101 -0
  383. package/dist/esm/validation/output_schema.js +80 -0
  384. package/dist/esm/version.js +33 -0
  385. package/dist/index.d.ts +99 -0
  386. package/dist/index.d.ts.map +1 -0
  387. package/dist/index.js +169 -0
  388. package/dist/knowledge/api_surface.d.ts +37 -0
  389. package/dist/knowledge/api_surface.d.ts.map +1 -0
  390. package/dist/knowledge/api_surface.js +418 -0
  391. package/dist/knowledge/cluster_utils.d.ts +28 -0
  392. package/dist/knowledge/cluster_utils.d.ts.map +1 -0
  393. package/dist/knowledge/cluster_utils.js +67 -0
  394. package/dist/knowledge/context_loader.d.ts +13 -0
  395. package/dist/knowledge/context_loader.d.ts.map +1 -0
  396. package/dist/knowledge/context_loader.js +90 -0
  397. package/dist/knowledge/failure_history.d.ts +39 -0
  398. package/dist/knowledge/failure_history.d.ts.map +1 -0
  399. package/dist/knowledge/failure_history.js +128 -0
  400. package/dist/knowledge/kg_bridge.d.ts +31 -0
  401. package/dist/knowledge/kg_bridge.d.ts.map +1 -0
  402. package/dist/knowledge/kg_bridge.js +388 -0
  403. package/dist/knowledge/kg_types.d.ts +75 -0
  404. package/dist/knowledge/kg_types.d.ts.map +1 -0
  405. package/dist/knowledge/kg_types.js +4 -0
  406. package/dist/knowledge/route_families.d.ts +98 -0
  407. package/dist/knowledge/route_families.d.ts.map +1 -0
  408. package/dist/knowledge/route_families.js +410 -0
  409. package/dist/knowledge/spec_index.d.ts +18 -0
  410. package/dist/knowledge/spec_index.d.ts.map +1 -0
  411. package/dist/knowledge/spec_index.js +128 -0
  412. package/dist/logger.d.ts +31 -0
  413. package/dist/logger.d.ts.map +1 -0
  414. package/dist/logger.js +119 -0
  415. package/dist/mcp-server.d.ts +68 -0
  416. package/dist/mcp-server.d.ts.map +1 -0
  417. package/dist/mcp-server.js +629 -0
  418. package/dist/metrics/prometheus.d.ts +37 -0
  419. package/dist/metrics/prometheus.d.ts.map +1 -0
  420. package/dist/metrics/prometheus.js +153 -0
  421. package/dist/model_router.d.ts +28 -0
  422. package/dist/model_router.d.ts.map +1 -0
  423. package/dist/model_router.js +63 -0
  424. package/dist/ollama_provider.d.ts +65 -0
  425. package/dist/ollama_provider.d.ts.map +1 -0
  426. package/dist/ollama_provider.js +309 -0
  427. package/dist/openai_provider.d.ts +23 -0
  428. package/dist/openai_provider.d.ts.map +1 -0
  429. package/dist/openai_provider.js +251 -0
  430. package/dist/pipeline/orchestrator.d.ts +33 -0
  431. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  432. package/dist/pipeline/orchestrator.js +231 -0
  433. package/dist/pipeline/spec_verifier.d.ts +20 -0
  434. package/dist/pipeline/spec_verifier.d.ts.map +1 -0
  435. package/dist/pipeline/spec_verifier.js +79 -0
  436. package/dist/pipeline/stage0_preprocess.d.ts +31 -0
  437. package/dist/pipeline/stage0_preprocess.d.ts.map +1 -0
  438. package/dist/pipeline/stage0_preprocess.js +105 -0
  439. package/dist/pipeline/stage1_impact.d.ts +19 -0
  440. package/dist/pipeline/stage1_impact.d.ts.map +1 -0
  441. package/dist/pipeline/stage1_impact.js +143 -0
  442. package/dist/pipeline/stage2_coverage.d.ts +19 -0
  443. package/dist/pipeline/stage2_coverage.d.ts.map +1 -0
  444. package/dist/pipeline/stage2_coverage.js +156 -0
  445. package/dist/pipeline/stage3_generation.d.ts +43 -0
  446. package/dist/pipeline/stage3_generation.d.ts.map +1 -0
  447. package/dist/pipeline/stage3_generation.js +287 -0
  448. package/dist/pipeline/stage4_heal.d.ts +62 -0
  449. package/dist/pipeline/stage4_heal.d.ts.map +1 -0
  450. package/dist/pipeline/stage4_heal.js +294 -0
  451. package/dist/progress.d.ts +22 -0
  452. package/dist/progress.d.ts.map +1 -0
  453. package/dist/progress.js +116 -0
  454. package/dist/prompts/coverage.d.ts +39 -0
  455. package/dist/prompts/coverage.d.ts.map +1 -0
  456. package/dist/prompts/coverage.js +61 -0
  457. package/dist/prompts/cross-impact.d.ts +23 -0
  458. package/dist/prompts/cross-impact.d.ts.map +1 -0
  459. package/dist/prompts/cross-impact.js +57 -0
  460. package/dist/prompts/generation.d.ts +25 -0
  461. package/dist/prompts/generation.d.ts.map +1 -0
  462. package/dist/prompts/generation.js +302 -0
  463. package/dist/prompts/generation_profile.d.ts +29 -0
  464. package/dist/prompts/generation_profile.d.ts.map +1 -0
  465. package/dist/prompts/generation_profile.js +151 -0
  466. package/dist/prompts/heal.d.ts +23 -0
  467. package/dist/prompts/heal.d.ts.map +1 -0
  468. package/dist/prompts/heal.js +95 -0
  469. package/dist/prompts/impact.d.ts +31 -0
  470. package/dist/prompts/impact.d.ts.map +1 -0
  471. package/dist/prompts/impact.js +67 -0
  472. package/dist/prompts/json_extract.d.ts +14 -0
  473. package/dist/prompts/json_extract.d.ts.map +1 -0
  474. package/dist/prompts/json_extract.js +39 -0
  475. package/dist/prompts/strategist.d.ts +25 -0
  476. package/dist/prompts/strategist.d.ts.map +1 -0
  477. package/dist/prompts/strategist.js +65 -0
  478. package/dist/prompts/test-designer.d.ts +35 -0
  479. package/dist/prompts/test-designer.d.ts.map +1 -0
  480. package/dist/prompts/test-designer.js +96 -0
  481. package/dist/provider_factory.d.ts +104 -0
  482. package/dist/provider_factory.d.ts.map +1 -0
  483. package/dist/provider_factory.js +371 -0
  484. package/dist/provider_interface.d.ts +365 -0
  485. package/dist/provider_interface.d.ts.map +1 -0
  486. package/dist/provider_interface.js +28 -0
  487. package/dist/provider_utils.d.ts +39 -0
  488. package/dist/provider_utils.d.ts.map +1 -0
  489. package/dist/provider_utils.js +103 -0
  490. package/dist/qa-agent/cli.d.ts +3 -0
  491. package/dist/qa-agent/cli.d.ts.map +1 -0
  492. package/dist/qa-agent/cli.js +207 -0
  493. package/dist/qa-agent/orchestrator.d.ts +3 -0
  494. package/dist/qa-agent/orchestrator.d.ts.map +1 -0
  495. package/dist/qa-agent/orchestrator.js +123 -0
  496. package/dist/qa-agent/phase1/runner.d.ts +3 -0
  497. package/dist/qa-agent/phase1/runner.d.ts.map +1 -0
  498. package/dist/qa-agent/phase1/runner.js +142 -0
  499. package/dist/qa-agent/phase1/scope.d.ts +6 -0
  500. package/dist/qa-agent/phase1/scope.d.ts.map +1 -0
  501. package/dist/qa-agent/phase1/scope.js +129 -0
  502. package/dist/qa-agent/phase2/agent_browser.d.ts +35 -0
  503. package/dist/qa-agent/phase2/agent_browser.d.ts.map +1 -0
  504. package/dist/qa-agent/phase2/agent_browser.js +99 -0
  505. package/dist/qa-agent/phase2/agent_loop.d.ts +3 -0
  506. package/dist/qa-agent/phase2/agent_loop.d.ts.map +1 -0
  507. package/dist/qa-agent/phase2/agent_loop.js +357 -0
  508. package/dist/qa-agent/phase2/exploration_state.d.ts +12 -0
  509. package/dist/qa-agent/phase2/exploration_state.d.ts.map +1 -0
  510. package/dist/qa-agent/phase2/exploration_state.js +109 -0
  511. package/dist/qa-agent/phase2/tools.d.ts +28 -0
  512. package/dist/qa-agent/phase2/tools.d.ts.map +1 -0
  513. package/dist/qa-agent/phase2/tools.js +390 -0
  514. package/dist/qa-agent/phase2/vision.d.ts +3 -0
  515. package/dist/qa-agent/phase2/vision.d.ts.map +1 -0
  516. package/dist/qa-agent/phase2/vision.js +78 -0
  517. package/dist/qa-agent/phase3/feedback.d.ts +3 -0
  518. package/dist/qa-agent/phase3/feedback.d.ts.map +1 -0
  519. package/dist/qa-agent/phase3/feedback.js +37 -0
  520. package/dist/qa-agent/phase3/reporter.d.ts +3 -0
  521. package/dist/qa-agent/phase3/reporter.d.ts.map +1 -0
  522. package/dist/qa-agent/phase3/reporter.js +148 -0
  523. package/dist/qa-agent/phase3/spec_generator.d.ts +3 -0
  524. package/dist/qa-agent/phase3/spec_generator.d.ts.map +1 -0
  525. package/dist/qa-agent/phase3/spec_generator.js +65 -0
  526. package/dist/qa-agent/phase3/verdict.d.ts +3 -0
  527. package/dist/qa-agent/phase3/verdict.d.ts.map +1 -0
  528. package/dist/qa-agent/phase3/verdict.js +69 -0
  529. package/dist/qa-agent/safe_env.d.ts +3 -0
  530. package/dist/qa-agent/safe_env.d.ts.map +1 -0
  531. package/dist/qa-agent/safe_env.js +26 -0
  532. package/dist/qa-agent/types.d.ts +130 -0
  533. package/dist/qa-agent/types.d.ts.map +1 -0
  534. package/dist/qa-agent/types.js +4 -0
  535. package/dist/reporters/junit.d.ts +6 -0
  536. package/dist/reporters/junit.d.ts.map +1 -0
  537. package/dist/reporters/junit.js +89 -0
  538. package/dist/reporters/reporter.d.ts +42 -0
  539. package/dist/reporters/reporter.d.ts.map +1 -0
  540. package/dist/reporters/reporter.js +4 -0
  541. package/dist/reporters/sarif.d.ts +7 -0
  542. package/dist/reporters/sarif.d.ts.map +1 -0
  543. package/dist/reporters/sarif.js +135 -0
  544. package/dist/resilience/circuit_breaker.d.ts +36 -0
  545. package/dist/resilience/circuit_breaker.d.ts.map +1 -0
  546. package/dist/resilience/circuit_breaker.js +82 -0
  547. package/dist/resilience/retry.d.ts +11 -0
  548. package/dist/resilience/retry.d.ts.map +1 -0
  549. package/dist/resilience/retry.js +59 -0
  550. package/dist/sanitize.d.ts +15 -0
  551. package/dist/sanitize.d.ts.map +1 -0
  552. package/dist/sanitize.js +71 -0
  553. package/dist/training/enricher.d.ts +17 -0
  554. package/dist/training/enricher.d.ts.map +1 -0
  555. package/dist/training/enricher.js +350 -0
  556. package/dist/training/kg_scanner.d.ts +13 -0
  557. package/dist/training/kg_scanner.d.ts.map +1 -0
  558. package/dist/training/kg_scanner.js +118 -0
  559. package/dist/training/merger.d.ts +15 -0
  560. package/dist/training/merger.d.ts.map +1 -0
  561. package/dist/training/merger.js +208 -0
  562. package/dist/training/scanner.d.ts +36 -0
  563. package/dist/training/scanner.d.ts.map +1 -0
  564. package/dist/training/scanner.js +932 -0
  565. package/dist/training/types.d.ts +117 -0
  566. package/dist/training/types.d.ts.map +1 -0
  567. package/dist/training/types.js +9 -0
  568. package/dist/training/validator.d.ts +21 -0
  569. package/dist/training/validator.d.ts.map +1 -0
  570. package/dist/training/validator.js +262 -0
  571. package/dist/validation/guardrails.d.ts +31 -0
  572. package/dist/validation/guardrails.d.ts.map +1 -0
  573. package/dist/validation/guardrails.js +112 -0
  574. package/dist/validation/output_schema.d.ts +67 -0
  575. package/dist/validation/output_schema.d.ts.map +1 -0
  576. package/dist/validation/output_schema.js +84 -0
  577. package/dist/version.d.ts +6 -0
  578. package/dist/version.d.ts.map +1 -0
  579. package/dist/version.js +36 -0
  580. package/package.json +126 -0
  581. package/schemas/flow-decision.schema.json +83 -0
  582. package/schemas/gap.schema.json +18 -0
  583. package/schemas/impact.schema.json +455 -0
  584. package/schemas/plan.schema.json +491 -0
  585. package/schemas/route-families.schema.json +137 -0
  586. package/schemas/subsystem-risk-map.schema.json +62 -0
  587. package/schemas/traceability-input.schema.json +122 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/agent/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
3
+ // See LICENSE.txt for license information.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.appendPlanMetrics = appendPlanMetrics;
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const PLAN_METRICS_EVENTS_PATH = '.e2e-ai-agents/metrics.jsonl';
9
+ const PLAN_METRICS_SUMMARY_PATH = '.e2e-ai-agents/metrics-summary.json';
10
+ function parsePlanMetricLine(line) {
11
+ const trimmed = line.trim();
12
+ if (!trimmed) {
13
+ return null;
14
+ }
15
+ try {
16
+ const parsed = JSON.parse(trimmed);
17
+ if (!parsed || parsed.schemaVersion !== '1.0.0' || typeof parsed.runId !== 'string') {
18
+ return null;
19
+ }
20
+ return parsed;
21
+ }
22
+ catch {
23
+ return null;
24
+ }
25
+ }
26
+ function appendPlanMetrics(appRoot, plan) {
27
+ const baseDir = (0, path_1.join)(appRoot, '.e2e-ai-agents');
28
+ (0, fs_1.mkdirSync)(baseDir, { recursive: true });
29
+ const eventsPath = (0, path_1.join)(appRoot, PLAN_METRICS_EVENTS_PATH);
30
+ const summaryPath = (0, path_1.join)(appRoot, PLAN_METRICS_SUMMARY_PATH);
31
+ const event = {
32
+ schemaVersion: '1.0.0',
33
+ timestamp: new Date().toISOString(),
34
+ runId: plan.runId,
35
+ sourceRunId: plan.sourceRunId,
36
+ action: plan.decision.action,
37
+ runSet: plan.runSet,
38
+ confidence: plan.confidence,
39
+ changedFiles: plan.metrics.changedFiles,
40
+ impactedFlows: plan.metrics.impactedFlows,
41
+ uncoveredP0P1Flows: plan.metrics.uncoveredP0P1Flows,
42
+ warnings: plan.metrics.warnings,
43
+ enforcementMode: plan.enforcement.mode,
44
+ enforcementShouldFail: plan.enforcement.shouldFail,
45
+ };
46
+ (0, fs_1.appendFileSync)(eventsPath, `${JSON.stringify(event)}\n`, 'utf-8');
47
+ const allEvents = (0, fs_1.existsSync)(eventsPath)
48
+ ? (0, fs_1.readFileSync)(eventsPath, 'utf-8')
49
+ .split('\n')
50
+ .map(parsePlanMetricLine)
51
+ .filter((item) => Boolean(item))
52
+ : [event];
53
+ const byAction = {
54
+ 'run-now': 0,
55
+ 'must-add-tests': 0,
56
+ 'safe-to-merge': 0,
57
+ };
58
+ const byRunSet = {
59
+ smoke: 0,
60
+ targeted: 0,
61
+ full: 0,
62
+ };
63
+ let totalConfidence = 0;
64
+ let blockingRecommendations = 0;
65
+ for (const metricEvent of allEvents) {
66
+ byAction[metricEvent.action] += 1;
67
+ byRunSet[metricEvent.runSet] += 1;
68
+ totalConfidence += metricEvent.confidence;
69
+ if (metricEvent.enforcementShouldFail) {
70
+ blockingRecommendations += 1;
71
+ }
72
+ }
73
+ const totalRuns = allEvents.length;
74
+ const summary = {
75
+ schemaVersion: '1.0.0',
76
+ generatedAt: new Date().toISOString(),
77
+ totalRuns,
78
+ averageConfidence: totalRuns > 0 ? Number((totalConfidence / totalRuns).toFixed(2)) : 0,
79
+ byAction,
80
+ byRunSet,
81
+ blockingRecommendations,
82
+ blockingRate: totalRuns > 0 ? Number((blockingRecommendations / totalRuns).toFixed(4)) : 0,
83
+ };
84
+ (0, fs_1.writeFileSync)(summaryPath, JSON.stringify(summary, null, 2), 'utf-8');
85
+ return { eventsPath, summaryPath };
86
+ }
@@ -0,0 +1,8 @@
1
+ export interface UnstablePlaywrightSpec {
2
+ specPath: string;
3
+ status: 'failed' | 'flaky';
4
+ failingTests: number;
5
+ flakyTests: number;
6
+ }
7
+ export declare function extractPlaywrightUnstableSpecs(reportPath: string, roots: string[]): UnstablePlaywrightSpec[];
8
+ //# sourceMappingURL=playwright_report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright_report.d.ts","sourceRoot":"","sources":["../../src/agent/playwright_report.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,sBAAsB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACtB;AA4HD,wBAAgB,8BAA8B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,sBAAsB,EAAE,CAW5G"}
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
3
+ // See LICENSE.txt for license information.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.extractPlaywrightUnstableSpecs = extractPlaywrightUnstableSpecs;
6
+ const fs_1 = require("fs");
7
+ const path_1 = require("path");
8
+ const utils_js_1 = require("./utils.js");
9
+ function asRecord(value) {
10
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
11
+ return null;
12
+ }
13
+ return value;
14
+ }
15
+ function asArray(value) {
16
+ return Array.isArray(value) ? value : [];
17
+ }
18
+ function isFailureStatus(value) {
19
+ return value === 'failed' || value === 'timedOut' || value === 'interrupted';
20
+ }
21
+ function classifyTestInstability(testNode) {
22
+ const outcome = typeof testNode.outcome === 'string' ? testNode.outcome : '';
23
+ if (outcome === 'unexpected') {
24
+ return 'failed';
25
+ }
26
+ if (outcome === 'flaky') {
27
+ return 'flaky';
28
+ }
29
+ const status = typeof testNode.status === 'string' ? testNode.status : '';
30
+ if (status === 'flaky') {
31
+ return 'flaky';
32
+ }
33
+ if (isFailureStatus(status)) {
34
+ return 'failed';
35
+ }
36
+ let sawFailure = false;
37
+ let sawPass = false;
38
+ for (const resultValue of asArray(testNode.results)) {
39
+ const resultNode = asRecord(resultValue);
40
+ if (!resultNode) {
41
+ continue;
42
+ }
43
+ const resultStatus = typeof resultNode.status === 'string' ? resultNode.status : '';
44
+ if (isFailureStatus(resultStatus)) {
45
+ sawFailure = true;
46
+ }
47
+ else if (resultStatus === 'passed') {
48
+ sawPass = true;
49
+ }
50
+ }
51
+ if (sawFailure && sawPass) {
52
+ return 'flaky';
53
+ }
54
+ if (sawFailure) {
55
+ return 'failed';
56
+ }
57
+ return 'stable';
58
+ }
59
+ function relativize(pathValue, roots) {
60
+ const normalized = (0, utils_js_1.normalizePath)(pathValue);
61
+ for (const root of roots) {
62
+ const normalizedRoot = (0, utils_js_1.normalizePath)((0, path_1.resolve)(root));
63
+ if (normalized === normalizedRoot) {
64
+ return '.';
65
+ }
66
+ if (normalized.startsWith(`${normalizedRoot}/`)) {
67
+ return normalized.slice(normalizedRoot.length + 1);
68
+ }
69
+ }
70
+ return normalized;
71
+ }
72
+ function collectUnstableSpecs(value, roots, unstableMap) {
73
+ const node = asRecord(value);
74
+ if (!node) {
75
+ return;
76
+ }
77
+ for (const specValue of asArray(node.specs)) {
78
+ const specNode = asRecord(specValue);
79
+ if (!specNode || typeof specNode.file !== 'string') {
80
+ continue;
81
+ }
82
+ let failingTests = 0;
83
+ let flakyTests = 0;
84
+ for (const testValue of asArray(specNode.tests)) {
85
+ const testNode = asRecord(testValue);
86
+ if (!testNode) {
87
+ continue;
88
+ }
89
+ const instability = classifyTestInstability(testNode);
90
+ if (instability === 'failed') {
91
+ failingTests += 1;
92
+ }
93
+ else if (instability === 'flaky') {
94
+ flakyTests += 1;
95
+ }
96
+ }
97
+ if (failingTests === 0 && flakyTests === 0) {
98
+ continue;
99
+ }
100
+ const specPath = relativize(specNode.file, roots);
101
+ const existing = unstableMap.get(specPath);
102
+ const mergedFailing = (existing?.failingTests || 0) + failingTests;
103
+ const mergedFlaky = (existing?.flakyTests || 0) + flakyTests;
104
+ unstableMap.set(specPath, {
105
+ specPath,
106
+ status: mergedFailing > 0 ? 'failed' : 'flaky',
107
+ failingTests: mergedFailing,
108
+ flakyTests: mergedFlaky,
109
+ });
110
+ }
111
+ for (const suite of asArray(node.suites)) {
112
+ collectUnstableSpecs(suite, roots, unstableMap);
113
+ }
114
+ }
115
+ function extractPlaywrightUnstableSpecs(reportPath, roots) {
116
+ const fullPath = (0, path_1.resolve)(reportPath);
117
+ const raw = JSON.parse((0, fs_1.readFileSync)(fullPath, 'utf-8'));
118
+ const unstableMap = new Map();
119
+ collectUnstableSpecs(raw, roots, unstableMap);
120
+ return Array.from(unstableMap.values()).sort((a, b) => {
121
+ if (a.status !== b.status) {
122
+ return a.status === 'failed' ? -1 : 1;
123
+ }
124
+ return a.specPath.localeCompare(b.specPath);
125
+ });
126
+ }
@@ -0,0 +1,10 @@
1
+ import type { PipelineConfig } from './config.js';
2
+ import type { CommandResult } from './pipeline_types.js';
3
+ export declare function resolvePlaywrightBinary(testsRoot: string): string | null;
4
+ export declare function summarizeCommandOutput(stdout: string, stderr: string): string;
5
+ export declare function runCommand(command: string, args: string[], cwd: string, timeoutMs?: number, envOverride?: NodeJS.ProcessEnv): CommandResult;
6
+ export declare function resolveMcpCommandTimeoutMs(pipeline: PipelineConfig): number;
7
+ export declare function resolveMcpRetries(pipeline: PipelineConfig): number;
8
+ export declare function isRetryableMcpFailure(result: CommandResult): boolean;
9
+ export declare function runCommandWithRetries(command: string, args: string[], cwd: string, timeoutMs: number, retries: number): CommandResult;
10
+ //# sourceMappingURL=process_runner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process_runner.d.ts","sourceRoot":"","sources":["../../src/agent/process_runner.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAEvD,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUxE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAO7E;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,SAAiB,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,UAAU,GAAG,aAAa,CAsBnJ;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAM3E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAMlE;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAQpE;AAED,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAChB,aAAa,CAYf"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
3
+ // See LICENSE.txt for license information.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.resolvePlaywrightBinary = resolvePlaywrightBinary;
6
+ exports.summarizeCommandOutput = summarizeCommandOutput;
7
+ exports.runCommand = runCommand;
8
+ exports.resolveMcpCommandTimeoutMs = resolveMcpCommandTimeoutMs;
9
+ exports.resolveMcpRetries = resolveMcpRetries;
10
+ exports.isRetryableMcpFailure = isRetryableMcpFailure;
11
+ exports.runCommandWithRetries = runCommandWithRetries;
12
+ const fs_1 = require("fs");
13
+ const path_1 = require("path");
14
+ const child_process_1 = require("child_process");
15
+ function resolvePlaywrightBinary(testsRoot) {
16
+ const unixPath = (0, path_1.join)(testsRoot, 'node_modules', '.bin', 'playwright');
17
+ const windowsPath = (0, path_1.join)(testsRoot, 'node_modules', '.bin', 'playwright.cmd');
18
+ if ((0, fs_1.existsSync)(unixPath)) {
19
+ return unixPath;
20
+ }
21
+ if ((0, fs_1.existsSync)(windowsPath)) {
22
+ return windowsPath;
23
+ }
24
+ return null;
25
+ }
26
+ function summarizeCommandOutput(stdout, stderr) {
27
+ const combined = [stdout, stderr].filter(Boolean).join('\n').trim();
28
+ if (!combined) {
29
+ return '';
30
+ }
31
+ const lines = combined.split('\n').slice(-20);
32
+ return lines.join('\n').slice(0, 2000);
33
+ }
34
+ function runCommand(command, args, cwd, timeoutMs = 60 * 60 * 1000, envOverride) {
35
+ // When spawning `claude`, unset CLAUDECODE so nested invocations are allowed.
36
+ // Claude Code sets this variable to block nested sessions; child processes
37
+ // that spawn their own claude instance must run without it.
38
+ let env = envOverride;
39
+ if (!env && command === 'claude') {
40
+ const { CLAUDECODE: _, ...rest } = process.env;
41
+ env = rest;
42
+ }
43
+ const result = (0, child_process_1.spawnSync)(command, args, {
44
+ cwd,
45
+ encoding: 'utf-8',
46
+ timeout: timeoutMs,
47
+ stdio: 'pipe',
48
+ ...(env ? { env } : {}),
49
+ });
50
+ return {
51
+ status: result.status ?? 1,
52
+ stdout: result.stdout || '',
53
+ stderr: result.stderr || '',
54
+ error: result.error ? result.error.message : undefined,
55
+ };
56
+ }
57
+ function resolveMcpCommandTimeoutMs(pipeline) {
58
+ const value = pipeline.mcpCommandTimeoutMs;
59
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
60
+ return 180000;
61
+ }
62
+ return Math.max(60000, Math.min(15 * 60 * 1000, Math.round(value)));
63
+ }
64
+ function resolveMcpRetries(pipeline) {
65
+ const value = pipeline.mcpRetries;
66
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
67
+ return 1;
68
+ }
69
+ return Math.max(0, Math.min(5, Math.round(value)));
70
+ }
71
+ function isRetryableMcpFailure(result) {
72
+ const haystack = [result.error || '', result.stderr || '', result.stdout || ''].join('\n').toLowerCase();
73
+ return haystack.includes('etimedout') ||
74
+ haystack.includes('timed out') ||
75
+ haystack.includes('econnreset') ||
76
+ haystack.includes('429') ||
77
+ haystack.includes('rate limit') ||
78
+ haystack.includes('temporar');
79
+ }
80
+ function runCommandWithRetries(command, args, cwd, timeoutMs, retries) {
81
+ let result = runCommand(command, args, cwd, timeoutMs);
82
+ for (let attempt = 1; attempt <= retries; attempt += 1) {
83
+ if (result.status === 0) {
84
+ return result;
85
+ }
86
+ if (!isRetryableMcpFailure(result)) {
87
+ return result;
88
+ }
89
+ result = runCommand(command, args, cwd, timeoutMs);
90
+ }
91
+ return result;
92
+ }
@@ -0,0 +1,5 @@
1
+ import type { FlowImpact } from './types.js';
2
+ import type { ApiSurfaceCatalog, NativeSpecQualityIssue, NativeSpecStrategy } from './pipeline_types.js';
3
+ export declare function validateGeneratedSpecContent(content: string, apiSurface?: ApiSurfaceCatalog): NativeSpecQualityIssue[];
4
+ export declare function createNativePlaywrightSpec(flow: FlowImpact, slug: string, strategy: NativeSpecStrategy): string;
5
+ //# sourceMappingURL=spec_generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec_generator.d.ts","sourceRoot":"","sources":["../../src/agent/spec_generator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,YAAY,CAAC;AAC3C,OAAO,KAAK,EAAC,iBAAiB,EAAE,sBAAsB,EAAE,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AAIvG,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,iBAAiB,GAAG,sBAAsB,EAAE,CAgHtH;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAyJ/G"}
@@ -0,0 +1,253 @@
1
+ "use strict";
2
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
3
+ // See LICENSE.txt for license information.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.validateGeneratedSpecContent = validateGeneratedSpecContent;
6
+ exports.createNativePlaywrightSpec = createNativePlaywrightSpec;
7
+ const api_catalog_js_1 = require("./api_catalog.js");
8
+ const pipeline_utils_js_1 = require("./pipeline_utils.js");
9
+ function validateGeneratedSpecContent(content, apiSurface) {
10
+ const issues = [];
11
+ if (/\btest\.describe\s*\(/.test(content)) {
12
+ issues.push({
13
+ code: 'disallowed-describe',
14
+ message: 'Generated tests must not use test.describe.',
15
+ });
16
+ }
17
+ if (/\btest\.only\s*\(/.test(content)) {
18
+ issues.push({
19
+ code: 'disallowed-only',
20
+ message: 'Generated tests must not use test.only.',
21
+ });
22
+ }
23
+ if (!/\btest\s*\(/.test(content)) {
24
+ issues.push({
25
+ code: 'missing-test',
26
+ message: 'Generated file does not include a test() declaration.',
27
+ });
28
+ }
29
+ if (/\btag\s*:\s*\[/.test(content)) {
30
+ issues.push({
31
+ code: 'tag-array-disallowed',
32
+ message: 'Generated tests must use a single tag string, not a tag array.',
33
+ });
34
+ }
35
+ const hasTagOption = /\btag\s*:\s*['"][^'"]+['"]/.test(content);
36
+ const hasTagInTitle = /\btest(?:\.\w+)?\s*\(\s*['"][^'"]*@ai-assisted[^'"]*['"]/.test(content);
37
+ if (!(hasTagOption || hasTagInTitle) || !/@ai-assisted/.test(content)) {
38
+ issues.push({
39
+ code: 'missing-tag',
40
+ message: "Generated tests must include '@ai-assisted' either as tag option or in test title.",
41
+ });
42
+ }
43
+ if (/\bsystemConsolePage\.toBeVisible\s*\(/.test(content)) {
44
+ issues.push({
45
+ code: 'fragile-system-console-visibility',
46
+ message: 'Avoid systemConsolePage.toBeVisible(); it relies on legacy backstage navigation that may be absent.',
47
+ });
48
+ }
49
+ const fragileSelectors = [
50
+ '.backstage-navbar',
51
+ '.admin-console__wrapper',
52
+ '.left-panel',
53
+ '.panel-card',
54
+ ].filter((selector) => content.includes(selector));
55
+ if (fragileSelectors.length > 0) {
56
+ issues.push({
57
+ code: 'fragile-selector',
58
+ message: `Avoid brittle class selectors in generated tests: ${Array.from(new Set(fragileSelectors)).join(', ')}`,
59
+ });
60
+ }
61
+ if (apiSurface) {
62
+ const unknownPwProps = Array.from((0, api_catalog_js_1.collectMatches)(content, /\bpw\.([A-Za-z_][A-Za-z0-9_]*)\b/g)).filter((prop) => !apiSurface.pwProps.has(prop));
63
+ const unknownBrowserMethods = Array.from((0, api_catalog_js_1.collectMatches)(content, /\bpw\.testBrowser\.([A-Za-z_][A-Za-z0-9_]*)\b/g)).filter((method) => !apiSurface.testBrowserMethods.has(method));
64
+ const unknownNestedPwMembers = [];
65
+ for (const match of content.matchAll(/\bpw\.([A-Za-z_][A-Za-z0-9_]*)\.([A-Za-z_][A-Za-z0-9_]*)\b/g)) {
66
+ const objectName = match[1];
67
+ const methodName = match[2];
68
+ if (!objectName || !methodName || objectName === 'testBrowser') {
69
+ continue;
70
+ }
71
+ const knownMethods = apiSurface.pwNestedMethods.get(objectName);
72
+ if (!knownMethods || !knownMethods.has(methodName)) {
73
+ unknownNestedPwMembers.push(`pw.${objectName}.${methodName}`);
74
+ }
75
+ }
76
+ const unknownChannelMembers = Array.from((0, api_catalog_js_1.collectMatches)(content, /\bchannelsPage\.([A-Za-z_][A-Za-z0-9_]*)\b/g)).filter((member) => !apiSurface.channelsPageMembers.has(member));
77
+ const unknownSidebarMembers = Array.from((0, api_catalog_js_1.collectMatches)(content, /\bchannelsPage\.sidebarRight\.([A-Za-z_][A-Za-z0-9_]*)\b/g)).filter((member) => !apiSurface.sidebarRightMembers.has(member));
78
+ const initSetupBindings = (0, api_catalog_js_1.parseInitSetupBindings)(content);
79
+ const unknownInitSetupKeys = initSetupBindings
80
+ .map((binding) => binding.key)
81
+ .filter((key) => !apiSurface.initSetupKeys.has(key));
82
+ const unknownInitSetupVariableMethods = [];
83
+ for (const binding of initSetupBindings) {
84
+ const knownMethods = apiSurface.initSetupVariableMethods.get(binding.variable);
85
+ if (!knownMethods || knownMethods.size === 0) {
86
+ continue;
87
+ }
88
+ const methodPattern = new RegExp(`\\b${(0, api_catalog_js_1.escapeRegExp)(binding.variable)}\\.([A-Za-z_][A-Za-z0-9_]*)\\b`, 'g');
89
+ for (const method of (0, api_catalog_js_1.collectMatches)(content, methodPattern)) {
90
+ if (!knownMethods.has(method)) {
91
+ unknownInitSetupVariableMethods.push(`${binding.variable}.${method}`);
92
+ }
93
+ }
94
+ }
95
+ const unknown = [
96
+ ...unknownPwProps.map((value) => `pw.${value}`),
97
+ ...unknownBrowserMethods.map((value) => `pw.testBrowser.${value}`),
98
+ ...unknownNestedPwMembers,
99
+ ...unknownChannelMembers.map((value) => `channelsPage.${value}`),
100
+ ...unknownSidebarMembers.map((value) => `channelsPage.sidebarRight.${value}`),
101
+ ...unknownInitSetupKeys.map((value) => `pw.initSetup.{${value}}`),
102
+ ...unknownInitSetupVariableMethods,
103
+ ];
104
+ if (unknown.length > 0) {
105
+ issues.push({
106
+ code: 'unknown-api-surface',
107
+ message: `Generated test uses unknown API/page-object members: ${Array.from(new Set(unknown)).join(', ')}`,
108
+ });
109
+ }
110
+ }
111
+ return issues;
112
+ }
113
+ function createNativePlaywrightSpec(flow, slug, strategy) {
114
+ const linkedFiles = (0, pipeline_utils_js_1.firstFlowFiles)(flow).join(', ') || 'N/A';
115
+ const header = [
116
+ "import {test, expect} from '@mattermost/playwright-lib';",
117
+ '',
118
+ '/**',
119
+ ` * Auto-generated by @yasserkhanorg/impact-gate`,
120
+ ` * Flow: ${flow.id} (${flow.name})`,
121
+ ` * Strategy: ${strategy}`,
122
+ ` * Linked files: ${linkedFiles}`,
123
+ ' */',
124
+ ];
125
+ const start = [
126
+ `test('${flow.priority}: ${flow.name} generated coverage', {tag: '@ai-assisted'}, async ({pw}) => {`,
127
+ ' const {user, team} = await pw.initSetup();',
128
+ ' const {channelsPage} = await pw.testBrowser.login(user);',
129
+ ' await channelsPage.goto(team.name);',
130
+ ];
131
+ const end = [
132
+ '});',
133
+ '',
134
+ ];
135
+ if (strategy === 'thread-reply') {
136
+ return [
137
+ ...header,
138
+ ...start,
139
+ ` const parentMessage = \`ai-${slug}-parent-\${Date.now()}\`;`,
140
+ ' await channelsPage.postMessage(parentMessage);',
141
+ ' const rootPost = await channelsPage.getLastPost();',
142
+ ' await rootPost.openAThread();',
143
+ ` const replyMessage = \`ai-${slug}-reply-\${Date.now()}\`;`,
144
+ ' await channelsPage.sidebarRight.postMessage(replyMessage);',
145
+ ' const lastReply = await channelsPage.sidebarRight.getLastPost();',
146
+ ' await expect(lastReply.container).toContainText(replyMessage);',
147
+ ...end,
148
+ ].join('\n');
149
+ }
150
+ if (strategy === 'lifecycle-channel') {
151
+ return [
152
+ ...header,
153
+ ...start,
154
+ ` const channelName = \`ai-${slug}-\${Date.now().toString().slice(-6)}\`;`,
155
+ " await channelsPage.newChannel(channelName, 'O');",
156
+ ' await expect(channelsPage.page).toHaveURL(new RegExp(`/channels/${channelName}$`));',
157
+ ...end,
158
+ ].join('\n');
159
+ }
160
+ if (strategy === 'channel-settings') {
161
+ return [
162
+ ...header,
163
+ ...start,
164
+ ' await channelsPage.openChannelSettings();',
165
+ " await expect(channelsPage.page.getByRole('dialog', {name: 'Channel Settings'})).toBeVisible();",
166
+ " await channelsPage.page.keyboard.press('Escape');",
167
+ ...end,
168
+ ].join('\n');
169
+ }
170
+ if (strategy === 'channel-switch') {
171
+ return [
172
+ ...header,
173
+ ...start,
174
+ " await channelsPage.goto(team.name, 'off-topic');",
175
+ " await expect(channelsPage.page).toHaveURL(/\\/channels\\/off-topic$/);",
176
+ " await expect(channelsPage.page.locator('#channelHeaderTitle')).toContainText(/off-topic/i);",
177
+ ...end,
178
+ ].join('\n');
179
+ }
180
+ if (strategy === 'markdown-post') {
181
+ return [
182
+ ...header,
183
+ ...start,
184
+ ` const message = '**ai-${slug}-bold** _italic_';`,
185
+ ' await channelsPage.postMessage(message);',
186
+ ' const lastPost = await channelsPage.getLastPost();',
187
+ " await expect(lastPost.container.locator('strong')).toBeVisible();",
188
+ ...end,
189
+ ].join('\n');
190
+ }
191
+ if (strategy === 'mentions-post') {
192
+ return [
193
+ ...header,
194
+ ...start,
195
+ ' const mention = `@${user.username}`;',
196
+ ' await channelsPage.postMessage(`Ping ${mention}`);',
197
+ ' const lastPost = await channelsPage.getLastPost();',
198
+ ' await expect(lastPost.container).toContainText(mention);',
199
+ ...end,
200
+ ].join('\n');
201
+ }
202
+ if (strategy === 'realtime-post') {
203
+ return [
204
+ ...header,
205
+ ...start,
206
+ ` const message = \`ai-${slug}-realtime-\${Date.now()}\`;`,
207
+ ' await channelsPage.postMessage(message);',
208
+ ' const lastPost = await channelsPage.getLastPost();',
209
+ ' await expect(lastPost.container).toContainText(message);',
210
+ " await expect(channelsPage.page.locator('#channel_view')).toBeVisible();",
211
+ ...end,
212
+ ].join('\n');
213
+ }
214
+ if (strategy === 'message-post') {
215
+ return [
216
+ ...header,
217
+ ...start,
218
+ ` const message = \`ai-${slug}-message-\${Date.now()}\`;`,
219
+ ' await channelsPage.postMessage(message);',
220
+ ' await expect(channelsPage.getLastPost()).toContainText(message);',
221
+ ...end,
222
+ ].join('\n');
223
+ }
224
+ if (strategy === 'channel-baseline') {
225
+ return [
226
+ ...header,
227
+ ...start,
228
+ " await expect(channelsPage.page.locator('#channelHeaderTitle')).toBeVisible();",
229
+ " await expect(channelsPage.page.locator('#SidebarContainer')).toBeVisible();",
230
+ ...end,
231
+ ].join('\n');
232
+ }
233
+ if (strategy === 'search-baseline') {
234
+ return [
235
+ ...header,
236
+ ...start,
237
+ ` const searchTerm = \`ai-${slug}-\${Date.now().toString().slice(-6)}\`;`,
238
+ ' await channelsPage.postMessage(searchTerm);',
239
+ ' await channelsPage.globalHeader.openSearch();',
240
+ ' await channelsPage.searchBox.searchInput.fill(searchTerm);',
241
+ " await channelsPage.page.keyboard.press('Enter');",
242
+ " await expect(channelsPage.page.locator('#searchContainer')).toBeVisible();",
243
+ ...end,
244
+ ].join('\n');
245
+ }
246
+ return [
247
+ ...header,
248
+ ...start,
249
+ ' await expect(channelsPage.page).toHaveURL(/\\/channels\\//);',
250
+ " await expect(channelsPage.page.locator('#channelHeaderTitle')).toBeVisible();",
251
+ ...end,
252
+ ].join('\n');
253
+ }
@@ -0,0 +1,2 @@
1
+ export declare function inferSubsystemFromTestPath(test: string): string;
2
+ //# sourceMappingURL=test_path.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test_path.d.ts","sourceRoot":"","sources":["../../src/agent/test_path.ts"],"names":[],"mappings":"AAOA,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB/D"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
3
+ // See LICENSE.txt for license information.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.inferSubsystemFromTestPath = inferSubsystemFromTestPath;
6
+ function normalizeTestName(test) {
7
+ return test.replace(/ \(flags:.*\)$/, '').trim();
8
+ }
9
+ function inferSubsystemFromTestPath(test) {
10
+ const normalized = normalizeTestName(test).replace(/^\/+/, '');
11
+ const parts = normalized.split('/').filter(Boolean);
12
+ if (parts.length === 0) {
13
+ return 'unknown';
14
+ }
15
+ const specsIdx = parts.findIndex((part) => part === 'specs' || part === 'tests');
16
+ if (specsIdx >= 0 && specsIdx + 1 < parts.length) {
17
+ return parts[specsIdx + 1] || 'unknown';
18
+ }
19
+ if (parts.length >= 2 && (parts[0] === 'e2e-tests' || parts[0] === 'playwright')) {
20
+ return parts[1] || 'unknown';
21
+ }
22
+ return parts[0] || 'unknown';
23
+ }
@@ -0,0 +1,18 @@
1
+ export interface TraceabilityCaptureOptions {
2
+ appPath: string;
3
+ testsRoot: string;
4
+ reportPath: string;
5
+ sinceRef: string;
6
+ outputPath?: string;
7
+ coverageMapPath?: string;
8
+ changedFilesPath?: string;
9
+ }
10
+ export interface TraceabilityCaptureResult {
11
+ outputPath: string;
12
+ testsSeen: number;
13
+ runsGenerated: number;
14
+ changedFilesUsed: number;
15
+ warnings: string[];
16
+ }
17
+ export declare function captureTraceabilityInput(options: TraceabilityCaptureOptions): TraceabilityCaptureResult;
18
+ //# sourceMappingURL=traceability_capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traceability_capture.d.ts","sourceRoot":"","sources":["../../src/agent/traceability_capture.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,0BAA0B;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,yBAAyB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAgRD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,0BAA0B,GAAG,yBAAyB,CAgFvG"}