@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,140 @@
1
+ /**
2
+ * MCP Registry API types.
3
+ * Based on the official MCP Registry at registry.modelcontextprotocol.io
4
+ */
5
+ /**
6
+ * Repository information for a server.
7
+ */
8
+ export interface RegistryRepository {
9
+ /** Repository URL (e.g., GitHub URL) */
10
+ url: string;
11
+ /** Source type (e.g., "github") */
12
+ source: string;
13
+ /** Subfolder within the repository, if applicable */
14
+ subfolder?: string;
15
+ }
16
+ /**
17
+ * Package argument definition.
18
+ */
19
+ export interface RegistryPackageArgument {
20
+ /** Argument name */
21
+ name: string;
22
+ /** Description of the argument */
23
+ description?: string;
24
+ /** Argument type ("named" or "positional") */
25
+ type: 'named' | 'positional';
26
+ /** Value format */
27
+ format?: 'string' | 'number' | 'boolean';
28
+ /** Whether the argument is required */
29
+ isRequired?: boolean;
30
+ /** Default value */
31
+ default?: string | number | boolean;
32
+ }
33
+ /**
34
+ * Transport configuration for a package.
35
+ */
36
+ export interface RegistryTransport {
37
+ /** Transport type */
38
+ type: 'stdio' | 'sse' | 'streamable-http';
39
+ /** URL for remote transports */
40
+ url?: string;
41
+ }
42
+ /**
43
+ * Package distribution information.
44
+ */
45
+ export interface RegistryPackage {
46
+ /** Package registry type (npm, pip, cargo, etc.) */
47
+ registryType: string;
48
+ /** Base URL of the registry */
49
+ registryBaseUrl?: string;
50
+ /** Package identifier/name */
51
+ identifier: string;
52
+ /** Package version */
53
+ version?: string;
54
+ /** Transport configuration */
55
+ transport?: RegistryTransport;
56
+ /** Package arguments */
57
+ packageArguments?: RegistryPackageArgument[];
58
+ /** Runtime (e.g., "node", "python") */
59
+ runtime?: string;
60
+ }
61
+ /**
62
+ * Server metadata from the registry.
63
+ */
64
+ export interface RegistryServerMeta {
65
+ /** Server status (e.g., "active") */
66
+ status?: string;
67
+ /** When the server was published */
68
+ publishedAt?: string;
69
+ /** When the server was last updated */
70
+ updatedAt?: string;
71
+ /** Whether this is the latest version */
72
+ isLatest?: boolean;
73
+ }
74
+ /**
75
+ * Server definition from the registry.
76
+ */
77
+ export interface RegistryServer {
78
+ /** JSON Schema reference */
79
+ $schema?: string;
80
+ /** Server name (namespace/name format) */
81
+ name: string;
82
+ /** Short description */
83
+ description?: string;
84
+ /** Repository information */
85
+ repository?: RegistryRepository;
86
+ /** Server version */
87
+ version?: string;
88
+ /** Available packages/distributions */
89
+ packages?: RegistryPackage[];
90
+ /** Icon URL */
91
+ iconUrl?: string;
92
+ /** Homepage URL */
93
+ homepage?: string;
94
+ /** License */
95
+ license?: string;
96
+ /** Keywords/tags */
97
+ keywords?: string[];
98
+ }
99
+ /**
100
+ * Server entry in registry response.
101
+ */
102
+ export interface RegistryServerEntry {
103
+ /** Server definition */
104
+ server: RegistryServer;
105
+ /** Registry metadata */
106
+ _meta?: {
107
+ 'io.modelcontextprotocol.registry/official'?: RegistryServerMeta;
108
+ [key: string]: RegistryServerMeta | undefined;
109
+ };
110
+ }
111
+ /**
112
+ * Response metadata.
113
+ */
114
+ export interface RegistryResponseMetadata {
115
+ /** Total count of results */
116
+ count: number;
117
+ /** Cursor for pagination */
118
+ nextCursor?: string;
119
+ }
120
+ /**
121
+ * Response from the servers list endpoint.
122
+ */
123
+ export interface RegistryServersResponse {
124
+ /** List of servers */
125
+ servers: RegistryServerEntry[];
126
+ /** Response metadata */
127
+ metadata: RegistryResponseMetadata;
128
+ }
129
+ /**
130
+ * Options for listing servers.
131
+ */
132
+ export interface ListServersOptions {
133
+ /** Search query */
134
+ search?: string;
135
+ /** Maximum number of results */
136
+ limit?: number;
137
+ /** Pagination cursor */
138
+ cursor?: string;
139
+ }
140
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * MCP Registry API types.
3
+ * Based on the official MCP Registry at registry.modelcontextprotocol.io
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Scenario assertion evaluator.
3
+ *
4
+ * Evaluates assertions against tool/prompt responses.
5
+ */
6
+ import type { ScenarioAssertion, AssertionResult } from './types.js';
7
+ import { getValueAtPath } from '../utils/jsonpath.js';
8
+ export { getValueAtPath };
9
+ /**
10
+ * Extract and parse the actual response content from an MCP tool call result.
11
+ *
12
+ * MCP returns responses in this format:
13
+ * {
14
+ * content: [{ type: 'text', text: '{"success": true, ...}' }],
15
+ * isError: false
16
+ * }
17
+ *
18
+ * This function extracts the JSON from content[0].text and parses it,
19
+ * allowing assertions to check paths like 'success' and 'note.id' directly.
20
+ *
21
+ * For error responses (isError: true), returns an object with:
22
+ * { error: true, message: "...", isError: true }
23
+ *
24
+ * Falls back to returning the original response if:
25
+ * - Response is not an MCP tool call result
26
+ * - No text content found
27
+ * - Text is not valid JSON (for success responses)
28
+ */
29
+ export declare function extractResponseContent(response: unknown): unknown;
30
+ /**
31
+ * Evaluate a single assertion against a response.
32
+ */
33
+ export declare function evaluateAssertion(assertion: ScenarioAssertion, response: unknown, isError: boolean): AssertionResult;
34
+ /**
35
+ * Evaluate all assertions for a response.
36
+ * Extracts JSON content from MCP results for direct path access.
37
+ */
38
+ export declare function evaluateAssertions(assertions: ScenarioAssertion[], response: unknown, isError: boolean): AssertionResult[];
39
+ /**
40
+ * Format assertion results for display.
41
+ */
42
+ export declare function formatAssertionResults(results: AssertionResult[]): string;
43
+ //# sourceMappingURL=evaluator.d.ts.map
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Scenario assertion evaluator.
3
+ *
4
+ * Evaluates assertions against tool/prompt responses.
5
+ */
6
+ import { getValueAtPath } from '../utils/jsonpath.js';
7
+ // Re-export for backwards compatibility
8
+ export { getValueAtPath };
9
+ /**
10
+ * Extract and parse the actual response content from an MCP tool call result.
11
+ *
12
+ * MCP returns responses in this format:
13
+ * {
14
+ * content: [{ type: 'text', text: '{"success": true, ...}' }],
15
+ * isError: false
16
+ * }
17
+ *
18
+ * This function extracts the JSON from content[0].text and parses it,
19
+ * allowing assertions to check paths like 'success' and 'note.id' directly.
20
+ *
21
+ * For error responses (isError: true), returns an object with:
22
+ * { error: true, message: "...", isError: true }
23
+ *
24
+ * Falls back to returning the original response if:
25
+ * - Response is not an MCP tool call result
26
+ * - No text content found
27
+ * - Text is not valid JSON (for success responses)
28
+ */
29
+ export function extractResponseContent(response) {
30
+ // Handle null/undefined
31
+ if (response === null || response === undefined) {
32
+ return response;
33
+ }
34
+ // Check if this looks like an MCP tool call result
35
+ if (typeof response === 'object' && 'content' in response) {
36
+ const mcpResult = response;
37
+ // Find text content
38
+ const textContent = mcpResult.content?.find((c) => c.type === 'text' && c.text);
39
+ // If this is an error response, wrap the message in an error object
40
+ // This allows assertions like { path: 'error', condition: 'exists' } to work
41
+ if (mcpResult.isError) {
42
+ const errorMessage = textContent?.text ?? 'Unknown error';
43
+ return {
44
+ error: true,
45
+ message: errorMessage,
46
+ isError: true,
47
+ };
48
+ }
49
+ // For success responses, try to parse JSON
50
+ if (textContent?.text) {
51
+ try {
52
+ // Try to parse as JSON
53
+ const parsed = JSON.parse(textContent.text);
54
+ return parsed;
55
+ }
56
+ catch {
57
+ // Not valid JSON, return the raw text
58
+ return textContent.text;
59
+ }
60
+ }
61
+ }
62
+ // Not an MCP response, return as-is
63
+ return response;
64
+ }
65
+ /**
66
+ * Evaluate a single assertion against a response.
67
+ */
68
+ export function evaluateAssertion(assertion, response, isError) {
69
+ const actualValue = getValueAtPath(response, assertion.path);
70
+ try {
71
+ switch (assertion.condition) {
72
+ case 'exists':
73
+ return {
74
+ assertion,
75
+ passed: actualValue !== undefined,
76
+ actualValue,
77
+ error: actualValue === undefined
78
+ ? assertion.message ?? `Expected path "${assertion.path}" to exist`
79
+ : undefined,
80
+ };
81
+ case 'equals': {
82
+ const isEqual = JSON.stringify(actualValue) === JSON.stringify(assertion.value);
83
+ return {
84
+ assertion,
85
+ passed: isEqual,
86
+ actualValue,
87
+ error: isEqual
88
+ ? undefined
89
+ : assertion.message ??
90
+ `Expected ${JSON.stringify(actualValue)} to equal ${JSON.stringify(assertion.value)}`,
91
+ };
92
+ }
93
+ case 'contains': {
94
+ let containsValue = false;
95
+ if (typeof actualValue === 'string' && typeof assertion.value === 'string') {
96
+ containsValue = actualValue.includes(assertion.value);
97
+ }
98
+ else if (Array.isArray(actualValue)) {
99
+ containsValue = actualValue.some((item) => JSON.stringify(item) === JSON.stringify(assertion.value));
100
+ }
101
+ return {
102
+ assertion,
103
+ passed: containsValue,
104
+ actualValue,
105
+ error: containsValue
106
+ ? undefined
107
+ : assertion.message ??
108
+ `Expected ${JSON.stringify(actualValue)} to contain ${JSON.stringify(assertion.value)}`,
109
+ };
110
+ }
111
+ case 'truthy': {
112
+ const isTruthy = Boolean(actualValue);
113
+ return {
114
+ assertion,
115
+ passed: isTruthy,
116
+ actualValue,
117
+ error: isTruthy
118
+ ? undefined
119
+ : assertion.message ?? `Expected path "${assertion.path}" to be truthy`,
120
+ };
121
+ }
122
+ case 'type': {
123
+ let actualType;
124
+ if (Array.isArray(actualValue)) {
125
+ actualType = 'array';
126
+ }
127
+ else if (actualValue === null) {
128
+ actualType = 'null';
129
+ }
130
+ else {
131
+ actualType = typeof actualValue;
132
+ }
133
+ const typeMatches = actualType === assertion.value;
134
+ return {
135
+ assertion,
136
+ passed: typeMatches,
137
+ actualValue,
138
+ error: typeMatches
139
+ ? undefined
140
+ : assertion.message ??
141
+ `Expected type "${assertion.value}" but got "${actualType}"`,
142
+ };
143
+ }
144
+ case 'not_error':
145
+ return {
146
+ assertion,
147
+ passed: !isError,
148
+ actualValue: isError,
149
+ error: isError
150
+ ? assertion.message ?? 'Expected response to not be an error'
151
+ : undefined,
152
+ };
153
+ default:
154
+ return {
155
+ assertion,
156
+ passed: false,
157
+ actualValue,
158
+ error: `Unknown assertion condition: ${assertion.condition}`,
159
+ };
160
+ }
161
+ }
162
+ catch (error) {
163
+ return {
164
+ assertion,
165
+ passed: false,
166
+ actualValue,
167
+ error: `Assertion evaluation error: ${error.message}`,
168
+ };
169
+ }
170
+ }
171
+ /**
172
+ * Evaluate all assertions for a response.
173
+ * Extracts JSON content from MCP results for direct path access.
174
+ */
175
+ export function evaluateAssertions(assertions, response, isError) {
176
+ if (isError && (response === null || response === undefined)) {
177
+ const errorResponse = {
178
+ error: true,
179
+ isError: true,
180
+ message: 'MCP protocol error occurred',
181
+ };
182
+ return assertions.map((assertion) => evaluateAssertion(assertion, errorResponse, isError));
183
+ }
184
+ // Extract actual content from MCP response wrapper
185
+ const extractedResponse = extractResponseContent(response);
186
+ return assertions.map((assertion) => evaluateAssertion(assertion, extractedResponse, isError));
187
+ }
188
+ /**
189
+ * Format assertion results for display.
190
+ */
191
+ export function formatAssertionResults(results) {
192
+ const lines = [];
193
+ for (const result of results) {
194
+ const status = result.passed ? '✓' : '✗';
195
+ const condition = result.assertion.condition;
196
+ const path = result.assertion.path;
197
+ if (result.passed) {
198
+ lines.push(` ${status} ${path} ${condition}`);
199
+ }
200
+ else {
201
+ lines.push(` ${status} ${path} ${condition}: ${result.error}`);
202
+ }
203
+ }
204
+ return lines.join('\n');
205
+ }
206
+ //# sourceMappingURL=evaluator.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Custom test scenarios module.
3
+ *
4
+ * Provides YAML-based test scenario definitions that can be used
5
+ * alongside LLM-generated test cases.
6
+ */
7
+ export type { TestScenario, PromptScenario, ScenarioAssertion, AssertionCondition, TestScenariosYAML, LoadedScenarios, AssertionResult, ScenarioResult, } from './types.js';
8
+ export { loadScenariosFromFile, tryLoadDefaultScenarios, generateSampleScenariosYaml, DEFAULT_SCENARIOS_FILE, } from './loader.js';
9
+ export { evaluateAssertion, evaluateAssertions, extractResponseContent, getValueAtPath, formatAssertionResults, } from './evaluator.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Custom test scenarios module.
3
+ *
4
+ * Provides YAML-based test scenario definitions that can be used
5
+ * alongside LLM-generated test cases.
6
+ */
7
+ export { loadScenariosFromFile, tryLoadDefaultScenarios, generateSampleScenariosYaml, DEFAULT_SCENARIOS_FILE, } from './loader.js';
8
+ export { evaluateAssertion, evaluateAssertions, extractResponseContent, getValueAtPath, formatAssertionResults, } from './evaluator.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Scenario loader - loads test scenarios from YAML files.
3
+ */
4
+ import type { LoadedScenarios } from './types.js';
5
+ /** Default file name for test scenarios */
6
+ export declare const DEFAULT_SCENARIOS_FILE: "bellwether-tests.yaml";
7
+ /**
8
+ * Load test scenarios from a YAML file.
9
+ */
10
+ export declare function loadScenariosFromFile(path: string): LoadedScenarios;
11
+ /**
12
+ * Try to load scenarios from the default file in a directory.
13
+ * Returns null if file doesn't exist.
14
+ */
15
+ export declare function tryLoadDefaultScenarios(directory: string): LoadedScenarios | null;
16
+ /**
17
+ * Generate a sample YAML template for test scenarios.
18
+ */
19
+ export declare function generateSampleScenariosYaml(): string;
20
+ //# sourceMappingURL=loader.d.ts.map