@dotsetlabs/bellwether 0.10.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 (403) hide show
  1. package/CHANGELOG.md +291 -0
  2. package/LICENSE +21 -0
  3. package/README.md +739 -0
  4. package/dist/auth/credentials.d.ts +64 -0
  5. package/dist/auth/credentials.js +218 -0
  6. package/dist/auth/index.d.ts +6 -0
  7. package/dist/auth/index.js +6 -0
  8. package/dist/auth/keychain.d.ts +64 -0
  9. package/dist/auth/keychain.js +268 -0
  10. package/dist/baseline/ab-testing.d.ts +80 -0
  11. package/dist/baseline/ab-testing.js +236 -0
  12. package/dist/baseline/ai-compatibility-scorer.d.ts +95 -0
  13. package/dist/baseline/ai-compatibility-scorer.js +606 -0
  14. package/dist/baseline/calibration.d.ts +77 -0
  15. package/dist/baseline/calibration.js +136 -0
  16. package/dist/baseline/category-matching.d.ts +85 -0
  17. package/dist/baseline/category-matching.js +289 -0
  18. package/dist/baseline/change-impact-analyzer.d.ts +98 -0
  19. package/dist/baseline/change-impact-analyzer.js +592 -0
  20. package/dist/baseline/comparator.d.ts +64 -0
  21. package/dist/baseline/comparator.js +916 -0
  22. package/dist/baseline/confidence.d.ts +55 -0
  23. package/dist/baseline/confidence.js +122 -0
  24. package/dist/baseline/converter.d.ts +61 -0
  25. package/dist/baseline/converter.js +585 -0
  26. package/dist/baseline/dependency-analyzer.d.ts +89 -0
  27. package/dist/baseline/dependency-analyzer.js +567 -0
  28. package/dist/baseline/deprecation-tracker.d.ts +133 -0
  29. package/dist/baseline/deprecation-tracker.js +322 -0
  30. package/dist/baseline/diff.d.ts +55 -0
  31. package/dist/baseline/diff.js +1584 -0
  32. package/dist/baseline/documentation-scorer.d.ts +205 -0
  33. package/dist/baseline/documentation-scorer.js +466 -0
  34. package/dist/baseline/embeddings.d.ts +118 -0
  35. package/dist/baseline/embeddings.js +251 -0
  36. package/dist/baseline/error-analyzer.d.ts +198 -0
  37. package/dist/baseline/error-analyzer.js +721 -0
  38. package/dist/baseline/evaluation/evaluator.d.ts +42 -0
  39. package/dist/baseline/evaluation/evaluator.js +323 -0
  40. package/dist/baseline/evaluation/expanded-dataset.d.ts +45 -0
  41. package/dist/baseline/evaluation/expanded-dataset.js +1164 -0
  42. package/dist/baseline/evaluation/golden-dataset.d.ts +58 -0
  43. package/dist/baseline/evaluation/golden-dataset.js +717 -0
  44. package/dist/baseline/evaluation/index.d.ts +15 -0
  45. package/dist/baseline/evaluation/index.js +15 -0
  46. package/dist/baseline/evaluation/types.d.ts +186 -0
  47. package/dist/baseline/evaluation/types.js +8 -0
  48. package/dist/baseline/external-dependency-detector.d.ts +181 -0
  49. package/dist/baseline/external-dependency-detector.js +524 -0
  50. package/dist/baseline/golden-output.d.ts +162 -0
  51. package/dist/baseline/golden-output.js +636 -0
  52. package/dist/baseline/health-scorer.d.ts +174 -0
  53. package/dist/baseline/health-scorer.js +451 -0
  54. package/dist/baseline/incremental-checker.d.ts +97 -0
  55. package/dist/baseline/incremental-checker.js +174 -0
  56. package/dist/baseline/index.d.ts +31 -0
  57. package/dist/baseline/index.js +42 -0
  58. package/dist/baseline/migration-generator.d.ts +137 -0
  59. package/dist/baseline/migration-generator.js +554 -0
  60. package/dist/baseline/migrations.d.ts +60 -0
  61. package/dist/baseline/migrations.js +197 -0
  62. package/dist/baseline/performance-tracker.d.ts +214 -0
  63. package/dist/baseline/performance-tracker.js +577 -0
  64. package/dist/baseline/pr-comment-generator.d.ts +117 -0
  65. package/dist/baseline/pr-comment-generator.js +546 -0
  66. package/dist/baseline/response-fingerprint.d.ts +127 -0
  67. package/dist/baseline/response-fingerprint.js +728 -0
  68. package/dist/baseline/response-schema-tracker.d.ts +129 -0
  69. package/dist/baseline/response-schema-tracker.js +420 -0
  70. package/dist/baseline/risk-scorer.d.ts +54 -0
  71. package/dist/baseline/risk-scorer.js +434 -0
  72. package/dist/baseline/saver.d.ts +89 -0
  73. package/dist/baseline/saver.js +554 -0
  74. package/dist/baseline/scenario-generator.d.ts +151 -0
  75. package/dist/baseline/scenario-generator.js +905 -0
  76. package/dist/baseline/schema-compare.d.ts +86 -0
  77. package/dist/baseline/schema-compare.js +557 -0
  78. package/dist/baseline/schema-evolution.d.ts +189 -0
  79. package/dist/baseline/schema-evolution.js +467 -0
  80. package/dist/baseline/semantic.d.ts +203 -0
  81. package/dist/baseline/semantic.js +908 -0
  82. package/dist/baseline/synonyms.d.ts +60 -0
  83. package/dist/baseline/synonyms.js +386 -0
  84. package/dist/baseline/telemetry.d.ts +165 -0
  85. package/dist/baseline/telemetry.js +294 -0
  86. package/dist/baseline/test-pruner.d.ts +120 -0
  87. package/dist/baseline/test-pruner.js +387 -0
  88. package/dist/baseline/types.d.ts +449 -0
  89. package/dist/baseline/types.js +5 -0
  90. package/dist/baseline/version.d.ts +138 -0
  91. package/dist/baseline/version.js +206 -0
  92. package/dist/cache/index.d.ts +5 -0
  93. package/dist/cache/index.js +5 -0
  94. package/dist/cache/response-cache.d.ts +151 -0
  95. package/dist/cache/response-cache.js +287 -0
  96. package/dist/ci/index.d.ts +60 -0
  97. package/dist/ci/index.js +342 -0
  98. package/dist/cli/commands/auth.d.ts +12 -0
  99. package/dist/cli/commands/auth.js +352 -0
  100. package/dist/cli/commands/badge.d.ts +3 -0
  101. package/dist/cli/commands/badge.js +74 -0
  102. package/dist/cli/commands/baseline-accept.d.ts +15 -0
  103. package/dist/cli/commands/baseline-accept.js +178 -0
  104. package/dist/cli/commands/baseline-migrate.d.ts +12 -0
  105. package/dist/cli/commands/baseline-migrate.js +164 -0
  106. package/dist/cli/commands/baseline.d.ts +14 -0
  107. package/dist/cli/commands/baseline.js +449 -0
  108. package/dist/cli/commands/beta.d.ts +10 -0
  109. package/dist/cli/commands/beta.js +231 -0
  110. package/dist/cli/commands/check.d.ts +11 -0
  111. package/dist/cli/commands/check.js +820 -0
  112. package/dist/cli/commands/cloud/badge.d.ts +3 -0
  113. package/dist/cli/commands/cloud/badge.js +74 -0
  114. package/dist/cli/commands/cloud/diff.d.ts +6 -0
  115. package/dist/cli/commands/cloud/diff.js +79 -0
  116. package/dist/cli/commands/cloud/history.d.ts +6 -0
  117. package/dist/cli/commands/cloud/history.js +102 -0
  118. package/dist/cli/commands/cloud/link.d.ts +9 -0
  119. package/dist/cli/commands/cloud/link.js +119 -0
  120. package/dist/cli/commands/cloud/login.d.ts +7 -0
  121. package/dist/cli/commands/cloud/login.js +499 -0
  122. package/dist/cli/commands/cloud/projects.d.ts +6 -0
  123. package/dist/cli/commands/cloud/projects.js +44 -0
  124. package/dist/cli/commands/cloud/shared.d.ts +7 -0
  125. package/dist/cli/commands/cloud/shared.js +42 -0
  126. package/dist/cli/commands/cloud/teams.d.ts +8 -0
  127. package/dist/cli/commands/cloud/teams.js +169 -0
  128. package/dist/cli/commands/cloud/upload.d.ts +8 -0
  129. package/dist/cli/commands/cloud/upload.js +181 -0
  130. package/dist/cli/commands/contract.d.ts +11 -0
  131. package/dist/cli/commands/contract.js +280 -0
  132. package/dist/cli/commands/discover.d.ts +3 -0
  133. package/dist/cli/commands/discover.js +82 -0
  134. package/dist/cli/commands/eval.d.ts +9 -0
  135. package/dist/cli/commands/eval.js +187 -0
  136. package/dist/cli/commands/explore.d.ts +11 -0
  137. package/dist/cli/commands/explore.js +437 -0
  138. package/dist/cli/commands/feedback.d.ts +9 -0
  139. package/dist/cli/commands/feedback.js +174 -0
  140. package/dist/cli/commands/golden.d.ts +12 -0
  141. package/dist/cli/commands/golden.js +407 -0
  142. package/dist/cli/commands/history.d.ts +10 -0
  143. package/dist/cli/commands/history.js +202 -0
  144. package/dist/cli/commands/init.d.ts +9 -0
  145. package/dist/cli/commands/init.js +219 -0
  146. package/dist/cli/commands/interview.d.ts +3 -0
  147. package/dist/cli/commands/interview.js +903 -0
  148. package/dist/cli/commands/link.d.ts +10 -0
  149. package/dist/cli/commands/link.js +169 -0
  150. package/dist/cli/commands/login.d.ts +7 -0
  151. package/dist/cli/commands/login.js +499 -0
  152. package/dist/cli/commands/preset.d.ts +33 -0
  153. package/dist/cli/commands/preset.js +297 -0
  154. package/dist/cli/commands/profile.d.ts +33 -0
  155. package/dist/cli/commands/profile.js +286 -0
  156. package/dist/cli/commands/registry.d.ts +11 -0
  157. package/dist/cli/commands/registry.js +146 -0
  158. package/dist/cli/commands/shared.d.ts +79 -0
  159. package/dist/cli/commands/shared.js +196 -0
  160. package/dist/cli/commands/teams.d.ts +8 -0
  161. package/dist/cli/commands/teams.js +169 -0
  162. package/dist/cli/commands/test.d.ts +9 -0
  163. package/dist/cli/commands/test.js +500 -0
  164. package/dist/cli/commands/upload.d.ts +8 -0
  165. package/dist/cli/commands/upload.js +223 -0
  166. package/dist/cli/commands/validate-config.d.ts +6 -0
  167. package/dist/cli/commands/validate-config.js +35 -0
  168. package/dist/cli/commands/verify.d.ts +11 -0
  169. package/dist/cli/commands/verify.js +283 -0
  170. package/dist/cli/commands/watch.d.ts +12 -0
  171. package/dist/cli/commands/watch.js +253 -0
  172. package/dist/cli/index.d.ts +3 -0
  173. package/dist/cli/index.js +178 -0
  174. package/dist/cli/interactive.d.ts +47 -0
  175. package/dist/cli/interactive.js +216 -0
  176. package/dist/cli/output/terminal-reporter.d.ts +19 -0
  177. package/dist/cli/output/terminal-reporter.js +104 -0
  178. package/dist/cli/output.d.ts +226 -0
  179. package/dist/cli/output.js +438 -0
  180. package/dist/cli/utils/env.d.ts +5 -0
  181. package/dist/cli/utils/env.js +14 -0
  182. package/dist/cli/utils/progress.d.ts +59 -0
  183. package/dist/cli/utils/progress.js +206 -0
  184. package/dist/cli/utils/server-context.d.ts +10 -0
  185. package/dist/cli/utils/server-context.js +36 -0
  186. package/dist/cloud/auth.d.ts +144 -0
  187. package/dist/cloud/auth.js +374 -0
  188. package/dist/cloud/client.d.ts +24 -0
  189. package/dist/cloud/client.js +65 -0
  190. package/dist/cloud/http-client.d.ts +38 -0
  191. package/dist/cloud/http-client.js +215 -0
  192. package/dist/cloud/index.d.ts +23 -0
  193. package/dist/cloud/index.js +25 -0
  194. package/dist/cloud/mock-client.d.ts +107 -0
  195. package/dist/cloud/mock-client.js +545 -0
  196. package/dist/cloud/types.d.ts +515 -0
  197. package/dist/cloud/types.js +15 -0
  198. package/dist/config/defaults.d.ts +160 -0
  199. package/dist/config/defaults.js +169 -0
  200. package/dist/config/loader.d.ts +24 -0
  201. package/dist/config/loader.js +122 -0
  202. package/dist/config/template.d.ts +42 -0
  203. package/dist/config/template.js +647 -0
  204. package/dist/config/validator.d.ts +2112 -0
  205. package/dist/config/validator.js +658 -0
  206. package/dist/constants/cloud.d.ts +107 -0
  207. package/dist/constants/cloud.js +110 -0
  208. package/dist/constants/core.d.ts +521 -0
  209. package/dist/constants/core.js +556 -0
  210. package/dist/constants/testing.d.ts +1283 -0
  211. package/dist/constants/testing.js +1568 -0
  212. package/dist/constants.d.ts +10 -0
  213. package/dist/constants.js +10 -0
  214. package/dist/contract/index.d.ts +6 -0
  215. package/dist/contract/index.js +5 -0
  216. package/dist/contract/validator.d.ts +177 -0
  217. package/dist/contract/validator.js +574 -0
  218. package/dist/cost/index.d.ts +6 -0
  219. package/dist/cost/index.js +5 -0
  220. package/dist/cost/tracker.d.ts +134 -0
  221. package/dist/cost/tracker.js +313 -0
  222. package/dist/discovery/discovery.d.ts +16 -0
  223. package/dist/discovery/discovery.js +173 -0
  224. package/dist/discovery/types.d.ts +51 -0
  225. package/dist/discovery/types.js +2 -0
  226. package/dist/docs/agents.d.ts +3 -0
  227. package/dist/docs/agents.js +995 -0
  228. package/dist/docs/contract.d.ts +51 -0
  229. package/dist/docs/contract.js +1681 -0
  230. package/dist/docs/generator.d.ts +4 -0
  231. package/dist/docs/generator.js +4 -0
  232. package/dist/docs/html-reporter.d.ts +9 -0
  233. package/dist/docs/html-reporter.js +757 -0
  234. package/dist/docs/index.d.ts +10 -0
  235. package/dist/docs/index.js +11 -0
  236. package/dist/docs/junit-reporter.d.ts +18 -0
  237. package/dist/docs/junit-reporter.js +210 -0
  238. package/dist/docs/report.d.ts +14 -0
  239. package/dist/docs/report.js +44 -0
  240. package/dist/docs/sarif-reporter.d.ts +19 -0
  241. package/dist/docs/sarif-reporter.js +335 -0
  242. package/dist/docs/shared.d.ts +35 -0
  243. package/dist/docs/shared.js +162 -0
  244. package/dist/docs/templates.d.ts +12 -0
  245. package/dist/docs/templates.js +76 -0
  246. package/dist/errors/index.d.ts +6 -0
  247. package/dist/errors/index.js +6 -0
  248. package/dist/errors/retry.d.ts +92 -0
  249. package/dist/errors/retry.js +323 -0
  250. package/dist/errors/types.d.ts +321 -0
  251. package/dist/errors/types.js +584 -0
  252. package/dist/index.d.ts +32 -0
  253. package/dist/index.js +32 -0
  254. package/dist/interview/dependency-resolver.d.ts +11 -0
  255. package/dist/interview/dependency-resolver.js +32 -0
  256. package/dist/interview/interviewer.d.ts +232 -0
  257. package/dist/interview/interviewer.js +1939 -0
  258. package/dist/interview/mock-response-generator.d.ts +7 -0
  259. package/dist/interview/mock-response-generator.js +102 -0
  260. package/dist/interview/orchestrator.d.ts +237 -0
  261. package/dist/interview/orchestrator.js +1296 -0
  262. package/dist/interview/rate-limiter.d.ts +15 -0
  263. package/dist/interview/rate-limiter.js +55 -0
  264. package/dist/interview/response-validator.d.ts +10 -0
  265. package/dist/interview/response-validator.js +132 -0
  266. package/dist/interview/schema-inferrer.d.ts +8 -0
  267. package/dist/interview/schema-inferrer.js +71 -0
  268. package/dist/interview/schema-test-generator.d.ts +71 -0
  269. package/dist/interview/schema-test-generator.js +834 -0
  270. package/dist/interview/smart-value-generator.d.ts +155 -0
  271. package/dist/interview/smart-value-generator.js +554 -0
  272. package/dist/interview/stateful-test-runner.d.ts +19 -0
  273. package/dist/interview/stateful-test-runner.js +106 -0
  274. package/dist/interview/types.d.ts +561 -0
  275. package/dist/interview/types.js +2 -0
  276. package/dist/llm/anthropic.d.ts +41 -0
  277. package/dist/llm/anthropic.js +355 -0
  278. package/dist/llm/client.d.ts +123 -0
  279. package/dist/llm/client.js +42 -0
  280. package/dist/llm/factory.d.ts +38 -0
  281. package/dist/llm/factory.js +145 -0
  282. package/dist/llm/fallback.d.ts +140 -0
  283. package/dist/llm/fallback.js +379 -0
  284. package/dist/llm/index.d.ts +18 -0
  285. package/dist/llm/index.js +15 -0
  286. package/dist/llm/ollama.d.ts +37 -0
  287. package/dist/llm/ollama.js +330 -0
  288. package/dist/llm/openai.d.ts +25 -0
  289. package/dist/llm/openai.js +320 -0
  290. package/dist/llm/token-budget.d.ts +161 -0
  291. package/dist/llm/token-budget.js +395 -0
  292. package/dist/logging/logger.d.ts +70 -0
  293. package/dist/logging/logger.js +130 -0
  294. package/dist/metrics/collector.d.ts +106 -0
  295. package/dist/metrics/collector.js +547 -0
  296. package/dist/metrics/index.d.ts +7 -0
  297. package/dist/metrics/index.js +7 -0
  298. package/dist/metrics/prometheus.d.ts +20 -0
  299. package/dist/metrics/prometheus.js +241 -0
  300. package/dist/metrics/types.d.ts +209 -0
  301. package/dist/metrics/types.js +5 -0
  302. package/dist/persona/builtins.d.ts +54 -0
  303. package/dist/persona/builtins.js +219 -0
  304. package/dist/persona/index.d.ts +8 -0
  305. package/dist/persona/index.js +8 -0
  306. package/dist/persona/loader.d.ts +30 -0
  307. package/dist/persona/loader.js +190 -0
  308. package/dist/persona/types.d.ts +144 -0
  309. package/dist/persona/types.js +5 -0
  310. package/dist/persona/validation.d.ts +94 -0
  311. package/dist/persona/validation.js +332 -0
  312. package/dist/prompts/index.d.ts +5 -0
  313. package/dist/prompts/index.js +5 -0
  314. package/dist/prompts/templates.d.ts +180 -0
  315. package/dist/prompts/templates.js +431 -0
  316. package/dist/registry/client.d.ts +49 -0
  317. package/dist/registry/client.js +191 -0
  318. package/dist/registry/index.d.ts +7 -0
  319. package/dist/registry/index.js +6 -0
  320. package/dist/registry/types.d.ts +140 -0
  321. package/dist/registry/types.js +6 -0
  322. package/dist/scenarios/evaluator.d.ts +43 -0
  323. package/dist/scenarios/evaluator.js +206 -0
  324. package/dist/scenarios/index.d.ts +10 -0
  325. package/dist/scenarios/index.js +9 -0
  326. package/dist/scenarios/loader.d.ts +20 -0
  327. package/dist/scenarios/loader.js +285 -0
  328. package/dist/scenarios/types.d.ts +153 -0
  329. package/dist/scenarios/types.js +8 -0
  330. package/dist/security/index.d.ts +17 -0
  331. package/dist/security/index.js +18 -0
  332. package/dist/security/payloads.d.ts +61 -0
  333. package/dist/security/payloads.js +268 -0
  334. package/dist/security/security-tester.d.ts +42 -0
  335. package/dist/security/security-tester.js +582 -0
  336. package/dist/security/types.d.ts +166 -0
  337. package/dist/security/types.js +8 -0
  338. package/dist/transport/base-transport.d.ts +59 -0
  339. package/dist/transport/base-transport.js +38 -0
  340. package/dist/transport/http-transport.d.ts +67 -0
  341. package/dist/transport/http-transport.js +238 -0
  342. package/dist/transport/mcp-client.d.ts +141 -0
  343. package/dist/transport/mcp-client.js +496 -0
  344. package/dist/transport/sse-transport.d.ts +88 -0
  345. package/dist/transport/sse-transport.js +316 -0
  346. package/dist/transport/stdio-transport.d.ts +43 -0
  347. package/dist/transport/stdio-transport.js +238 -0
  348. package/dist/transport/types.d.ts +125 -0
  349. package/dist/transport/types.js +16 -0
  350. package/dist/utils/concurrency.d.ts +123 -0
  351. package/dist/utils/concurrency.js +213 -0
  352. package/dist/utils/formatters.d.ts +16 -0
  353. package/dist/utils/formatters.js +37 -0
  354. package/dist/utils/index.d.ts +8 -0
  355. package/dist/utils/index.js +8 -0
  356. package/dist/utils/jsonpath.d.ts +87 -0
  357. package/dist/utils/jsonpath.js +326 -0
  358. package/dist/utils/markdown.d.ts +113 -0
  359. package/dist/utils/markdown.js +265 -0
  360. package/dist/utils/network.d.ts +14 -0
  361. package/dist/utils/network.js +17 -0
  362. package/dist/utils/sanitize.d.ts +92 -0
  363. package/dist/utils/sanitize.js +191 -0
  364. package/dist/utils/semantic.d.ts +194 -0
  365. package/dist/utils/semantic.js +1051 -0
  366. package/dist/utils/smart-truncate.d.ts +94 -0
  367. package/dist/utils/smart-truncate.js +361 -0
  368. package/dist/utils/timeout.d.ts +153 -0
  369. package/dist/utils/timeout.js +205 -0
  370. package/dist/utils/yaml-parser.d.ts +58 -0
  371. package/dist/utils/yaml-parser.js +86 -0
  372. package/dist/validation/index.d.ts +32 -0
  373. package/dist/validation/index.js +32 -0
  374. package/dist/validation/semantic-test-generator.d.ts +50 -0
  375. package/dist/validation/semantic-test-generator.js +176 -0
  376. package/dist/validation/semantic-types.d.ts +66 -0
  377. package/dist/validation/semantic-types.js +94 -0
  378. package/dist/validation/semantic-validator.d.ts +38 -0
  379. package/dist/validation/semantic-validator.js +340 -0
  380. package/dist/verification/index.d.ts +6 -0
  381. package/dist/verification/index.js +5 -0
  382. package/dist/verification/types.d.ts +133 -0
  383. package/dist/verification/types.js +5 -0
  384. package/dist/verification/verifier.d.ts +30 -0
  385. package/dist/verification/verifier.js +309 -0
  386. package/dist/version.d.ts +19 -0
  387. package/dist/version.js +48 -0
  388. package/dist/workflow/auto-generator.d.ts +27 -0
  389. package/dist/workflow/auto-generator.js +513 -0
  390. package/dist/workflow/discovery.d.ts +40 -0
  391. package/dist/workflow/discovery.js +195 -0
  392. package/dist/workflow/executor.d.ts +82 -0
  393. package/dist/workflow/executor.js +611 -0
  394. package/dist/workflow/index.d.ts +10 -0
  395. package/dist/workflow/index.js +10 -0
  396. package/dist/workflow/loader.d.ts +24 -0
  397. package/dist/workflow/loader.js +194 -0
  398. package/dist/workflow/state-tracker.d.ts +98 -0
  399. package/dist/workflow/state-tracker.js +424 -0
  400. package/dist/workflow/types.d.ts +337 -0
  401. package/dist/workflow/types.js +5 -0
  402. package/package.json +94 -0
  403. package/schemas/bellwether-check.schema.json +651 -0
