@machina.ai/openapi-contract-tester 2.1.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 (431) hide show
  1. package/.env.example +91 -0
  2. package/README.md +472 -0
  3. package/dist/ai-engine/assertion-generator.d.ts +48 -0
  4. package/dist/ai-engine/assertion-generator.d.ts.map +1 -0
  5. package/dist/ai-engine/assertion-generator.js +166 -0
  6. package/dist/ai-engine/assertion-generator.js.map +1 -0
  7. package/dist/ai-engine/context-data-generator.d.ts +38 -0
  8. package/dist/ai-engine/context-data-generator.d.ts.map +1 -0
  9. package/dist/ai-engine/context-data-generator.js +146 -0
  10. package/dist/ai-engine/context-data-generator.js.map +1 -0
  11. package/dist/ai-engine/dataflow-detector.d.ts +53 -0
  12. package/dist/ai-engine/dataflow-detector.d.ts.map +1 -0
  13. package/dist/ai-engine/dataflow-detector.js +217 -0
  14. package/dist/ai-engine/dataflow-detector.js.map +1 -0
  15. package/dist/ai-engine/dependency-detector.d.ts +52 -0
  16. package/dist/ai-engine/dependency-detector.d.ts.map +1 -0
  17. package/dist/ai-engine/dependency-detector.js +241 -0
  18. package/dist/ai-engine/dependency-detector.js.map +1 -0
  19. package/dist/ai-engine/edge-case-suggester.d.ts +63 -0
  20. package/dist/ai-engine/edge-case-suggester.d.ts.map +1 -0
  21. package/dist/ai-engine/edge-case-suggester.js +177 -0
  22. package/dist/ai-engine/edge-case-suggester.js.map +1 -0
  23. package/dist/ai-engine/index.d.ts +13 -0
  24. package/dist/ai-engine/index.d.ts.map +1 -0
  25. package/dist/ai-engine/index.js +13 -0
  26. package/dist/ai-engine/index.js.map +1 -0
  27. package/dist/analyzers/ai-failure-analyzer.d.ts +41 -0
  28. package/dist/analyzers/ai-failure-analyzer.d.ts.map +1 -0
  29. package/dist/analyzers/ai-failure-analyzer.js +220 -0
  30. package/dist/analyzers/ai-failure-analyzer.js.map +1 -0
  31. package/dist/analyzers/comparison-utils.d.ts +31 -0
  32. package/dist/analyzers/comparison-utils.d.ts.map +1 -0
  33. package/dist/analyzers/comparison-utils.js +85 -0
  34. package/dist/analyzers/comparison-utils.js.map +1 -0
  35. package/dist/analyzers/context-analyzer.d.ts +49 -0
  36. package/dist/analyzers/context-analyzer.d.ts.map +1 -0
  37. package/dist/analyzers/context-analyzer.js +292 -0
  38. package/dist/analyzers/context-analyzer.js.map +1 -0
  39. package/dist/analyzers/dependency-analyzer.d.ts +44 -0
  40. package/dist/analyzers/dependency-analyzer.d.ts.map +1 -0
  41. package/dist/analyzers/dependency-analyzer.js +313 -0
  42. package/dist/analyzers/dependency-analyzer.js.map +1 -0
  43. package/dist/analyzers/failure-analyzer.d.ts +122 -0
  44. package/dist/analyzers/failure-analyzer.d.ts.map +1 -0
  45. package/dist/analyzers/failure-analyzer.js +140 -0
  46. package/dist/analyzers/failure-analyzer.js.map +1 -0
  47. package/dist/analyzers/failure-detectors/index.d.ts +33 -0
  48. package/dist/analyzers/failure-detectors/index.d.ts.map +1 -0
  49. package/dist/analyzers/failure-detectors/index.js +164 -0
  50. package/dist/analyzers/failure-detectors/index.js.map +1 -0
  51. package/dist/analyzers/failure-discrepancy-correlator.d.ts +111 -0
  52. package/dist/analyzers/failure-discrepancy-correlator.d.ts.map +1 -0
  53. package/dist/analyzers/failure-discrepancy-correlator.js +202 -0
  54. package/dist/analyzers/failure-discrepancy-correlator.js.map +1 -0
  55. package/dist/analyzers/index.d.ts +10 -0
  56. package/dist/analyzers/index.d.ts.map +1 -0
  57. package/dist/analyzers/index.js +10 -0
  58. package/dist/analyzers/index.js.map +1 -0
  59. package/dist/analyzers/semantic-matcher.d.ts +123 -0
  60. package/dist/analyzers/semantic-matcher.d.ts.map +1 -0
  61. package/dist/analyzers/semantic-matcher.js +297 -0
  62. package/dist/analyzers/semantic-matcher.js.map +1 -0
  63. package/dist/analyzers/source-comparator.d.ts +177 -0
  64. package/dist/analyzers/source-comparator.d.ts.map +1 -0
  65. package/dist/analyzers/source-comparator.js +225 -0
  66. package/dist/analyzers/source-comparator.js.map +1 -0
  67. package/dist/business-rules/business-rules-analyzer.d.ts +44 -0
  68. package/dist/business-rules/business-rules-analyzer.d.ts.map +1 -0
  69. package/dist/business-rules/business-rules-analyzer.js +363 -0
  70. package/dist/business-rules/business-rules-analyzer.js.map +1 -0
  71. package/dist/business-rules/business-rules-generator.d.ts +78 -0
  72. package/dist/business-rules/business-rules-generator.d.ts.map +1 -0
  73. package/dist/business-rules/business-rules-generator.js +357 -0
  74. package/dist/business-rules/business-rules-generator.js.map +1 -0
  75. package/dist/business-rules/extractors/rule-extractors.d.ts +50 -0
  76. package/dist/business-rules/extractors/rule-extractors.d.ts.map +1 -0
  77. package/dist/business-rules/extractors/rule-extractors.js +189 -0
  78. package/dist/business-rules/extractors/rule-extractors.js.map +1 -0
  79. package/dist/business-rules/value-generators.d.ts +70 -0
  80. package/dist/business-rules/value-generators.d.ts.map +1 -0
  81. package/dist/business-rules/value-generators.js +142 -0
  82. package/dist/business-rules/value-generators.js.map +1 -0
  83. package/dist/executor/auth-providers/auth-header-builder.d.ts +16 -0
  84. package/dist/executor/auth-providers/auth-header-builder.d.ts.map +1 -0
  85. package/dist/executor/auth-providers/auth-header-builder.js +47 -0
  86. package/dist/executor/auth-providers/auth-header-builder.js.map +1 -0
  87. package/dist/executor/auth-providers/oauth2-provider.d.ts +19 -0
  88. package/dist/executor/auth-providers/oauth2-provider.d.ts.map +1 -0
  89. package/dist/executor/auth-providers/oauth2-provider.js +114 -0
  90. package/dist/executor/auth-providers/oauth2-provider.js.map +1 -0
  91. package/dist/executor/http-client.d.ts +133 -0
  92. package/dist/executor/http-client.d.ts.map +1 -0
  93. package/dist/executor/http-client.js +172 -0
  94. package/dist/executor/http-client.js.map +1 -0
  95. package/dist/executor/http-request-builder.d.ts +69 -0
  96. package/dist/executor/http-request-builder.d.ts.map +1 -0
  97. package/dist/executor/http-request-builder.js +140 -0
  98. package/dist/executor/http-request-builder.js.map +1 -0
  99. package/dist/executor/http-response-parser.d.ts +28 -0
  100. package/dist/executor/http-response-parser.d.ts.map +1 -0
  101. package/dist/executor/http-response-parser.js +74 -0
  102. package/dist/executor/http-response-parser.js.map +1 -0
  103. package/dist/executor/response-handler.d.ts +66 -0
  104. package/dist/executor/response-handler.d.ts.map +1 -0
  105. package/dist/executor/response-handler.js +135 -0
  106. package/dist/executor/response-handler.js.map +1 -0
  107. package/dist/executor/result-processor.d.ts +27 -0
  108. package/dist/executor/result-processor.d.ts.map +1 -0
  109. package/dist/executor/result-processor.js +140 -0
  110. package/dist/executor/result-processor.js.map +1 -0
  111. package/dist/executor/result-utils.d.ts +21 -0
  112. package/dist/executor/result-utils.d.ts.map +1 -0
  113. package/dist/executor/result-utils.js +29 -0
  114. package/dist/executor/result-utils.js.map +1 -0
  115. package/dist/executor/test-executor.d.ts +49 -0
  116. package/dist/executor/test-executor.d.ts.map +1 -0
  117. package/dist/executor/test-executor.js +226 -0
  118. package/dist/executor/test-executor.js.map +1 -0
  119. package/dist/executor/test-runner.d.ts +85 -0
  120. package/dist/executor/test-runner.d.ts.map +1 -0
  121. package/dist/executor/test-runner.js +177 -0
  122. package/dist/executor/test-runner.js.map +1 -0
  123. package/dist/executor/token-detector/index.d.ts +7 -0
  124. package/dist/executor/token-detector/index.d.ts.map +1 -0
  125. package/dist/executor/token-detector/index.js +7 -0
  126. package/dist/executor/token-detector/index.js.map +1 -0
  127. package/dist/executor/token-detector/token-detector.d.ts +64 -0
  128. package/dist/executor/token-detector/token-detector.d.ts.map +1 -0
  129. package/dist/executor/token-detector/token-detector.js +140 -0
  130. package/dist/executor/token-detector/token-detector.js.map +1 -0
  131. package/dist/generators/business-rule-from-stories-generator.d.ts +30 -0
  132. package/dist/generators/business-rule-from-stories-generator.d.ts.map +1 -0
  133. package/dist/generators/business-rule-from-stories-generator.js +227 -0
  134. package/dist/generators/business-rule-from-stories-generator.js.map +1 -0
  135. package/dist/generators/data/ai-data-generator.d.ts +23 -0
  136. package/dist/generators/data/ai-data-generator.d.ts.map +1 -0
  137. package/dist/generators/data/ai-data-generator.js +41 -0
  138. package/dist/generators/data/ai-data-generator.js.map +1 -0
  139. package/dist/generators/data/base-generator.d.ts +121 -0
  140. package/dist/generators/data/base-generator.d.ts.map +1 -0
  141. package/dist/generators/data/base-generator.js +200 -0
  142. package/dist/generators/data/base-generator.js.map +1 -0
  143. package/dist/generators/data/heuristic-data-generator.d.ts +28 -0
  144. package/dist/generators/data/heuristic-data-generator.d.ts.map +1 -0
  145. package/dist/generators/data/heuristic-data-generator.js +49 -0
  146. package/dist/generators/data/heuristic-data-generator.js.map +1 -0
  147. package/dist/generators/data/index.d.ts +48 -0
  148. package/dist/generators/data/index.d.ts.map +1 -0
  149. package/dist/generators/data/index.js +201 -0
  150. package/dist/generators/data/index.js.map +1 -0
  151. package/dist/generators/data/schema-walker.d.ts +45 -0
  152. package/dist/generators/data/schema-walker.d.ts.map +1 -0
  153. package/dist/generators/data/schema-walker.js +103 -0
  154. package/dist/generators/data/schema-walker.js.map +1 -0
  155. package/dist/generators/data/type-strategies.d.ts +79 -0
  156. package/dist/generators/data/type-strategies.d.ts.map +1 -0
  157. package/dist/generators/data/type-strategies.js +394 -0
  158. package/dist/generators/data/type-strategies.js.map +1 -0
  159. package/dist/generators/data-generator.d.ts +11 -0
  160. package/dist/generators/data-generator.d.ts.map +1 -0
  161. package/dist/generators/data-generator.js +11 -0
  162. package/dist/generators/data-generator.js.map +1 -0
  163. package/dist/generators/edge-case-generator.d.ts +55 -0
  164. package/dist/generators/edge-case-generator.d.ts.map +1 -0
  165. package/dist/generators/edge-case-generator.js +327 -0
  166. package/dist/generators/edge-case-generator.js.map +1 -0
  167. package/dist/generators/edge-cases/boundary-analyzer.d.ts +26 -0
  168. package/dist/generators/edge-cases/boundary-analyzer.d.ts.map +1 -0
  169. package/dist/generators/edge-cases/boundary-analyzer.js +95 -0
  170. package/dist/generators/edge-cases/boundary-analyzer.js.map +1 -0
  171. package/dist/generators/error-case-generator.d.ts +11 -0
  172. package/dist/generators/error-case-generator.d.ts.map +1 -0
  173. package/dist/generators/error-case-generator.js +11 -0
  174. package/dist/generators/error-case-generator.js.map +1 -0
  175. package/dist/generators/errors/auth-error-strategy.d.ts +36 -0
  176. package/dist/generators/errors/auth-error-strategy.d.ts.map +1 -0
  177. package/dist/generators/errors/auth-error-strategy.js +118 -0
  178. package/dist/generators/errors/auth-error-strategy.js.map +1 -0
  179. package/dist/generators/errors/business-error-strategy.d.ts +44 -0
  180. package/dist/generators/errors/business-error-strategy.d.ts.map +1 -0
  181. package/dist/generators/errors/business-error-strategy.js +152 -0
  182. package/dist/generators/errors/business-error-strategy.js.map +1 -0
  183. package/dist/generators/errors/error-strategy-factory.d.ts +27 -0
  184. package/dist/generators/errors/error-strategy-factory.d.ts.map +1 -0
  185. package/dist/generators/errors/error-strategy-factory.js +47 -0
  186. package/dist/generators/errors/error-strategy-factory.js.map +1 -0
  187. package/dist/generators/errors/error-strategy.d.ts +62 -0
  188. package/dist/generators/errors/error-strategy.d.ts.map +1 -0
  189. package/dist/generators/errors/error-strategy.js +69 -0
  190. package/dist/generators/errors/error-strategy.js.map +1 -0
  191. package/dist/generators/errors/index.d.ts +23 -0
  192. package/dist/generators/errors/index.d.ts.map +1 -0
  193. package/dist/generators/errors/index.js +73 -0
  194. package/dist/generators/errors/index.js.map +1 -0
  195. package/dist/generators/errors/validation-error-strategy.d.ts +25 -0
  196. package/dist/generators/errors/validation-error-strategy.d.ts.map +1 -0
  197. package/dist/generators/errors/validation-error-strategy.js +214 -0
  198. package/dist/generators/errors/validation-error-strategy.js.map +1 -0
  199. package/dist/generators/happy-path-generator.d.ts +93 -0
  200. package/dist/generators/happy-path-generator.d.ts.map +1 -0
  201. package/dist/generators/happy-path-generator.js +275 -0
  202. package/dist/generators/happy-path-generator.js.map +1 -0
  203. package/dist/generators/test-enricher.d.ts +44 -0
  204. package/dist/generators/test-enricher.d.ts.map +1 -0
  205. package/dist/generators/test-enricher.js +109 -0
  206. package/dist/generators/test-enricher.js.map +1 -0
  207. package/dist/index.d.ts +9 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +14 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/llm/ai-cache.d.ts +123 -0
  212. package/dist/llm/ai-cache.d.ts.map +1 -0
  213. package/dist/llm/ai-cache.js +220 -0
  214. package/dist/llm/ai-cache.js.map +1 -0
  215. package/dist/llm/ai-client.d.ts +92 -0
  216. package/dist/llm/ai-client.d.ts.map +1 -0
  217. package/dist/llm/ai-client.js +386 -0
  218. package/dist/llm/ai-client.js.map +1 -0
  219. package/dist/llm/data-generator-ai.d.ts +84 -0
  220. package/dist/llm/data-generator-ai.d.ts.map +1 -0
  221. package/dist/llm/data-generator-ai.js +284 -0
  222. package/dist/llm/data-generator-ai.js.map +1 -0
  223. package/dist/llm/index.d.ts +7 -0
  224. package/dist/llm/index.d.ts.map +1 -0
  225. package/dist/llm/index.js +7 -0
  226. package/dist/llm/index.js.map +1 -0
  227. package/dist/mcp/handlers/base-handler.d.ts +72 -0
  228. package/dist/mcp/handlers/base-handler.d.ts.map +1 -0
  229. package/dist/mcp/handlers/base-handler.js +86 -0
  230. package/dist/mcp/handlers/base-handler.js.map +1 -0
  231. package/dist/mcp/handlers/compare-sources.d.ts +91 -0
  232. package/dist/mcp/handlers/compare-sources.d.ts.map +1 -0
  233. package/dist/mcp/handlers/compare-sources.js +182 -0
  234. package/dist/mcp/handlers/compare-sources.js.map +1 -0
  235. package/dist/mcp/handlers/export-results.d.ts +53 -0
  236. package/dist/mcp/handlers/export-results.d.ts.map +1 -0
  237. package/dist/mcp/handlers/export-results.js +132 -0
  238. package/dist/mcp/handlers/export-results.js.map +1 -0
  239. package/dist/mcp/handlers/export-to-postman.d.ts +65 -0
  240. package/dist/mcp/handlers/export-to-postman.d.ts.map +1 -0
  241. package/dist/mcp/handlers/export-to-postman.js +128 -0
  242. package/dist/mcp/handlers/export-to-postman.js.map +1 -0
  243. package/dist/mcp/handlers/generate-tests.d.ts +74 -0
  244. package/dist/mcp/handlers/generate-tests.d.ts.map +1 -0
  245. package/dist/mcp/handlers/generate-tests.js +519 -0
  246. package/dist/mcp/handlers/generate-tests.js.map +1 -0
  247. package/dist/mcp/handlers/index.d.ts +13 -0
  248. package/dist/mcp/handlers/index.d.ts.map +1 -0
  249. package/dist/mcp/handlers/index.js +12 -0
  250. package/dist/mcp/handlers/index.js.map +1 -0
  251. package/dist/mcp/handlers/run-tests.d.ts +89 -0
  252. package/dist/mcp/handlers/run-tests.d.ts.map +1 -0
  253. package/dist/mcp/handlers/run-tests.js +233 -0
  254. package/dist/mcp/handlers/run-tests.js.map +1 -0
  255. package/dist/mcp/handlers/types.d.ts +61 -0
  256. package/dist/mcp/handlers/types.d.ts.map +1 -0
  257. package/dist/mcp/handlers/types.js +9 -0
  258. package/dist/mcp/handlers/types.js.map +1 -0
  259. package/dist/mcp/server.d.ts +64 -0
  260. package/dist/mcp/server.d.ts.map +1 -0
  261. package/dist/mcp/server.js +200 -0
  262. package/dist/mcp/server.js.map +1 -0
  263. package/dist/mcp/services/file-service.d.ts +66 -0
  264. package/dist/mcp/services/file-service.d.ts.map +1 -0
  265. package/dist/mcp/services/file-service.js +143 -0
  266. package/dist/mcp/services/file-service.js.map +1 -0
  267. package/dist/mcp/services/llm-service.d.ts +70 -0
  268. package/dist/mcp/services/llm-service.d.ts.map +1 -0
  269. package/dist/mcp/services/llm-service.js +189 -0
  270. package/dist/mcp/services/llm-service.js.map +1 -0
  271. package/dist/mcp/services/postman-service.d.ts +128 -0
  272. package/dist/mcp/services/postman-service.d.ts.map +1 -0
  273. package/dist/mcp/services/postman-service.js +266 -0
  274. package/dist/mcp/services/postman-service.js.map +1 -0
  275. package/dist/mcp/services/report-service.d.ts +81 -0
  276. package/dist/mcp/services/report-service.d.ts.map +1 -0
  277. package/dist/mcp/services/report-service.js +210 -0
  278. package/dist/mcp/services/report-service.js.map +1 -0
  279. package/dist/mcp/services/spec-service.d.ts +58 -0
  280. package/dist/mcp/services/spec-service.d.ts.map +1 -0
  281. package/dist/mcp/services/spec-service.js +140 -0
  282. package/dist/mcp/services/spec-service.js.map +1 -0
  283. package/dist/parsers/endpoint-extractor.d.ts +32 -0
  284. package/dist/parsers/endpoint-extractor.d.ts.map +1 -0
  285. package/dist/parsers/endpoint-extractor.js +160 -0
  286. package/dist/parsers/endpoint-extractor.js.map +1 -0
  287. package/dist/parsers/openapi-parser.d.ts +120 -0
  288. package/dist/parsers/openapi-parser.d.ts.map +1 -0
  289. package/dist/parsers/openapi-parser.js +257 -0
  290. package/dist/parsers/openapi-parser.js.map +1 -0
  291. package/dist/parsers/visitors/auth-visitor.d.ts +28 -0
  292. package/dist/parsers/visitors/auth-visitor.d.ts.map +1 -0
  293. package/dist/parsers/visitors/auth-visitor.js +116 -0
  294. package/dist/parsers/visitors/auth-visitor.js.map +1 -0
  295. package/dist/prd/index.d.ts +10 -0
  296. package/dist/prd/index.d.ts.map +1 -0
  297. package/dist/prd/index.js +10 -0
  298. package/dist/prd/index.js.map +1 -0
  299. package/dist/prd/prd-reader.d.ts +124 -0
  300. package/dist/prd/prd-reader.d.ts.map +1 -0
  301. package/dist/prd/prd-reader.js +308 -0
  302. package/dist/prd/prd-reader.js.map +1 -0
  303. package/dist/prd/prd-storage.d.ts +232 -0
  304. package/dist/prd/prd-storage.d.ts.map +1 -0
  305. package/dist/prd/prd-storage.js +129 -0
  306. package/dist/prd/prd-storage.js.map +1 -0
  307. package/dist/repairers/test-auto-repairer.d.ts +61 -0
  308. package/dist/repairers/test-auto-repairer.d.ts.map +1 -0
  309. package/dist/repairers/test-auto-repairer.js +213 -0
  310. package/dist/repairers/test-auto-repairer.js.map +1 -0
  311. package/dist/reporters/comparison-report-generator.d.ts +58 -0
  312. package/dist/reporters/comparison-report-generator.d.ts.map +1 -0
  313. package/dist/reporters/comparison-report-generator.js +369 -0
  314. package/dist/reporters/comparison-report-generator.js.map +1 -0
  315. package/dist/reporters/gherkin-formatter.d.ts +34 -0
  316. package/dist/reporters/gherkin-formatter.d.ts.map +1 -0
  317. package/dist/reporters/gherkin-formatter.js +231 -0
  318. package/dist/reporters/gherkin-formatter.js.map +1 -0
  319. package/dist/reporters/html-report-generator.d.ts +174 -0
  320. package/dist/reporters/html-report-generator.d.ts.map +1 -0
  321. package/dist/reporters/html-report-generator.js +194 -0
  322. package/dist/reporters/html-report-generator.js.map +1 -0
  323. package/dist/reporters/report-charts.d.ts +23 -0
  324. package/dist/reporters/report-charts.d.ts.map +1 -0
  325. package/dist/reporters/report-charts.js +182 -0
  326. package/dist/reporters/report-charts.js.map +1 -0
  327. package/dist/reporters/report-sections.d.ts +34 -0
  328. package/dist/reporters/report-sections.d.ts.map +1 -0
  329. package/dist/reporters/report-sections.js +481 -0
  330. package/dist/reporters/report-sections.js.map +1 -0
  331. package/dist/reporters/report-styles.d.ts +12 -0
  332. package/dist/reporters/report-styles.d.ts.map +1 -0
  333. package/dist/reporters/report-styles.js +412 -0
  334. package/dist/reporters/report-styles.js.map +1 -0
  335. package/dist/reporters/report-test-details.d.ts +56 -0
  336. package/dist/reporters/report-test-details.d.ts.map +1 -0
  337. package/dist/reporters/report-test-details.js +328 -0
  338. package/dist/reporters/report-test-details.js.map +1 -0
  339. package/dist/reporters/report-utils.d.ts +40 -0
  340. package/dist/reporters/report-utils.d.ts.map +1 -0
  341. package/dist/reporters/report-utils.js +163 -0
  342. package/dist/reporters/report-utils.js.map +1 -0
  343. package/dist/types/ai-config.d.ts +63 -0
  344. package/dist/types/ai-config.d.ts.map +1 -0
  345. package/dist/types/ai-config.js +79 -0
  346. package/dist/types/ai-config.js.map +1 -0
  347. package/dist/types/business-rules.d.ts +235 -0
  348. package/dist/types/business-rules.d.ts.map +1 -0
  349. package/dist/types/business-rules.js +6 -0
  350. package/dist/types/business-rules.js.map +1 -0
  351. package/dist/types/config.d.ts +106 -0
  352. package/dist/types/config.d.ts.map +1 -0
  353. package/dist/types/config.js +6 -0
  354. package/dist/types/config.js.map +1 -0
  355. package/dist/types/core.d.ts +72 -0
  356. package/dist/types/core.d.ts.map +1 -0
  357. package/dist/types/core.js +6 -0
  358. package/dist/types/core.js.map +1 -0
  359. package/dist/types/index.d.ts +17 -0
  360. package/dist/types/index.d.ts.map +1 -0
  361. package/dist/types/index.js +10 -0
  362. package/dist/types/index.js.map +1 -0
  363. package/dist/types/openapi.d.ts +139 -0
  364. package/dist/types/openapi.d.ts.map +1 -0
  365. package/dist/types/openapi.js +6 -0
  366. package/dist/types/openapi.js.map +1 -0
  367. package/dist/types/pact.d.ts +101 -0
  368. package/dist/types/pact.d.ts.map +1 -0
  369. package/dist/types/pact.js +6 -0
  370. package/dist/types/pact.js.map +1 -0
  371. package/dist/types/reporting.d.ts +93 -0
  372. package/dist/types/reporting.d.ts.map +1 -0
  373. package/dist/types/reporting.js +6 -0
  374. package/dist/types/reporting.js.map +1 -0
  375. package/dist/types/test-case.d.ts +233 -0
  376. package/dist/types/test-case.d.ts.map +1 -0
  377. package/dist/types/test-case.js +6 -0
  378. package/dist/types/test-case.js.map +1 -0
  379. package/dist/types/test-execution.d.ts +80 -0
  380. package/dist/types/test-execution.d.ts.map +1 -0
  381. package/dist/types/test-execution.js +6 -0
  382. package/dist/types/test-execution.js.map +1 -0
  383. package/dist/utils/auth-generator.d.ts +30 -0
  384. package/dist/utils/auth-generator.d.ts.map +1 -0
  385. package/dist/utils/auth-generator.js +68 -0
  386. package/dist/utils/auth-generator.js.map +1 -0
  387. package/dist/utils/config.d.ts +181 -0
  388. package/dist/utils/config.d.ts.map +1 -0
  389. package/dist/utils/config.js +141 -0
  390. package/dist/utils/config.js.map +1 -0
  391. package/dist/utils/coverage-calculator.d.ts +81 -0
  392. package/dist/utils/coverage-calculator.d.ts.map +1 -0
  393. package/dist/utils/coverage-calculator.js +134 -0
  394. package/dist/utils/coverage-calculator.js.map +1 -0
  395. package/dist/utils/data-loader.d.ts +52 -0
  396. package/dist/utils/data-loader.d.ts.map +1 -0
  397. package/dist/utils/data-loader.js +192 -0
  398. package/dist/utils/data-loader.js.map +1 -0
  399. package/dist/utils/errors.d.ts +167 -0
  400. package/dist/utils/errors.d.ts.map +1 -0
  401. package/dist/utils/errors.js +257 -0
  402. package/dist/utils/errors.js.map +1 -0
  403. package/dist/utils/logger.d.ts +220 -0
  404. package/dist/utils/logger.d.ts.map +1 -0
  405. package/dist/utils/logger.js +325 -0
  406. package/dist/utils/logger.js.map +1 -0
  407. package/dist/utils/openapi-discovery.d.ts +31 -0
  408. package/dist/utils/openapi-discovery.d.ts.map +1 -0
  409. package/dist/utils/openapi-discovery.js +322 -0
  410. package/dist/utils/openapi-discovery.js.map +1 -0
  411. package/dist/utils/path-resolver.d.ts +101 -0
  412. package/dist/utils/path-resolver.d.ts.map +1 -0
  413. package/dist/utils/path-resolver.js +167 -0
  414. package/dist/utils/path-resolver.js.map +1 -0
  415. package/dist/utils/resilience.d.ts +181 -0
  416. package/dist/utils/resilience.d.ts.map +1 -0
  417. package/dist/utils/resilience.js +269 -0
  418. package/dist/utils/resilience.js.map +1 -0
  419. package/dist/validators/openapi-validator.d.ts +198 -0
  420. package/dist/validators/openapi-validator.d.ts.map +1 -0
  421. package/dist/validators/openapi-validator.js +349 -0
  422. package/dist/validators/openapi-validator.js.map +1 -0
  423. package/dist/validators/response-matcher.d.ts +84 -0
  424. package/dist/validators/response-matcher.d.ts.map +1 -0
  425. package/dist/validators/response-matcher.js +234 -0
  426. package/dist/validators/response-matcher.js.map +1 -0
  427. package/dist/validators/schema-validator.d.ts +174 -0
  428. package/dist/validators/schema-validator.d.ts.map +1 -0
  429. package/dist/validators/schema-validator.js +340 -0
  430. package/dist/validators/schema-validator.js.map +1 -0
  431. package/package.json +76 -0
