@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,117 @@
1
+ import type { RouteFamily, RouteFamilyManifest } from '../knowledge/route_families.js';
2
+ /** A source directory discovered by the scanner */
3
+ export interface DiscoveredDir {
4
+ /** Absolute path to the directory */
5
+ path: string;
6
+ /** Relative path from project root */
7
+ relativePath: string;
8
+ /** Category: frontend source, backend source, or test */
9
+ category: 'webapp' | 'server' | 'test' | 'cypress';
10
+ /** Deepest meaningful directory name (e.g., 'channels' from 'src/channels/') */
11
+ familyHint: string;
12
+ }
13
+ /** A family proposed by the deterministic scanner */
14
+ export interface ScannedFamily {
15
+ id: string;
16
+ routes: string[];
17
+ webappPaths: string[];
18
+ serverPaths: string[];
19
+ specDirs: string[];
20
+ cypressSpecDirs: string[];
21
+ tags: string[];
22
+ features: ScannedFeature[];
23
+ /** True if routes are guesses (directory-name-based) */
24
+ routesGuessed: boolean;
25
+ }
26
+ /** A nested feature proposed by the scanner */
27
+ export interface ScannedFeature {
28
+ id: string;
29
+ webappPaths: string[];
30
+ serverPaths: string[];
31
+ specDirs: string[];
32
+ }
33
+ /** Output of the deterministic scanner */
34
+ export interface ScanResult {
35
+ families: ScannedFamily[];
36
+ unmatchedSourceDirs: DiscoveredDir[];
37
+ unmatchedTestDirs: DiscoveredDir[];
38
+ stats: {
39
+ totalSourceFiles: number;
40
+ totalTestFiles: number;
41
+ familyCount: number;
42
+ };
43
+ }
44
+ /** Output of LLM enrichment */
45
+ export interface EnrichmentResult {
46
+ enrichedFamilies: RouteFamily[];
47
+ tokensUsed: number;
48
+ costUSD: number;
49
+ skippedFamilies: string[];
50
+ /** Number of LLM requests made */
51
+ requestCount?: number;
52
+ /** Average response time per LLM request in ms */
53
+ avgResponseMs?: number;
54
+ }
55
+ /** A single commit's validation result */
56
+ export interface CommitValidation {
57
+ hash: string;
58
+ message: string;
59
+ changedFiles: string[];
60
+ boundFiles: number;
61
+ unboundFiles: string[];
62
+ familiesHit: string[];
63
+ }
64
+ /** Output of validation mode */
65
+ export interface ValidationReport {
66
+ totalCommits: number;
67
+ totalFiles: number;
68
+ boundFiles: number;
69
+ unboundFiles: number;
70
+ coveragePercent: number;
71
+ commits: CommitValidation[];
72
+ familyHits: Record<string, number>;
73
+ neverHitFamilies: string[];
74
+ unboundFileClusters: Array<{
75
+ pattern: string;
76
+ count: number;
77
+ suggestedFamily: string;
78
+ }>;
79
+ }
80
+ /** Output of smart merge */
81
+ export interface MergeResult {
82
+ manifest: RouteFamilyManifest;
83
+ newFamilies: string[];
84
+ updatedFamilies: string[];
85
+ staleFamilies: string[];
86
+ summary: string;
87
+ }
88
+ /** Options for the train command */
89
+ export interface TrainOptions {
90
+ /** Path to the application root */
91
+ appPath: string;
92
+ /** Path to tests root (may differ from appPath) */
93
+ testsRoot: string;
94
+ /** Path to server/backend root (may differ from appPath) */
95
+ serverRoot?: string;
96
+ /** Git repo root for monorepo-aware validation */
97
+ gitRepoRoot?: string;
98
+ /** Enable LLM enrichment (default: true) */
99
+ enrich: boolean;
100
+ /** Run validation against git history */
101
+ validate: boolean;
102
+ /** Git ref for validation (e.g., 'HEAD~20') */
103
+ since: string;
104
+ /** GitHub PR number for validation */
105
+ pr?: number;
106
+ /** Output path for route-families.json */
107
+ outputPath: string;
108
+ /** Dry run — print without writing */
109
+ dryRun: boolean;
110
+ /** Non-interactive mode */
111
+ yes: boolean;
112
+ /** Max LLM spend in USD */
113
+ budgetUSD: number;
114
+ }
115
+ /** Routes that look like bare "/<id>" are scanner-generated guesses */
116
+ export declare function isGuessedRoute(routes: string[]): boolean;
117
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/training/types.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AAErF,mDAAmD;AACnD,MAAM,WAAW,aAAa;IAC1B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,yDAAyD;IACzD,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,gFAAgF;IAChF,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,qDAAqD;AACrD,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,wDAAwD;IACxD,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED,+CAA+C;AAC/C,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,0CAA0C;AAC1C,MAAM,WAAW,UAAU;IACvB,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,mBAAmB,EAAE,aAAa,EAAE,CAAC;IACrC,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,KAAK,EAAE;QACH,gBAAgB,EAAE,MAAM,CAAC;QACzB,cAAc,EAAE,MAAM,CAAC;QACvB,WAAW,EAAE,MAAM,CAAC;KACvB,CAAC;CACL;AAED,+BAA+B;AAC/B,MAAM,WAAW,gBAAgB;IAC7B,gBAAgB,EAAE,WAAW,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,0CAA0C;AAC1C,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,gCAAgC;AAChC,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mBAAmB,EAAE,KAAK,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,eAAe,EAAE,MAAM,CAAC;KAC3B,CAAC,CAAC;CACN;AAED,4BAA4B;AAC5B,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,oCAAoC;AACpC,MAAM,WAAW,YAAY;IACzB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,0CAA0C;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,2BAA2B;IAC3B,GAAG,EAAE,OAAO,CAAC;IACb,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,uEAAuE;AACvE,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAExD"}
@@ -0,0 +1,9 @@
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.isGuessedRoute = isGuessedRoute;
6
+ /** Routes that look like bare "/<id>" are scanner-generated guesses */
7
+ function isGuessedRoute(routes) {
8
+ return routes.every((r) => /^\/[a-z][a-z0-9_]*$/.test(r));
9
+ }
@@ -0,0 +1,21 @@
1
+ import type { RouteFamilyManifest } from '../knowledge/route_families.js';
2
+ import type { CommitValidation, ValidationReport } from './types.js';
3
+ /**
4
+ * Check if a file path matches any infrastructure glob pattern.
5
+ * Uses simple string matching — no external glob library needed.
6
+ */
7
+ export declare function isInfraFile(filePath: string): boolean;
8
+ export declare function parseGitLog(log: string): Array<{
9
+ hash: string;
10
+ message: string;
11
+ files: string[];
12
+ }>;
13
+ export declare function getCommitFiles(projectRoot: string, since: string): Array<{
14
+ hash: string;
15
+ message: string;
16
+ files: string[];
17
+ }>;
18
+ export declare function validateCommit(manifest: RouteFamilyManifest, files: string[], hash: string, message: string, pathPrefixes?: string[]): CommitValidation;
19
+ export declare function buildValidationReport(commits: CommitValidation[], manifest: RouteFamilyManifest): ValidationReport;
20
+ export declare function formatValidationReport(report: ValidationReport): string;
21
+ //# sourceMappingURL=validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/training/validator.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AAExE,OAAO,KAAK,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,YAAY,CAAC;AAoBnE;;;GAGG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CA6BrD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAC,CAAC,CA6BhG;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAC,CAAC,CAgB1H;AA+CD,wBAAgB,cAAc,CAC1B,QAAQ,EAAE,mBAAmB,EAC7B,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,EAAE,GACxB,gBAAgB,CA+BlB;AAED,wBAAgB,qBAAqB,CACjC,OAAO,EAAE,gBAAgB,EAAE,EAC3B,QAAQ,EAAE,mBAAmB,GAC9B,gBAAgB,CAkDlB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgCvE"}
@@ -0,0 +1,262 @@
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.isInfraFile = isInfraFile;
6
+ exports.parseGitLog = parseGitLog;
7
+ exports.getCommitFiles = getCommitFiles;
8
+ exports.validateCommit = validateCommit;
9
+ exports.buildValidationReport = buildValidationReport;
10
+ exports.formatValidationReport = formatValidationReport;
11
+ const child_process_1 = require("child_process");
12
+ const path_1 = require("path");
13
+ const logger_js_1 = require("../logger.js");
14
+ const route_families_js_1 = require("../knowledge/route_families.js");
15
+ /**
16
+ * Glob-style patterns for infrastructure / cross-cutting files that will never
17
+ * belong to a single route family. Excluded from coverage calculations.
18
+ */
19
+ const INFRA_GLOBS = [
20
+ 'Makefile', 'go.mod', 'go.sum',
21
+ '*.lock',
22
+ '**/mocks/*', '**/storetest/*', '**/testlib/*',
23
+ '**/i18n/*',
24
+ '**/.github/*', '**/.ci/*', '**/scripts/*',
25
+ '**/docker-compose*',
26
+ '**/__fixtures__/*', '**/test_templates/*',
27
+ '**/__snapshots__/*', '**/retrylayer/*', '**/timerlayer/*',
28
+ '**/cmd/mmctl/*',
29
+ '**/mattermost-redux/src/reducers/*',
30
+ 'playwright.config.ts', 'global-setup.ts',
31
+ ];
32
+ /**
33
+ * Check if a file path matches any infrastructure glob pattern.
34
+ * Uses simple string matching — no external glob library needed.
35
+ */
36
+ function isInfraFile(filePath) {
37
+ const normalized = filePath.replace(/\\/g, '/');
38
+ for (const pattern of INFRA_GLOBS) {
39
+ if (pattern.startsWith('**/')) {
40
+ // Match anywhere in the path
41
+ const suffix = pattern.slice(3);
42
+ if (suffix.endsWith('/*')) {
43
+ // Directory match: **/mocks/* → any segment named "mocks" with a child
44
+ const dirName = suffix.slice(0, -2);
45
+ if (normalized.includes(`/${dirName}/`) || normalized.startsWith(`${dirName}/`))
46
+ return true;
47
+ }
48
+ else if (suffix.endsWith('*')) {
49
+ // Prefix match: **/docker-compose* → file starting with docker-compose
50
+ const prefix = suffix.slice(0, -1);
51
+ const base = normalized.split('/').pop() || '';
52
+ if (base.startsWith(prefix))
53
+ return true;
54
+ }
55
+ else {
56
+ if (normalized.endsWith(`/${suffix}`) || normalized === suffix)
57
+ return true;
58
+ }
59
+ }
60
+ else if (pattern.startsWith('*.')) {
61
+ // Extension match: *.lock
62
+ const ext = pattern.slice(1);
63
+ if (normalized.endsWith(ext))
64
+ return true;
65
+ }
66
+ else {
67
+ // Exact basename match: Makefile, go.mod, go.sum
68
+ const base = normalized.split('/').pop() || '';
69
+ if (base === pattern)
70
+ return true;
71
+ }
72
+ }
73
+ return false;
74
+ }
75
+ function parseGitLog(log) {
76
+ const commits = [];
77
+ let current = null;
78
+ for (const line of log.split('\n')) {
79
+ const trimmed = line.trim();
80
+ if (!trimmed) {
81
+ if (current) {
82
+ commits.push(current);
83
+ current = null;
84
+ }
85
+ continue;
86
+ }
87
+ if (trimmed.includes('|') && /^[0-9a-f]{7,40}\|/.test(trimmed)) {
88
+ if (current) {
89
+ commits.push(current);
90
+ }
91
+ const [hash, ...rest] = trimmed.split('|');
92
+ current = { hash, message: rest.join('|'), files: [] };
93
+ }
94
+ else if (current) {
95
+ current.files.push(trimmed);
96
+ }
97
+ }
98
+ if (current) {
99
+ commits.push(current);
100
+ }
101
+ return commits;
102
+ }
103
+ function getCommitFiles(projectRoot, since) {
104
+ const resolved = (0, path_1.resolve)(projectRoot);
105
+ let log;
106
+ try {
107
+ log = (0, child_process_1.execFileSync)('git', ['log', '--name-only', '--pretty=format:%H|%s', `${since}..HEAD`], {
108
+ cwd: resolved,
109
+ encoding: 'utf-8',
110
+ stdio: ['pipe', 'pipe', 'pipe'],
111
+ maxBuffer: 10 * 1024 * 1024,
112
+ });
113
+ }
114
+ catch (error) {
115
+ logger_js_1.logger.warn(`[train] git log failed: ${error instanceof Error ? error.message : String(error)}`);
116
+ return [];
117
+ }
118
+ return parseGitLog(log);
119
+ }
120
+ /**
121
+ * For each file, try matching both the original path and any prefix-stripped
122
+ * variant against the manifest. Returns one FileBinding per original file.
123
+ */
124
+ function bindWithPrefixes(files, manifest, prefixes) {
125
+ if (prefixes.length === 0) {
126
+ return (0, route_families_js_1.bindFilesToFamilies)(files, manifest);
127
+ }
128
+ // Build candidate variants for each file
129
+ const variants = files.map((f) => {
130
+ const normalized = f.replace(/\\/g, '/');
131
+ const candidates = [normalized];
132
+ for (const prefix of prefixes) {
133
+ if (normalized.startsWith(prefix)) {
134
+ candidates.push(normalized.slice(prefix.length));
135
+ break;
136
+ }
137
+ }
138
+ return candidates;
139
+ });
140
+ // Bind all variants and merge results per original file
141
+ return files.map((f, i) => {
142
+ const normalized = f.replace(/\\/g, '/');
143
+ const allBindings = [];
144
+ const seen = new Set();
145
+ for (const variant of variants[i]) {
146
+ const [result] = (0, route_families_js_1.bindFilesToFamilies)([variant], manifest);
147
+ for (const b of result.bindings) {
148
+ const key = `${b.family}:${b.feature || ''}`;
149
+ if (!seen.has(key)) {
150
+ seen.add(key);
151
+ allBindings.push(b);
152
+ }
153
+ }
154
+ }
155
+ return { file: normalized, bindings: allBindings };
156
+ });
157
+ }
158
+ function validateCommit(manifest, files, hash, message, pathPrefixes) {
159
+ // Filter out non-source files and infrastructure files
160
+ const sourceFiles = files.filter((f) => {
161
+ return !f.endsWith('.md') && !f.endsWith('.json') && !f.endsWith('.yml') && !f.endsWith('.yaml') &&
162
+ !f.startsWith('.') && !f.includes('node_modules/') && !isInfraFile(f);
163
+ });
164
+ if (sourceFiles.length === 0) {
165
+ return { hash, message, changedFiles: [], boundFiles: 0, unboundFiles: [], familiesHit: [] };
166
+ }
167
+ const bindings = pathPrefixes
168
+ ? bindWithPrefixes(sourceFiles, manifest, pathPrefixes)
169
+ : (0, route_families_js_1.bindFilesToFamilies)(sourceFiles, manifest);
170
+ const bound = bindings.filter((b) => b.bindings.length > 0);
171
+ const unbound = bindings.filter((b) => b.bindings.length === 0);
172
+ const familiesHit = new Set();
173
+ for (const b of bound) {
174
+ for (const binding of b.bindings) {
175
+ familiesHit.add(binding.family);
176
+ }
177
+ }
178
+ return {
179
+ hash,
180
+ message,
181
+ changedFiles: sourceFiles,
182
+ boundFiles: bound.length,
183
+ unboundFiles: unbound.map((b) => b.file),
184
+ familiesHit: Array.from(familiesHit),
185
+ };
186
+ }
187
+ function buildValidationReport(commits, manifest) {
188
+ let totalFiles = 0;
189
+ let boundFiles = 0;
190
+ let unboundFiles = 0;
191
+ const familyHits = {};
192
+ const unboundCounts = {};
193
+ for (const commit of commits) {
194
+ totalFiles += commit.changedFiles.length;
195
+ boundFiles += commit.boundFiles;
196
+ unboundFiles += commit.unboundFiles.length;
197
+ for (const fam of commit.familiesHit) {
198
+ familyHits[fam] = (familyHits[fam] || 0) + 1;
199
+ }
200
+ for (const uf of commit.unboundFiles) {
201
+ unboundCounts[uf] = (unboundCounts[uf] || 0) + 1;
202
+ }
203
+ }
204
+ const allFamilyIds = manifest.families.map((f) => f.id);
205
+ const hitFamilyIds = new Set(Object.keys(familyHits));
206
+ const neverHitFamilies = allFamilyIds.filter((id) => !hitFamilyIds.has(id));
207
+ // Cluster unbound files by directory
208
+ const dirCounts = {};
209
+ for (const [file, count] of Object.entries(unboundCounts)) {
210
+ const dir = file.split('/').slice(0, -1).join('/');
211
+ dirCounts[dir] = (dirCounts[dir] || 0) + count;
212
+ }
213
+ const unboundFileClusters = Object.entries(dirCounts)
214
+ .sort(([, a], [, b]) => b - a)
215
+ .slice(0, 20)
216
+ .map(([pattern, count]) => ({
217
+ pattern: `${pattern}/*`,
218
+ count,
219
+ suggestedFamily: pattern.split('/').pop() || 'unknown',
220
+ }));
221
+ return {
222
+ totalCommits: commits.length,
223
+ totalFiles,
224
+ boundFiles,
225
+ unboundFiles,
226
+ coveragePercent: totalFiles > 0 ? Math.round((boundFiles / totalFiles) * 100) : 100,
227
+ commits,
228
+ familyHits,
229
+ neverHitFamilies,
230
+ unboundFileClusters,
231
+ };
232
+ }
233
+ function formatValidationReport(report) {
234
+ const lines = [];
235
+ lines.push(`Validated against ${report.totalCommits} commits`);
236
+ lines.push('');
237
+ lines.push(`Coverage: ${report.coveragePercent}% of files bound (${report.boundFiles}/${report.totalFiles})`);
238
+ lines.push('');
239
+ // Family hit distribution
240
+ const sorted = Object.entries(report.familyHits).sort(([, a], [, b]) => b - a);
241
+ if (sorted.length > 0) {
242
+ lines.push('Family hit distribution:');
243
+ const maxHits = sorted[0][1];
244
+ for (const [family, hits] of sorted) {
245
+ const bar = '\u2588'.repeat(Math.max(1, Math.round((hits / maxHits) * 12)));
246
+ lines.push(` ${family.padEnd(20)} ${bar} ${hits} commits`);
247
+ }
248
+ if (report.neverHitFamilies.length > 0) {
249
+ lines.push(` (never hit)${' '.repeat(8)}${report.neverHitFamilies.join(', ')}`);
250
+ }
251
+ lines.push('');
252
+ }
253
+ // Unbound file clusters
254
+ if (report.unboundFileClusters.length > 0) {
255
+ lines.push(`Unbound files (${report.unboundFiles} files across ${report.totalCommits} commits):`);
256
+ for (const cluster of report.unboundFileClusters.slice(0, 10)) {
257
+ lines.push(` ${cluster.pattern.padEnd(50)} — ${cluster.count} commits (suggest: ${cluster.suggestedFamily})`);
258
+ }
259
+ lines.push('');
260
+ }
261
+ return lines.join('\n');
262
+ }
@@ -0,0 +1,31 @@
1
+ import type { RouteFamilyManifest } from '../knowledge/route_families.js';
2
+ export interface EvidenceCheck {
3
+ hasRouteFamily: boolean;
4
+ hasSpecificRoute: boolean;
5
+ hasPageObject: boolean;
6
+ hasUserAction: boolean;
7
+ hasExistingSpecCited: boolean;
8
+ /** Historical failure correlation boost (0-20) from failure_history */
9
+ historyBoost?: number;
10
+ }
11
+ export type ConfidenceClass = 'high' | 'medium' | 'low';
12
+ export declare const EVIDENCE_THRESHOLDS: {
13
+ readonly minConfidenceForAction: 40;
14
+ readonly minConfidenceForGeneration: 60;
15
+ readonly cannotDetermineBelow: 30;
16
+ readonly highConfidenceAbove: 75;
17
+ };
18
+ export declare function computeConfidence(check: EvidenceCheck): number;
19
+ export declare function classifyConfidence(confidence: number): ConfidenceClass;
20
+ export declare function shouldForceCannotDetermine(confidence: number): boolean;
21
+ export declare function validateRouteAgainstManifest(route: string, familyId: string, manifest: RouteFamilyManifest): boolean;
22
+ export declare function computeCannotDetermineRatio(decisions: Array<{
23
+ action: string;
24
+ }>): number;
25
+ export declare function computeOverallConfidence(decisions: Array<{
26
+ confidence: number;
27
+ action: string;
28
+ }>): ConfidenceClass;
29
+ export type { CompileCheckResult, SmokeRunResult } from '../pipeline/spec_verifier.js';
30
+ export { compileCheckSpec, smokeRunSpec } from '../pipeline/spec_verifier.js';
31
+ //# sourceMappingURL=guardrails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guardrails.d.ts","sourceRoot":"","sources":["../../src/validation/guardrails.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAC,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AAExE,MAAM,WAAW,aAAa;IAC1B,cAAc,EAAE,OAAO,CAAC;IACxB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAExD,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAuB9D;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAQtE;AAED,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAEtE;AAED,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,mBAAmB,GAC9B,OAAO,CAwBT;AAeD,wBAAgB,2BAA2B,CACvC,SAAS,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,GACnC,MAAM,CAMR;AAED,wBAAgB,wBAAwB,CACpC,SAAS,EAAE,KAAK,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,GACvD,eAAe,CAUjB;AAGD,YAAY,EAAC,kBAAkB,EAAE,cAAc,EAAC,MAAM,8BAA8B,CAAC;AACrF,OAAO,EAAC,gBAAgB,EAAE,YAAY,EAAC,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,112 @@
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.smokeRunSpec = exports.compileCheckSpec = exports.EVIDENCE_THRESHOLDS = void 0;
6
+ exports.computeConfidence = computeConfidence;
7
+ exports.classifyConfidence = classifyConfidence;
8
+ exports.shouldForceCannotDetermine = shouldForceCannotDetermine;
9
+ exports.validateRouteAgainstManifest = validateRouteAgainstManifest;
10
+ exports.computeCannotDetermineRatio = computeCannotDetermineRatio;
11
+ exports.computeOverallConfidence = computeOverallConfidence;
12
+ exports.EVIDENCE_THRESHOLDS = {
13
+ minConfidenceForAction: 40,
14
+ minConfidenceForGeneration: 60,
15
+ cannotDetermineBelow: 30,
16
+ highConfidenceAbove: 75,
17
+ };
18
+ function computeConfidence(check) {
19
+ let score = 0;
20
+ if (check.hasRouteFamily) {
21
+ score += 25;
22
+ }
23
+ if (check.hasSpecificRoute) {
24
+ score += 15;
25
+ }
26
+ if (check.hasPageObject) {
27
+ score += 20;
28
+ }
29
+ if (check.hasUserAction) {
30
+ score += 25;
31
+ }
32
+ if (check.hasExistingSpecCited) {
33
+ score += 15;
34
+ }
35
+ // Historical failure correlation: if this file historically causes test failures,
36
+ // we're more confident it needs testing now
37
+ if (check.historyBoost) {
38
+ score += check.historyBoost;
39
+ }
40
+ return Math.min(100, score);
41
+ }
42
+ function classifyConfidence(confidence) {
43
+ if (confidence >= exports.EVIDENCE_THRESHOLDS.highConfidenceAbove) {
44
+ return 'high';
45
+ }
46
+ if (confidence >= exports.EVIDENCE_THRESHOLDS.minConfidenceForAction) {
47
+ return 'medium';
48
+ }
49
+ return 'low';
50
+ }
51
+ function shouldForceCannotDetermine(confidence) {
52
+ return confidence < exports.EVIDENCE_THRESHOLDS.cannotDetermineBelow;
53
+ }
54
+ function validateRouteAgainstManifest(route, familyId, manifest) {
55
+ const family = manifest.families.find((f) => f.id === familyId);
56
+ if (!family) {
57
+ return false;
58
+ }
59
+ // Check family-level routes
60
+ for (const pattern of family.routes) {
61
+ if (routeMatchesPattern(route, pattern)) {
62
+ return true;
63
+ }
64
+ }
65
+ // Check feature-level routes
66
+ if (family.features) {
67
+ for (const feature of family.features) {
68
+ if (feature.routes) {
69
+ for (const pattern of feature.routes) {
70
+ if (routeMatchesPattern(route, pattern)) {
71
+ return true;
72
+ }
73
+ }
74
+ }
75
+ }
76
+ }
77
+ return false;
78
+ }
79
+ function routeMatchesPattern(route, pattern) {
80
+ // Convert route pattern like /{team}/channels/{channel} to regex
81
+ const regexStr = pattern
82
+ .replace(/\{[^}]+\}/g, '[^/]+')
83
+ .replace(/\//g, '\\/');
84
+ try {
85
+ const regex = new RegExp(`^${regexStr}$`);
86
+ return regex.test(route);
87
+ }
88
+ catch {
89
+ return route === pattern || route.startsWith(pattern);
90
+ }
91
+ }
92
+ function computeCannotDetermineRatio(decisions) {
93
+ if (decisions.length === 0) {
94
+ return 0;
95
+ }
96
+ const cannotDetermineCount = decisions.filter((d) => d.action === 'cannot_determine').length;
97
+ return cannotDetermineCount / decisions.length;
98
+ }
99
+ function computeOverallConfidence(decisions) {
100
+ if (decisions.length === 0) {
101
+ return 'low';
102
+ }
103
+ const actionable = decisions.filter((d) => d.action !== 'cannot_determine');
104
+ if (actionable.length === 0) {
105
+ return 'low';
106
+ }
107
+ const avgConfidence = actionable.reduce((sum, d) => sum + d.confidence, 0) / actionable.length;
108
+ return classifyConfidence(avgConfidence);
109
+ }
110
+ var spec_verifier_js_1 = require("../pipeline/spec_verifier.js");
111
+ Object.defineProperty(exports, "compileCheckSpec", { enumerable: true, get: function () { return spec_verifier_js_1.compileCheckSpec; } });
112
+ Object.defineProperty(exports, "smokeRunSpec", { enumerable: true, get: function () { return spec_verifier_js_1.smokeRunSpec; } });
@@ -0,0 +1,67 @@
1
+ export type FlowAction = 'run_existing' | 'add_scenarios' | 'create_spec' | 'cannot_determine';
2
+ export type EvidenceSource = 'ai' | 'catalog' | 'traceability' | 'deterministic';
3
+ export type FlowPriority = 'P0' | 'P1' | 'P2';
4
+ export type ConfidenceClass = 'high' | 'medium' | 'low';
5
+ export type CoverageLevel = 'full' | 'partial' | 'none';
6
+ export interface ExistingSpecCoverage {
7
+ path: string;
8
+ testTitles: string[];
9
+ coverageLevel: CoverageLevel;
10
+ missingScenarios?: string[];
11
+ }
12
+ export type { AssertionPattern } from '../knowledge/route_families.js';
13
+ import type { AssertionPattern } from '../knowledge/route_families.js';
14
+ export interface FlowDecision {
15
+ flowId: string;
16
+ flowName: string;
17
+ routeFamily: string;
18
+ featureId?: string;
19
+ specificRoute?: string;
20
+ changedFiles: string[];
21
+ evidence: string;
22
+ evidenceSource: EvidenceSource;
23
+ confidence: number;
24
+ existingSpecs: ExistingSpecCoverage[];
25
+ action: FlowAction;
26
+ targetSpec?: string;
27
+ newSpecPath?: string;
28
+ scenariosToAdd?: string[];
29
+ blockingReason?: string;
30
+ priority: FlowPriority;
31
+ userActions: string[];
32
+ assertionPatterns?: AssertionPattern[];
33
+ }
34
+ export interface FlowDecisionSummary {
35
+ changedFiles: number;
36
+ routeFamiliesImpacted: string[];
37
+ flowsIdentified: number;
38
+ flowsCovered: number;
39
+ flowsPartial: number;
40
+ flowsUncovered: number;
41
+ actionsRequired: {
42
+ run_existing: number;
43
+ add_scenarios: number;
44
+ create_spec: number;
45
+ cannot_determine: number;
46
+ };
47
+ overallConfidence: ConfidenceClass;
48
+ }
49
+ export interface FlowDecisionReport {
50
+ runId: string;
51
+ timestamp: string;
52
+ gitRef: string;
53
+ summary: FlowDecisionSummary;
54
+ decisions: FlowDecision[];
55
+ warnings: string[];
56
+ model: {
57
+ impactAgent?: string;
58
+ coverageAgent?: string;
59
+ generationAgent?: string;
60
+ };
61
+ }
62
+ export declare function validateFlowDecision(decision: unknown): {
63
+ valid: boolean;
64
+ errors: string[];
65
+ };
66
+ export declare function buildSummary(decisions: FlowDecision[]): FlowDecisionSummary;
67
+ //# sourceMappingURL=output_schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output_schema.d.ts","sourceRoot":"","sources":["../../src/validation/output_schema.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,GAAG,kBAAkB,CAAC;AAC/F,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,eAAe,CAAC;AACjF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACxD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAExD,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED,YAAY,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAC,gBAAgB,EAAC,MAAM,gCAAgC,CAAC;AAErE,MAAM,WAAW,YAAY;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,oBAAoB,EAAE,CAAC;IACtC,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,iBAAiB,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,mBAAmB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE;QACb,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,iBAAiB,EAAE,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,kBAAkB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,mBAAmB,CAAC;IAC7B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE;QACH,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACL;AAMD,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAC,CA0C1F;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,mBAAmB,CAmC3E"}