@@ -0,0 +1,19 @@
1
+ import type { MCPToolCallResult, MCPTool } from '../transport/types.js';
2
+ import type { InterviewQuestion } from './types.js';
3
+ /**
4
+ * Maintains shared state between tool calls for stateful testing.
5
+ */
6
+ export declare class StatefulTestRunner {
7
+ private options;
8
+ private values;
9
+ constructor(options: {
10
+ shareOutputs: boolean;
11
+ });
12
+ applyStateToQuestion(_toolName: string, question: InterviewQuestion): {
13
+ args: Record<string, unknown>;
14
+ usedKeys: string[];
15
+ };
16
+ recordResponse(tool: MCPTool, response: MCPToolCallResult | null): string[];
17
+ private findMatchingValue;
18
+ }
19
+ //# sourceMappingURL=stateful-test-runner.d.ts.map
@@ -0,0 +1,106 @@
1
+ import { STATEFUL_TESTING } from '../constants.js';
2
+ import { extractTextContent } from './schema-inferrer.js';
3
+ /**
4
+ * Maintains shared state between tool calls for stateful testing.
5
+ */
6
+ export class StatefulTestRunner {
7
+ options;
8
+ values = new Map();
9
+ constructor(options) {
10
+ this.options = options;
11
+ }
12
+ applyStateToQuestion(_toolName, question) {
13
+ if (!this.options.shareOutputs) {
14
+ return { args: { ...question.args }, usedKeys: [] };
15
+ }
16
+ const args = { ...question.args };
17
+ const usedKeys = [];
18
+ for (const [param] of Object.entries(args)) {
19
+ if (!shouldPreferStateValue(param)) {
20
+ continue;
21
+ }
22
+ const stateValue = this.findMatchingValue(param);
23
+ if (stateValue) {
24
+ args[param] = stateValue.value;
25
+ usedKeys.push(param);
26
+ }
27
+ }
28
+ return { args, usedKeys };
29
+ }
30
+ recordResponse(tool, response) {
31
+ if (!response || response.isError) {
32
+ return [];
33
+ }
34
+ const textContent = extractTextContent(response);
35
+ if (!textContent) {
36
+ return [];
37
+ }
38
+ const parsed = tryParseJson(textContent);
39
+ if (!parsed) {
40
+ return [];
41
+ }
42
+ const providedKeys = [];
43
+ const flattened = flattenValue(parsed);
44
+ for (const [key, value] of Object.entries(flattened)) {
45
+ if (this.values.size >= STATEFUL_TESTING.MAX_STORED_VALUES) {
46
+ break;
47
+ }
48
+ this.values.set(key, { value, sourceTool: tool.name });
49
+ providedKeys.push(key);
50
+ }
51
+ return providedKeys;
52
+ }
53
+ findMatchingValue(paramName) {
54
+ const normalizedParam = normalizeKey(paramName);
55
+ for (const [key, value] of this.values.entries()) {
56
+ if (normalizeKey(key) === normalizedParam) {
57
+ return value;
58
+ }
59
+ }
60
+ for (const [key, value] of this.values.entries()) {
61
+ const normalizedKey = normalizeKey(key);
62
+ if (normalizedKey.endsWith(normalizedParam)) {
63
+ return value;
64
+ }
65
+ }
66
+ return null;
67
+ }
68
+ }
69
+ function shouldPreferStateValue(paramName) {
70
+ return STATEFUL_TESTING.PREFERRED_PARAM_PATTERNS.some((pattern) => pattern.test(paramName));
71
+ }
72
+ function normalizeKey(value) {
73
+ return value.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();
74
+ }
75
+ function tryParseJson(text) {
76
+ try {
77
+ return JSON.parse(text);
78
+ }
79
+ catch {
80
+ return null;
81
+ }
82
+ }
83
+ function flattenValue(value, prefix = '') {
84
+ if (value === null || value === undefined)
85
+ return {};
86
+ if (Array.isArray(value)) {
87
+ if (value.length === 0)
88
+ return {};
89
+ return flattenValue(value[0], prefix);
90
+ }
91
+ if (typeof value !== 'object') {
92
+ return prefix ? { [prefix]: value } : {};
93
+ }
94
+ const result = {};
95
+ for (const [key, child] of Object.entries(value)) {
96
+ const combinedKey = prefix ? `${prefix}.${key}` : key;
97
+ if (typeof child === 'object' && child !== null) {
98
+ Object.assign(result, flattenValue(child, combinedKey));
99
+ continue;
100
+ }
101
+ result[key] = child;
102
+ result[combinedKey] = child;
103
+ }
104
+ return result;
105
+ }
106
+ //# sourceMappingURL=stateful-test-runner.js.map
@@ -0,0 +1,561 @@
1
+ import type { DiscoveryResult } from '../discovery/types.js';
2
+ import type { MCPToolCallResult, MCPPromptGetResult, MCPResourceReadResult } from '../transport/types.js';
3
+ import type { InferredSchema } from '../baseline/response-fingerprint.js';
4
+ import type { Persona, QuestionCategory } from '../persona/types.js';
5
+ import type { Workflow, WorkflowResult, WorkflowTimeoutConfig } from '../workflow/types.js';
6
+ import type { LoadedScenarios, ScenarioResult } from '../scenarios/types.js';
7
+ import type { ToolResponseCache } from '../cache/response-cache.js';
8
+ /**
9
+ * Server context extracted during discovery/initial probing.
10
+ * Used to generate contextually appropriate test cases.
11
+ */
12
+ export interface ServerContext {
13
+ /** Allowed directories for filesystem operations */
14
+ allowedDirectories?: string[];
15
+ /** Base URLs or hosts the server can access */
16
+ allowedHosts?: string[];
17
+ /** Any constraints discovered from initial tool calls */
18
+ constraints?: string[];
19
+ /** Server-specific hints extracted from tool descriptions */
20
+ hints?: string[];
21
+ }
22
+ /**
23
+ * Streaming callback for interview operations.
24
+ * These callbacks provide real-time feedback during LLM operations.
25
+ */
26
+ export interface InterviewStreamingCallbacks {
27
+ /** Called when streaming starts for an operation (e.g., "question:toolName") */
28
+ onStart?: (operation: string, context?: string) => void;
29
+ /** Called with each chunk of streaming text */
30
+ onChunk?: (chunk: string, operation: string) => void;
31
+ /** Called when streaming completes with the full text */
32
+ onComplete?: (text: string, operation: string) => void;
33
+ /** Called if an error occurs during streaming */
34
+ onError?: (error: Error, operation: string) => void;
35
+ }
36
+ /**
37
+ * Configuration for workflow testing.
38
+ */
39
+ export interface WorkflowConfig {
40
+ /** Path to user-provided workflow YAML file */
41
+ workflowsFile?: string;
42
+ /** User-provided workflows (parsed from file or programmatically) */
43
+ workflows?: Workflow[];
44
+ /** Enable LLM-based workflow discovery */
45
+ discoverWorkflows?: boolean;
46
+ /** Maximum workflows to discover (default: 3) */
47
+ maxDiscoveredWorkflows?: number;
48
+ /** Skip workflow execution (discovery/load only) */
49
+ skipWorkflowExecution?: boolean;
50
+ /** Enable state tracking during workflow execution */
51
+ enableStateTracking?: boolean;
52
+ /** Timeout per workflow step in ms */
53
+ stepTimeout?: number;
54
+ /** Timeout configuration for workflow operations */
55
+ timeouts?: WorkflowTimeoutConfig;
56
+ }
57
+ /**
58
+ * Configuration for the interview process.
59
+ */
60
+ export interface InterviewConfig {
61
+ /** Maximum questions per tool (default: 3) */
62
+ maxQuestionsPerTool: number;
63
+ /** Timeout for tool calls in ms (default: 30000) */
64
+ timeout: number;
65
+ /** Whether to skip error handling tests */
66
+ skipErrorTests: boolean;
67
+ /** LLM model to use (optional - determined by LLM client if not specified) */
68
+ model?: string;
69
+ /** Personas to use for interviewing (default: technical_writer) */
70
+ personas?: Persona[];
71
+ /** Custom test scenarios loaded from YAML */
72
+ customScenarios?: LoadedScenarios;
73
+ /** Whether to only run custom scenarios (skip LLM-generated questions) */
74
+ customScenariosOnly?: boolean;
75
+ /** Timeout for resource reads in ms (default: 15000) */
76
+ resourceTimeout?: number;
77
+ /** Enable streaming output during LLM operations */
78
+ enableStreaming?: boolean;
79
+ /** Callbacks for streaming output */
80
+ streamingCallbacks?: InterviewStreamingCallbacks;
81
+ /** Enable parallel persona execution */
82
+ parallelPersonas?: boolean;
83
+ /** Maximum concurrent persona interviews (default: 3) */
84
+ personaConcurrency?: number;
85
+ /** Enable parallel tool testing (check mode only) */
86
+ parallelTools?: boolean;
87
+ /** Maximum concurrent tool tests (default: 4) */
88
+ toolConcurrency?: number;
89
+ /** Cache for tool responses and LLM analysis */
90
+ cache?: ToolResponseCache;
91
+ /** Workflow testing configuration */
92
+ workflowConfig?: WorkflowConfig;
93
+ /** Skip LLM analysis for fast CI runs (uses fallback questions, skips synthesis) */
94
+ checkMode?: boolean;
95
+ /** Server command (for metadata tracking) */
96
+ serverCommand?: string;
97
+ /** Number of warmup runs before timing samples (0-5, default: 1) */
98
+ warmupRuns?: number;
99
+ /** Skip tools that depend on external services (Plaid, Stripe, etc.) */
100
+ externalServices?: ExternalServicesConfig;
101
+ /** Response assertion configuration */
102
+ assertions?: AssertionsConfig;
103
+ /** Rate limiting configuration */
104
+ rateLimit?: RateLimitConfig;
105
+ /** Stateful testing configuration */
106
+ statefulTesting?: StatefulTestingConfig;
107
+ }
108
+ /**
109
+ * Expected outcome for a test question.
110
+ * - 'success': Test expects the tool to execute successfully
111
+ * - 'error': Test expects the tool to reject/fail (validation test)
112
+ * - 'either': Test outcome is acceptable either way
113
+ */
114
+ export type ExpectedOutcome = 'success' | 'error' | 'either';
115
+ /**
116
+ * A question to ask about a tool's behavior.
117
+ */
118
+ export interface InterviewQuestion {
119
+ /** Description of what this question tests */
120
+ description: string;
121
+ /** Category of question */
122
+ category: QuestionCategory;
123
+ /** Arguments to pass to the tool */
124
+ args: Record<string, unknown>;
125
+ /**
126
+ * Expected outcome of this test.
127
+ * Used to determine if the tool behaved correctly.
128
+ * - 'success': Expects successful execution (happy path)
129
+ * - 'error': Expects rejection/error (validation test)
130
+ * - 'either': Either outcome is acceptable
131
+ */
132
+ expectedOutcome?: ExpectedOutcome;
133
+ /** Semantic validation metadata (for tests generated from semantic type inference) */
134
+ metadata?: {
135
+ /** The inferred semantic type being tested */
136
+ semanticType?: string;
137
+ /** Expected behavior: 'reject' for invalid values, 'accept' for valid */
138
+ expectedBehavior?: 'reject' | 'accept';
139
+ /** Confidence level of the semantic type inference (0-1) */
140
+ confidence?: number;
141
+ /** Stateful testing metadata */
142
+ stateful?: {
143
+ /** Keys injected from prior tool outputs */
144
+ usedKeys?: string[];
145
+ /** Keys captured from this response */
146
+ providedKeys?: string[];
147
+ };
148
+ };
149
+ }
150
+ /**
151
+ * Assessment of whether a tool interaction outcome matched expectations.
152
+ */
153
+ export interface OutcomeAssessment {
154
+ /** What outcome was expected */
155
+ expected: ExpectedOutcome;
156
+ /** What actually happened */
157
+ actual: 'success' | 'error';
158
+ /** Whether the tool behaved correctly (matches expectation) */
159
+ correct: boolean;
160
+ /** True if this was a validation test that correctly rejected invalid input */
161
+ isValidationSuccess?: boolean;
162
+ }
163
+ /**
164
+ * Result of asking a single question.
165
+ */
166
+ export interface ToolInteraction {
167
+ /** Name of the tool called */
168
+ toolName: string;
169
+ /** The question that was asked */
170
+ question: InterviewQuestion;
171
+ /** The tool's response */
172
+ response: MCPToolCallResult | null;
173
+ /** Error if the call failed */
174
+ error: string | null;
175
+ /** LLM analysis of the response */
176
+ analysis: string;
177
+ /** Total time taken in ms (includes tool call + LLM analysis) */
178
+ durationMs: number;
179
+ /** Time taken for tool execution only (MCP transport) in ms */
180
+ toolExecutionMs?: number;
181
+ /** Time taken for LLM analysis only in ms */
182
+ llmAnalysisMs?: number;
183
+ /** Persona that generated this interaction */
184
+ personaId?: string;
185
+ /** Outcome assessment - whether the result matched expectations */
186
+ outcomeAssessment?: OutcomeAssessment;
187
+ /** Response assertion results (semantic assertions) */
188
+ assertionResults?: ResponseAssertionResult[];
189
+ /** Whether all assertions passed for this interaction */
190
+ assertionsPassed?: boolean;
191
+ /** Whether the response was mocked */
192
+ mocked?: boolean;
193
+ /** External service that provided the mock (if mocked) */
194
+ mockService?: string;
195
+ }
196
+ /**
197
+ * Findings by persona for a tool.
198
+ */
199
+ export interface PersonaFindings {
200
+ /** Persona ID that generated these findings */
201
+ personaId: string;
202
+ /** Persona name */
203
+ personaName: string;
204
+ /** Behavioral notes from this persona */
205
+ behavioralNotes: string[];
206
+ /** Limitations found by this persona */
207
+ limitations: string[];
208
+ /** Security notes from this persona */
209
+ securityNotes: string[];
210
+ }
211
+ /**
212
+ * Classification of errors by source for a tool.
213
+ */
214
+ export interface ErrorClassification {
215
+ /** Number of errors attributed to external services (Plaid, Stripe, etc.) */
216
+ externalServiceErrors: number;
217
+ /** Number of errors attributed to environment/config issues (missing credentials) */
218
+ environmentErrors: number;
219
+ /** Number of errors that appear to be code bugs */
220
+ codeBugErrors: number;
221
+ /** Number of errors that couldn't be classified */
222
+ unknownErrors: number;
223
+ /** External services detected for this tool */
224
+ detectedServices?: string[];
225
+ }
226
+ /**
227
+ * Behavioral profile for a single tool.
228
+ */
229
+ export interface ToolProfile {
230
+ /** Tool name */
231
+ name: string;
232
+ /** Tool description from schema */
233
+ description: string;
234
+ /** Interactions during interview */
235
+ interactions: ToolInteraction[];
236
+ /** Synthesized behavioral notes (aggregated) */
237
+ behavioralNotes: string[];
238
+ /** Discovered limitations (aggregated) */
239
+ limitations: string[];
240
+ /** Security considerations (aggregated) */
241
+ securityNotes: string[];
242
+ /** Findings broken down by persona */
243
+ findingsByPersona?: PersonaFindings[];
244
+ /** Error classification - separates tool correctness from environment setup issues */
245
+ errorClassification?: ErrorClassification;
246
+ /** Whether this tool was skipped */
247
+ skipped?: boolean;
248
+ /** Reason for skipping this tool */
249
+ skipReason?: string;
250
+ /** Whether this tool used mocked responses */
251
+ mocked?: boolean;
252
+ /** Mocked service name (if mocked) */
253
+ mockService?: string;
254
+ /** Aggregated response schema for assertions */
255
+ responseSchema?: ResponseSchema;
256
+ /** Assertion summary for this tool */
257
+ assertionSummary?: AssertionSummary;
258
+ /** Dependency info for stateful testing */
259
+ dependencyInfo?: ToolDependencyInfo;
260
+ }
261
+ /**
262
+ * A question/test case for a prompt.
263
+ */
264
+ export interface PromptQuestion {
265
+ /** Description of what this test case evaluates */
266
+ description: string;
267
+ /** Arguments to pass to the prompt */
268
+ args: Record<string, string>;
269
+ }
270
+ /**
271
+ * Result of testing a single prompt invocation.
272
+ */
273
+ export interface PromptInteraction {
274
+ /** Name of the prompt */
275
+ promptName: string;
276
+ /** The test case */
277
+ question: PromptQuestion;
278
+ /** The prompt's response (rendered messages) */
279
+ response: MCPPromptGetResult | null;
280
+ /** Error if the call failed */
281
+ error: string | null;
282
+ /** LLM analysis of the response */
283
+ analysis: string;
284
+ /** Time taken in ms */
285
+ durationMs: number;
286
+ }
287
+ /**
288
+ * Behavioral profile for a single prompt.
289
+ */
290
+ export interface PromptProfile {
291
+ /** Prompt name */
292
+ name: string;
293
+ /** Prompt description */
294
+ description: string;
295
+ /** Arguments the prompt accepts */
296
+ arguments: Array<{
297
+ name: string;
298
+ description?: string;
299
+ required?: boolean;
300
+ }>;
301
+ /** Interactions during interview */
302
+ interactions: PromptInteraction[];
303
+ /** Synthesized behavioral notes */
304
+ behavioralNotes: string[];
305
+ /** Discovered limitations */
306
+ limitations: string[];
307
+ /** Example rendered output */
308
+ exampleOutput?: string;
309
+ }
310
+ /**
311
+ * A question/test case for a resource.
312
+ */
313
+ export interface ResourceQuestion {
314
+ /** Description of what this test evaluates */
315
+ description: string;
316
+ /** Category of test */
317
+ category: QuestionCategory;
318
+ }
319
+ /**
320
+ * Result of reading a single resource.
321
+ */
322
+ export interface ResourceInteraction {
323
+ /** URI of the resource */
324
+ resourceUri: string;
325
+ /** Name of the resource */
326
+ resourceName: string;
327
+ /** The test case */
328
+ question: ResourceQuestion;
329
+ /** The resource's content */
330
+ response: MCPResourceReadResult | null;
331
+ /** Error if the read failed */
332
+ error: string | null;
333
+ /** LLM analysis of the response */
334
+ analysis: string;
335
+ /** Time taken in ms */
336
+ durationMs: number;
337
+ }
338
+ /**
339
+ * Behavioral profile for a single resource.
340
+ */
341
+ export interface ResourceProfile {
342
+ /** Resource URI */
343
+ uri: string;
344
+ /** Resource name */
345
+ name: string;
346
+ /** Resource description */
347
+ description: string;
348
+ /** MIME type */
349
+ mimeType?: string;
350
+ /** Interactions during interview */
351
+ interactions: ResourceInteraction[];
352
+ /** Synthesized behavioral notes */
353
+ behavioralNotes: string[];
354
+ /** Discovered limitations */
355
+ limitations: string[];
356
+ /** Content preview (truncated if large) */
357
+ contentPreview?: string;
358
+ }
359
+ /**
360
+ * Complete interview result.
361
+ */
362
+ export interface InterviewResult {
363
+ /** Original discovery result */
364
+ discovery: DiscoveryResult;
365
+ /** Profile for each tool */
366
+ toolProfiles: ToolProfile[];
367
+ /** Profile for each prompt */
368
+ promptProfiles?: PromptProfile[];
369
+ /** Profile for each resource */
370
+ resourceProfiles?: ResourceProfile[];
371
+ /** Workflow execution results */
372
+ workflowResults?: WorkflowResult[];
373
+ /** Custom scenario results (if scenarios were provided) */
374
+ scenarioResults?: ScenarioResult[];
375
+ /** Overall behavioral summary */
376
+ summary: string;
377
+ /** Overall limitations */
378
+ limitations: string[];
379
+ /** Overall recommendations */
380
+ recommendations: string[];
381
+ /** Interview metadata */
382
+ metadata: InterviewMetadata;
383
+ }
384
+ /**
385
+ * Summary of a persona used in the interview.
386
+ */
387
+ export interface PersonaSummary {
388
+ /** Persona ID */
389
+ id: string;
390
+ /** Persona name */
391
+ name: string;
392
+ /** Questions asked by this persona */
393
+ questionsAsked: number;
394
+ /** Tool calls made for this persona */
395
+ toolCallCount: number;
396
+ /** Errors encountered for this persona */
397
+ errorCount: number;
398
+ }
399
+ /**
400
+ * Summary of workflow execution in the interview.
401
+ */
402
+ export interface WorkflowSummary {
403
+ /** Total workflows executed */
404
+ workflowCount: number;
405
+ /** Number of successful workflows */
406
+ successfulCount: number;
407
+ /** Number of failed workflows */
408
+ failedCount: number;
409
+ /** Number discovered via LLM */
410
+ discoveredCount: number;
411
+ /** Number loaded from file */
412
+ loadedCount: number;
413
+ }
414
+ export interface InterviewMetadata {
415
+ /** Start time */
416
+ startTime: Date;
417
+ /** End time */
418
+ endTime: Date;
419
+ /** Total duration in ms */
420
+ durationMs: number;
421
+ /** Number of tool calls made */
422
+ toolCallCount: number;
423
+ /** Number of resource reads made */
424
+ resourceReadCount?: number;
425
+ /** Number of errors encountered */
426
+ errorCount: number;
427
+ /** LLM model used */
428
+ model?: string;
429
+ /** Personas used in the interview */
430
+ personas?: PersonaSummary[];
431
+ /** Workflow execution summary */
432
+ workflows?: WorkflowSummary;
433
+ /** Server command used to start the MCP server */
434
+ serverCommand?: string;
435
+ /** Rate limit events observed during the interview */
436
+ rateLimit?: RateLimitSummary;
437
+ /** External service handling summary */
438
+ externalServices?: ExternalServiceSummary;
439
+ /** Assertion summary across tools */
440
+ assertions?: AssertionSummary;
441
+ /** Stateful testing summary */
442
+ statefulTesting?: StatefulTestingSummary;
443
+ }
444
+ /**
445
+ * Response assertion types for semantic validation.
446
+ */
447
+ export type ResponseAssertionType = 'is_json' | 'matches_schema' | 'contains_fields' | 'not_empty' | 'contains_text';
448
+ /**
449
+ * Result of a response assertion.
450
+ */
451
+ export interface ResponseAssertionResult {
452
+ /** Assertion type */
453
+ type: ResponseAssertionType;
454
+ /** Whether the assertion passed */
455
+ passed: boolean;
456
+ /** Optional description or failure message */
457
+ message?: string;
458
+ /** Expected value (if applicable) */
459
+ expected?: unknown;
460
+ /** Actual value (if applicable) */
461
+ actual?: unknown;
462
+ }
463
+ /**
464
+ * Inferred response schema for semantic assertions.
465
+ */
466
+ export interface ResponseSchema {
467
+ inferredType: 'text' | 'json' | 'markdown' | 'binary';
468
+ jsonSchema?: InferredSchema;
469
+ markdownStructure?: {
470
+ hasHeaders: boolean;
471
+ hasTables: boolean;
472
+ hasCodeBlocks: boolean;
473
+ };
474
+ sampleFingerprints: string[];
475
+ }
476
+ /**
477
+ * Summary of assertion results.
478
+ */
479
+ export interface AssertionSummary {
480
+ total: number;
481
+ passed: number;
482
+ failed: number;
483
+ }
484
+ /**
485
+ * Configuration for response assertions.
486
+ */
487
+ export interface AssertionsConfig {
488
+ enabled: boolean;
489
+ /** Strict mode fails on assertion violations */
490
+ strict: boolean;
491
+ /** Infer schemas from responses */
492
+ infer: boolean;
493
+ }
494
+ /**
495
+ * Rate limiting configuration.
496
+ */
497
+ export interface RateLimitConfig {
498
+ enabled: boolean;
499
+ requestsPerSecond: number;
500
+ burstLimit: number;
501
+ backoffStrategy: 'linear' | 'exponential';
502
+ maxRetries: number;
503
+ }
504
+ /**
505
+ * Stateful testing configuration.
506
+ */
507
+ export interface StatefulTestingConfig {
508
+ enabled: boolean;
509
+ maxChainLength: number;
510
+ shareOutputsBetweenTools: boolean;
511
+ }
512
+ /**
513
+ * External service configuration per service.
514
+ */
515
+ export interface ExternalServiceConfig {
516
+ enabled?: boolean;
517
+ sandboxCredentials?: Record<string, string>;
518
+ }
519
+ /**
520
+ * External service handling configuration.
521
+ */
522
+ export interface ExternalServicesConfig {
523
+ mode: 'skip' | 'mock' | 'fail';
524
+ services?: Record<string, ExternalServiceConfig>;
525
+ }
526
+ /**
527
+ * Dependency info for stateful testing.
528
+ */
529
+ export interface ToolDependencyInfo {
530
+ tool: string;
531
+ dependsOn: string[];
532
+ providesOutputFor: string[];
533
+ sequencePosition: number;
534
+ }
535
+ /**
536
+ * Summary of rate limiting events.
537
+ */
538
+ export interface RateLimitSummary {
539
+ totalEvents: number;
540
+ totalRetries: number;
541
+ tools: string[];
542
+ }
543
+ /**
544
+ * Summary of external service handling.
545
+ */
546
+ export interface ExternalServiceSummary {
547
+ mode: 'skip' | 'mock' | 'fail';
548
+ unconfiguredServices: string[];
549
+ skippedTools: string[];
550
+ mockedTools: string[];
551
+ }
552
+ /**
553
+ * Summary of stateful testing.
554
+ */
555
+ export interface StatefulTestingSummary {
556
+ enabled: boolean;
557
+ toolCount: number;
558
+ dependencyCount: number;
559
+ maxChainLength: number;
560
+ }
561
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map