@@ -0,0 +1,232 @@
1
+ /**
2
+ * PRD Storage Module
3
+ *
4
+ * Handles saving and loading normalized PRD documents.
5
+ * The normalized PRD is generated by the LLM and saved here for use
6
+ * by the test generator.
7
+ *
8
+ * @module prd/prd-storage
9
+ */
10
+ /**
11
+ * Normalized PRD structure
12
+ * This structure is generated by the LLM from raw PRD documents
13
+ */
14
+ export interface NormalizedPrd {
15
+ /**
16
+ * Version of the normalized PRD format
17
+ */
18
+ version: string;
19
+ /**
20
+ * Timestamp when the PRD was normalized
21
+ */
22
+ normalizedAt: string;
23
+ /**
24
+ * Original source files used to generate this PRD
25
+ */
26
+ sources: string[];
27
+ /**
28
+ * Project/product information
29
+ */
30
+ project: {
31
+ name: string;
32
+ description?: string;
33
+ version?: string;
34
+ };
35
+ /**
36
+ * Features/functionalities described in the PRD
37
+ */
38
+ features: PrdFeature[];
39
+ /**
40
+ * Business rules extracted from the PRD
41
+ */
42
+ businessRules: PrdBusinessRule[];
43
+ /**
44
+ * User stories extracted from the PRD
45
+ */
46
+ userStories: PrdUserStory[];
47
+ /**
48
+ * API requirements extracted from the PRD
49
+ */
50
+ apiRequirements: PrdApiRequirement[];
51
+ }
52
+ /**
53
+ * A feature/functionality in the PRD
54
+ */
55
+ export interface PrdFeature {
56
+ /**
57
+ * Unique identifier for the feature
58
+ */
59
+ id: string;
60
+ /**
61
+ * Feature name
62
+ */
63
+ name: string;
64
+ /**
65
+ * Feature description
66
+ */
67
+ description: string;
68
+ /**
69
+ * Priority (high, medium, low)
70
+ */
71
+ priority?: 'high' | 'medium' | 'low';
72
+ /**
73
+ * Related endpoints
74
+ */
75
+ relatedEndpoints?: string[];
76
+ /**
77
+ * Acceptance criteria
78
+ */
79
+ acceptanceCriteria?: string[];
80
+ }
81
+ /**
82
+ * A business rule from the PRD
83
+ */
84
+ export interface PrdBusinessRule {
85
+ /**
86
+ * Unique identifier for the rule
87
+ */
88
+ id: string;
89
+ /**
90
+ * Rule name/title
91
+ */
92
+ name: string;
93
+ /**
94
+ * Rule description
95
+ */
96
+ description: string;
97
+ /**
98
+ * The condition that triggers this rule
99
+ */
100
+ condition: string;
101
+ /**
102
+ * Expected outcome/action
103
+ */
104
+ expectedOutcome: string;
105
+ /**
106
+ * Related endpoints
107
+ */
108
+ relatedEndpoints?: string[];
109
+ /**
110
+ * Example values for testing
111
+ */
112
+ examples?: {
113
+ valid?: unknown[];
114
+ invalid?: unknown[];
115
+ };
116
+ }
117
+ /**
118
+ * A user story from the PRD
119
+ */
120
+ export interface PrdUserStory {
121
+ /**
122
+ * Unique identifier
123
+ */
124
+ id: string;
125
+ /**
126
+ * User story in "As a... I want... So that..." format
127
+ */
128
+ story: string;
129
+ /**
130
+ * The actor/user role
131
+ */
132
+ actor: string;
133
+ /**
134
+ * What the user wants to do
135
+ */
136
+ action: string;
137
+ /**
138
+ * Why they want to do it
139
+ */
140
+ benefit?: string;
141
+ /**
142
+ * Acceptance criteria
143
+ */
144
+ acceptanceCriteria?: string[];
145
+ /**
146
+ * Related endpoints
147
+ */
148
+ relatedEndpoints?: string[];
149
+ }
150
+ /**
151
+ * API-specific requirement from the PRD
152
+ */
153
+ export interface PrdApiRequirement {
154
+ /**
155
+ * Unique identifier
156
+ */
157
+ id: string;
158
+ /**
159
+ * Endpoint path pattern
160
+ */
161
+ endpoint?: string;
162
+ /**
163
+ * HTTP method
164
+ */
165
+ method?: string;
166
+ /**
167
+ * Description of the requirement
168
+ */
169
+ description: string;
170
+ /**
171
+ * Expected request format
172
+ */
173
+ expectedRequest?: {
174
+ headers?: Record<string, string>;
175
+ body?: Record<string, unknown>;
176
+ };
177
+ /**
178
+ * Expected response
179
+ */
180
+ expectedResponse?: {
181
+ status?: number;
182
+ body?: Record<string, unknown>;
183
+ };
184
+ /**
185
+ * Validation rules for this endpoint
186
+ */
187
+ validations?: string[];
188
+ }
189
+ /**
190
+ * Saves a normalized PRD to a file
191
+ *
192
+ * @param prd - Normalized PRD to save
193
+ * @param outputPath - Path to save the PRD (default: ./standard_prd.json)
194
+ * @returns Path where the PRD was saved
195
+ *
196
+ * @example
197
+ * ```typescript
198
+ * const prd: NormalizedPrd = { ... };
199
+ * const savedPath = await savePrd(prd, './output/prd.json');
200
+ * ```
201
+ */
202
+ export declare function savePrd(prd: NormalizedPrd, outputPath?: string): Promise<string>;
203
+ /**
204
+ * Loads a normalized PRD from a file
205
+ *
206
+ * @param filePath - Path to the normalized PRD file
207
+ * @returns Normalized PRD
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * const prd = await loadPrd('./standard_prd.json');
212
+ * console.log(prd.businessRules.length);
213
+ * ```
214
+ */
215
+ export declare function loadPrd(filePath: string): Promise<NormalizedPrd>;
216
+ /**
217
+ * Validates a normalized PRD structure
218
+ *
219
+ * @param prd - PRD to validate
220
+ * @returns Validation result
221
+ */
222
+ export declare function validatePrd(prd: unknown): {
223
+ valid: boolean;
224
+ errors: string[];
225
+ };
226
+ /**
227
+ * Creates an empty normalized PRD template
228
+ *
229
+ * @returns Empty normalized PRD structure
230
+ */
231
+ export declare function createEmptyPrd(): NormalizedPrd;
232
+ //# sourceMappingURL=prd-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-storage.d.ts","sourceRoot":"","sources":["../../src/prd/prd-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * PRD Storage Module
3
+ *
4
+ * Handles saving and loading normalized PRD documents.
5
+ * The normalized PRD is generated by the LLM and saved here for use
6
+ * by the test generator.
7
+ *
8
+ * @module prd/prd-storage
9
+ */
10
+ import * as fs from 'fs';
11
+ import * as path from 'path';
12
+ import { createLogger } from '../utils/logger.js';
13
+ const log = createLogger('prd-storage');
14
+ /**
15
+ * Saves a normalized PRD to a file
16
+ *
17
+ * @param prd - Normalized PRD to save
18
+ * @param outputPath - Path to save the PRD (default: ./standard_prd.json)
19
+ * @returns Path where the PRD was saved
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const prd: NormalizedPrd = { ... };
24
+ * const savedPath = await savePrd(prd, './output/prd.json');
25
+ * ```
26
+ */
27
+ export async function savePrd(prd, outputPath = './standard_prd.json') {
28
+ log.debug('Saving normalized PRD', { outputPath });
29
+ // Ensure directory exists
30
+ const dir = path.dirname(outputPath);
31
+ if (!fs.existsSync(dir)) {
32
+ fs.mkdirSync(dir, { recursive: true });
33
+ }
34
+ // Add metadata
35
+ const prdWithMeta = {
36
+ ...prd,
37
+ version: prd.version || '1.0.0',
38
+ normalizedAt: prd.normalizedAt || new Date().toISOString(),
39
+ };
40
+ // Write file
41
+ fs.writeFileSync(outputPath, JSON.stringify(prdWithMeta, null, 2), 'utf-8');
42
+ log.info('Normalized PRD saved', {
43
+ outputPath,
44
+ features: prd.features.length,
45
+ businessRules: prd.businessRules.length,
46
+ userStories: prd.userStories.length,
47
+ apiRequirements: prd.apiRequirements.length,
48
+ });
49
+ return outputPath;
50
+ }
51
+ /**
52
+ * Loads a normalized PRD from a file
53
+ *
54
+ * @param filePath - Path to the normalized PRD file
55
+ * @returns Normalized PRD
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const prd = await loadPrd('./standard_prd.json');
60
+ * console.log(prd.businessRules.length);
61
+ * ```
62
+ */
63
+ export async function loadPrd(filePath) {
64
+ log.debug('Loading normalized PRD', { filePath });
65
+ if (!fs.existsSync(filePath)) {
66
+ throw new Error(`Normalized PRD file not found: ${filePath}`);
67
+ }
68
+ const content = fs.readFileSync(filePath, 'utf-8');
69
+ const prd = JSON.parse(content);
70
+ log.info('Normalized PRD loaded', {
71
+ filePath,
72
+ features: prd.features?.length || 0,
73
+ businessRules: prd.businessRules?.length || 0,
74
+ userStories: prd.userStories?.length || 0,
75
+ apiRequirements: prd.apiRequirements?.length || 0,
76
+ });
77
+ return prd;
78
+ }
79
+ /**
80
+ * Validates a normalized PRD structure
81
+ *
82
+ * @param prd - PRD to validate
83
+ * @returns Validation result
84
+ */
85
+ export function validatePrd(prd) {
86
+ const errors = [];
87
+ if (!prd || typeof prd !== 'object') {
88
+ return { valid: false, errors: ['PRD must be an object'] };
89
+ }
90
+ const p = prd;
91
+ // Check required fields
92
+ if (!p.project || typeof p.project !== 'object') {
93
+ errors.push('Missing or invalid "project" field');
94
+ }
95
+ if (!Array.isArray(p.features)) {
96
+ errors.push('Missing or invalid "features" array');
97
+ }
98
+ if (!Array.isArray(p.businessRules)) {
99
+ errors.push('Missing or invalid "businessRules" array');
100
+ }
101
+ if (!Array.isArray(p.userStories)) {
102
+ errors.push('Missing or invalid "userStories" array');
103
+ }
104
+ if (!Array.isArray(p.apiRequirements)) {
105
+ errors.push('Missing or invalid "apiRequirements" array');
106
+ }
107
+ return { valid: errors.length === 0, errors };
108
+ }
109
+ /**
110
+ * Creates an empty normalized PRD template
111
+ *
112
+ * @returns Empty normalized PRD structure
113
+ */
114
+ export function createEmptyPrd() {
115
+ return {
116
+ version: '1.0.0',
117
+ normalizedAt: new Date().toISOString(),
118
+ sources: [],
119
+ project: {
120
+ name: '',
121
+ description: '',
122
+ },
123
+ features: [],
124
+ businessRules: [],
125
+ userStories: [],
126
+ apiRequirements: [],
127
+ };
128
+ }
129
+ //# sourceMappingURL=prd-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd-storage.js","sourceRoot":"","sources":["../../src/prd/prd-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Test Auto-Repairer
3
+ *
4
+ * Analyzes test failures and suggests automatic repairs for common issues.
5
+ * Focuses on:
6
+ * - Missing authentication dependencies
7
+ * - Missing resource dependencies
8
+ * - Schema validation errors
9
+ *
10
+ * @module repairers/test-auto-repairer
11
+ */
12
+ import type { TestCase, TestResult, ParsedEndpoint } from '../types/index.js';
13
+ /**
14
+ * Type of repair needed
15
+ */
16
+ export type RepairType = 'add_auth_dependency' | 'add_resource_dependency' | 'fix_schema_validation' | 'fix_request_body';
17
+ /**
18
+ * Repair suggestion for a failed test
19
+ */
20
+ export interface TestRepair {
21
+ testId: string;
22
+ type: RepairType;
23
+ description: string;
24
+ confidence: 'high' | 'medium' | 'low';
25
+ fix: {
26
+ addDependency?: string;
27
+ extractId?: string;
28
+ injectId?: string;
29
+ newBody?: unknown;
30
+ reason: string;
31
+ };
32
+ }
33
+ /**
34
+ * Result of repair analysis
35
+ */
36
+ export interface RepairResult {
37
+ repairs: TestRepair[];
38
+ summary: {
39
+ total: number;
40
+ repairable: number;
41
+ byType: Record<RepairType, number>;
42
+ };
43
+ }
44
+ /**
45
+ * Analyzes failed tests and suggests repairs
46
+ *
47
+ * @param failedResults - Array of failed test results
48
+ * @param allTests - All test cases
49
+ * @param endpoints - Parsed endpoints
50
+ * @returns Repair suggestions
51
+ */
52
+ export declare function analyzeAndRepair(failedResults: TestResult[], allTests: TestCase[], endpoints: ParsedEndpoint[]): Promise<RepairResult>;
53
+ /**
54
+ * Applies repairs to test cases
55
+ *
56
+ * @param tests - Original test cases
57
+ * @param repairs - Repairs to apply
58
+ * @returns Updated test cases
59
+ */
60
+ export declare function applyRepairs(tests: TestCase[], repairs: TestRepair[]): TestCase[];
61
+ //# sourceMappingURL=test-auto-repairer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-auto-repairer.d.ts","sourceRoot":"","sources":["../../src/repairers/test-auto-repairer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAM9E;;GAEG;AACH,MAAM,MAAM,UAAU,GAClB,qBAAqB,GACrB,yBAAyB,GACzB,uBAAuB,GACvB,kBAAkB,CAAC;AAEvB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,GAAG,EAAE;QACH,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC;CACH;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,aAAa,EAAE,UAAU,EAAE,EAC3B,QAAQ,EAAE,QAAQ,EAAE,EACpB,SAAS,EAAE,cAAc,EAAE,GAC1B,OAAO,CAAC,YAAY,CAAC,CAkCvB;AA4JD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,QAAQ,EAAE,EACjB,OAAO,EAAE,UAAU,EAAE,GACpB,QAAQ,EAAE,CA2BZ"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Test Auto-Repairer
3
+ *
4
+ * Analyzes test failures and suggests automatic repairs for common issues.
5
+ * Focuses on:
6
+ * - Missing authentication dependencies
7
+ * - Missing resource dependencies
8
+ * - Schema validation errors
9
+ *
10
+ * @module repairers/test-auto-repairer
11
+ */
12
+ import { callLLM } from '../llm/ai-client.js';
13
+ import { createLogger } from '../utils/logger.js';
14
+ const log = createLogger('test-auto-repairer');
15
+ /**
16
+ * Analyzes failed tests and suggests repairs
17
+ *
18
+ * @param failedResults - Array of failed test results
19
+ * @param allTests - All test cases
20
+ * @param endpoints - Parsed endpoints
21
+ * @returns Repair suggestions
22
+ */
23
+ export async function analyzeAndRepair(failedResults, allTests, endpoints) {
24
+ log.info('Analyzing failed tests for auto-repair', {
25
+ failedCount: failedResults.length
26
+ });
27
+ const repairs = [];
28
+ for (const result of failedResults) {
29
+ const repair = await suggestRepair(result, allTests, endpoints);
30
+ if (repair) {
31
+ repairs.push(repair);
32
+ }
33
+ }
34
+ // Build summary
35
+ const byType = {};
36
+ for (const repair of repairs) {
37
+ byType[repair.type] = (byType[repair.type] || 0) + 1;
38
+ }
39
+ log.info('Auto-repair analysis complete', {
40
+ total: failedResults.length,
41
+ repairable: repairs.length,
42
+ byType
43
+ });
44
+ return {
45
+ repairs,
46
+ summary: {
47
+ total: failedResults.length,
48
+ repairable: repairs.length,
49
+ byType: byType
50
+ }
51
+ };
52
+ }
53
+ /**
54
+ * Suggests a repair for a single failed test
55
+ *
56
+ * @param result - Failed test result
57
+ * @param allTests - All test cases
58
+ * @param endpoints - Parsed endpoints
59
+ * @returns Repair suggestion or null
60
+ */
61
+ async function suggestRepair(result, allTests, endpoints) {
62
+ const { testCase, actualStatus, error } = result;
63
+ // Repair 1: Authentication failure (401/403)
64
+ if (actualStatus === 401 || actualStatus === 403) {
65
+ return {
66
+ testId: testCase.id,
67
+ type: 'add_auth_dependency',
68
+ description: 'Test requires authentication but has no auth dependency',
69
+ confidence: 'high',
70
+ fix: {
71
+ addDependency: 'login-success',
72
+ reason: 'Test received 401/403, needs authentication'
73
+ }
74
+ };
75
+ }
76
+ // Repair 2: Resource not found (404) - add creation dependency
77
+ if (actualStatus === 404 && testCase.method !== 'POST') {
78
+ const createTest = findCreateTest(testCase, allTests);
79
+ if (createTest) {
80
+ return {
81
+ testId: testCase.id,
82
+ type: 'add_resource_dependency',
83
+ description: `Resource not found, needs to be created first`,
84
+ confidence: 'high',
85
+ fix: {
86
+ addDependency: createTest.id,
87
+ extractId: 'response.body.id',
88
+ injectId: `path:${testCase.path}`,
89
+ reason: `Resource doesn't exist, must create via ${createTest.path}`
90
+ }
91
+ };
92
+ }
93
+ }
94
+ // Repair 3: Schema validation or bad request (400)
95
+ if (actualStatus === 400) {
96
+ // Try to fix with AI
97
+ const endpoint = endpoints.find(e => e.path === testCase.path && e.method === testCase.method);
98
+ if (endpoint && testCase.body) {
99
+ const fixedBody = await fixRequestBodyWithAI(testCase, endpoint, error);
100
+ if (fixedBody) {
101
+ return {
102
+ testId: testCase.id,
103
+ type: 'fix_schema_validation',
104
+ description: 'Request body does not match schema',
105
+ confidence: 'medium',
106
+ fix: {
107
+ newBody: fixedBody,
108
+ reason: 'AI corrected request body to match schema'
109
+ }
110
+ };
111
+ }
112
+ }
113
+ }
114
+ return null;
115
+ }
116
+ /**
117
+ * Finds the corresponding creation test for a resource
118
+ *
119
+ * @param testCase - Test that needs a resource
120
+ * @param allTests - All test cases
121
+ * @returns Creation test or null
122
+ */
123
+ function findCreateTest(testCase, allTests) {
124
+ // Extract base path (without parameters)
125
+ const basePath = testCase.path.replace(/\/\{[^}]+\}.*$/, '');
126
+ // Find POST test to the base path
127
+ const createTests = allTests.filter(t => t.method === 'POST' &&
128
+ t.path === basePath &&
129
+ t.category === 'happy-path' &&
130
+ t.expectedStatus >= 200 &&
131
+ t.expectedStatus < 300);
132
+ return createTests.length > 0 ? createTests[0] : null;
133
+ }
134
+ /**
135
+ * Uses AI to fix a request body that failed validation
136
+ *
137
+ * @param testCase - Failed test case
138
+ * @param endpoint - Endpoint information
139
+ * @param error - Error message
140
+ * @returns Fixed body or null
141
+ */
142
+ async function fixRequestBodyWithAI(testCase, endpoint, error) {
143
+ try {
144
+ const prompt = `Fix this API request body to match the schema.
145
+
146
+ Endpoint: ${testCase.method} ${testCase.path}
147
+ Current body: ${JSON.stringify(testCase.body, null, 2)}
148
+ Expected schema: ${JSON.stringify(endpoint.requestBody, null, 2)}
149
+ Error: ${error || 'Schema validation failed'}
150
+
151
+ Respond with ONLY the fixed JSON body, no explanation.`;
152
+ log.debug('Attempting AI body fix', { testId: testCase.id });
153
+ const result = await callLLM(prompt, {
154
+ maxTokens: 512,
155
+ temperature: 0.2,
156
+ timeout: 10000
157
+ });
158
+ if (result.success && result.text) {
159
+ // Clean response (remove markdown if present)
160
+ let cleaned = result.text.trim();
161
+ if (cleaned.startsWith('```')) {
162
+ cleaned = cleaned.replace(/^```(?:json)?\n/, '').replace(/\n```$/, '');
163
+ }
164
+ try {
165
+ const fixedBody = JSON.parse(cleaned);
166
+ log.info('AI successfully fixed request body', { testId: testCase.id });
167
+ return fixedBody;
168
+ }
169
+ catch (parseError) {
170
+ log.warn('AI response not valid JSON', { testId: testCase.id, parseError });
171
+ }
172
+ }
173
+ }
174
+ catch (error) {
175
+ log.error('AI body fix failed', {
176
+ testId: testCase.id,
177
+ error: error instanceof Error ? error.message : String(error)
178
+ });
179
+ }
180
+ return null;
181
+ }
182
+ /**
183
+ * Applies repairs to test cases
184
+ *
185
+ * @param tests - Original test cases
186
+ * @param repairs - Repairs to apply
187
+ * @returns Updated test cases
188
+ */
189
+ export function applyRepairs(tests, repairs) {
190
+ const repairMap = new Map(repairs.map(r => [r.testId, r]));
191
+ return tests.map(test => {
192
+ const repair = repairMap.get(test.id);
193
+ if (!repair) {
194
+ return test;
195
+ }
196
+ log.info('Applying repair', {
197
+ testId: test.id,
198
+ type: repair.type,
199
+ confidence: repair.confidence
200
+ });
201
+ // Apply fix based on type
202
+ if (repair.type === 'fix_schema_validation' && repair.fix.newBody) {
203
+ return {
204
+ ...test,
205
+ body: repair.fix.newBody
206
+ };
207
+ }
208
+ // For dependency repairs, we don't modify the test itself
209
+ // The dependencies will be handled separately
210
+ return test;
211
+ });
212
+ }
213
+ //# sourceMappingURL=test-auto-repairer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-auto-repairer.js","sourceRoot":"","sources":["../../src/repairers/test-auto-repairer.ts"],"names":[],"mappings":"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"}