@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,30 @@
1
+ /**
2
+ * Verification module for the Verified by Bellwether program.
3
+ */
4
+ import type { VerificationResult, VerificationReport, VerificationBadge, VerificationConfig } from './types.js';
5
+ import type { InterviewResult } from '../interview/types.js';
6
+ /**
7
+ * Generate a verification result from an interview result.
8
+ */
9
+ export declare function generateVerificationResult(interview: InterviewResult, config: VerificationConfig): VerificationResult;
10
+ /**
11
+ * Generate a full verification report.
12
+ */
13
+ export declare function generateVerificationReport(interview: InterviewResult, config: VerificationConfig): VerificationReport;
14
+ /**
15
+ * Generate a verification badge for embedding.
16
+ */
17
+ export declare function generateVerificationBadge(result: VerificationResult): VerificationBadge;
18
+ /**
19
+ * Generate a Shields.io compatible badge URL.
20
+ */
21
+ export declare function generateBadgeUrl(result: VerificationResult): string;
22
+ /**
23
+ * Generate a verification badge markdown.
24
+ */
25
+ export declare function generateBadgeMarkdown(result: VerificationResult, reportUrl?: string): string;
26
+ /**
27
+ * Check if a verification result is still valid.
28
+ */
29
+ export declare function isVerificationValid(result: VerificationResult): boolean;
30
+ //# sourceMappingURL=verifier.d.ts.map
@@ -0,0 +1,309 @@
1
+ /**
2
+ * Verification module for the Verified by Bellwether program.
3
+ */
4
+ import { createHash } from 'crypto';
5
+ import { getLogger } from '../logging/logger.js';
6
+ import { VERSION } from '../version.js';
7
+ import { TIME_CONSTANTS, DISPLAY_LIMITS, VERIFICATION_TIERS } from '../constants.js';
8
+ const logger = getLogger('verification');
9
+ /** Verification validity period in days */
10
+ const VERIFICATION_VALIDITY_DAYS = TIME_CONSTANTS.VERIFICATION_VALIDITY_DAYS;
11
+ /**
12
+ * Generate a verification result from an interview result.
13
+ */
14
+ export function generateVerificationResult(interview, config) {
15
+ const now = new Date();
16
+ const expiresAt = new Date(now.getTime() + VERIFICATION_VALIDITY_DAYS * TIME_CONSTANTS.MS_PER_DAY);
17
+ // Calculate test statistics
18
+ const { testsPassed, testsTotal } = calculateTestStats(interview);
19
+ const passRate = testsTotal > 0 ? Math.round((testsPassed / testsTotal) * 100) : 0;
20
+ // Determine tier based on coverage and pass rate
21
+ const tier = determineTier(interview, passRate);
22
+ // Determine status
23
+ const status = determineStatus(passRate, tier, config.targetTier);
24
+ // Generate report hash
25
+ const reportHash = generateReportHash(interview);
26
+ const result = {
27
+ serverId: config.serverId,
28
+ version: config.version ?? interview.discovery.serverInfo.version,
29
+ status,
30
+ tier: status === 'verified' ? tier : undefined,
31
+ verifiedAt: now.toISOString(),
32
+ expiresAt: expiresAt.toISOString(),
33
+ toolsVerified: interview.toolProfiles.length,
34
+ testsPassed,
35
+ testsTotal,
36
+ passRate,
37
+ reportHash,
38
+ bellwetherVersion: VERSION,
39
+ };
40
+ logger.info({
41
+ serverId: result.serverId,
42
+ status: result.status,
43
+ tier: result.tier,
44
+ passRate: result.passRate,
45
+ }, 'Verification result generated');
46
+ return result;
47
+ }
48
+ /**
49
+ * Generate a full verification report.
50
+ */
51
+ export function generateVerificationReport(interview, config) {
52
+ const result = generateVerificationResult(interview, config);
53
+ // Build tool verification details
54
+ const tools = interview.toolProfiles.map(profile => {
55
+ const passed = profile.interactions.filter(i => !i.error && !i.response?.isError).length;
56
+ const errors = profile.interactions
57
+ .filter(i => i.error || i.response?.isError)
58
+ .map(i => i.error ?? 'Tool returned error');
59
+ return {
60
+ name: profile.name,
61
+ testsRun: profile.interactions.length,
62
+ testsPassed: passed,
63
+ errors,
64
+ };
65
+ });
66
+ // Build prompt verification details
67
+ const prompts = interview.promptProfiles?.map(profile => {
68
+ const passed = profile.interactions.filter(i => !i.error).length;
69
+ const errors = profile.interactions
70
+ .filter(i => i.error)
71
+ .map(i => i.error ?? 'Prompt returned error');
72
+ return {
73
+ name: profile.name,
74
+ testsRun: profile.interactions.length,
75
+ testsPassed: passed,
76
+ errors,
77
+ };
78
+ });
79
+ // Build resource verification details
80
+ const resources = interview.resourceProfiles?.map(profile => {
81
+ const passed = profile.interactions.filter(i => !i.error).length;
82
+ const errors = profile.interactions
83
+ .filter(i => i.error)
84
+ .map(i => i.error ?? 'Resource read error');
85
+ return {
86
+ uri: profile.uri,
87
+ name: profile.name,
88
+ testsRun: profile.interactions.length,
89
+ testsPassed: passed,
90
+ errors,
91
+ };
92
+ });
93
+ return {
94
+ result,
95
+ serverInfo: {
96
+ name: interview.discovery.serverInfo.name,
97
+ version: interview.discovery.serverInfo.version,
98
+ description: interview.summary,
99
+ },
100
+ tools,
101
+ prompts,
102
+ resources,
103
+ environment: {
104
+ os: process.platform,
105
+ nodeVersion: process.version,
106
+ bellwetherVersion: VERSION,
107
+ },
108
+ };
109
+ }
110
+ /**
111
+ * Generate a verification badge for embedding.
112
+ */
113
+ export function generateVerificationBadge(result) {
114
+ const badge = {
115
+ label: 'bellwether',
116
+ message: 'not verified',
117
+ color: 'lightgrey',
118
+ };
119
+ switch (result.status) {
120
+ case 'verified':
121
+ badge.message = result.tier ?? 'verified';
122
+ badge.color = getTierColor(result.tier);
123
+ badge.icon = getTierIcon(result.tier);
124
+ badge.verifiedAt = result.verifiedAt;
125
+ break;
126
+ case 'pending':
127
+ badge.message = 'pending';
128
+ badge.color = 'yellow';
129
+ break;
130
+ case 'failed':
131
+ badge.message = 'failed';
132
+ badge.color = 'red';
133
+ break;
134
+ case 'expired':
135
+ badge.message = 'expired';
136
+ badge.color = 'orange';
137
+ break;
138
+ }
139
+ return badge;
140
+ }
141
+ /**
142
+ * Generate a Shields.io compatible badge URL.
143
+ */
144
+ export function generateBadgeUrl(result) {
145
+ const badge = generateVerificationBadge(result);
146
+ const encodedLabel = encodeURIComponent(badge.label);
147
+ const encodedMessage = encodeURIComponent(badge.message);
148
+ const encodedColor = encodeURIComponent(badge.color);
149
+ return `https://img.shields.io/badge/${encodedLabel}-${encodedMessage}-${encodedColor}`;
150
+ }
151
+ /**
152
+ * Generate a verification badge markdown.
153
+ */
154
+ export function generateBadgeMarkdown(result, reportUrl) {
155
+ const badgeUrl = generateBadgeUrl(result);
156
+ const altText = `Bellwether ${result.status}: ${result.tier ?? result.status}`;
157
+ if (reportUrl) {
158
+ return `[![${altText}](${badgeUrl})](${reportUrl})`;
159
+ }
160
+ return `![${altText}](${badgeUrl})`;
161
+ }
162
+ /**
163
+ * Check if a verification result is still valid.
164
+ */
165
+ export function isVerificationValid(result) {
166
+ const expiresAt = new Date(result.expiresAt);
167
+ return result.status === 'verified' && expiresAt > new Date();
168
+ }
169
+ /**
170
+ * Calculate test statistics from interview results.
171
+ */
172
+ function calculateTestStats(interview) {
173
+ let testsPassed = 0;
174
+ let testsTotal = 0;
175
+ const toolStats = new Map();
176
+ // Count tool tests
177
+ for (const profile of interview.toolProfiles) {
178
+ const total = profile.interactions.length;
179
+ const passed = profile.interactions.filter(i => !i.error && !i.response?.isError).length;
180
+ toolStats.set(profile.name, { passed, total });
181
+ testsPassed += passed;
182
+ testsTotal += total;
183
+ }
184
+ // Count prompt tests
185
+ if (interview.promptProfiles) {
186
+ for (const profile of interview.promptProfiles) {
187
+ const total = profile.interactions.length;
188
+ const passed = profile.interactions.filter(i => !i.error).length;
189
+ testsPassed += passed;
190
+ testsTotal += total;
191
+ }
192
+ }
193
+ // Count resource tests
194
+ if (interview.resourceProfiles) {
195
+ for (const profile of interview.resourceProfiles) {
196
+ const total = profile.interactions.length;
197
+ const passed = profile.interactions.filter(i => !i.error).length;
198
+ testsPassed += passed;
199
+ testsTotal += total;
200
+ }
201
+ }
202
+ // Count scenario tests
203
+ if (interview.scenarioResults) {
204
+ for (const result of interview.scenarioResults) {
205
+ testsTotal++;
206
+ if (result.passed) {
207
+ testsPassed++;
208
+ }
209
+ }
210
+ }
211
+ return { testsPassed, testsTotal, toolStats };
212
+ }
213
+ function determineTier(interview, passRate) {
214
+ const hasSecurityTesting = interview.metadata.personas?.some(p => p.name.toLowerCase().includes('security'));
215
+ const personaCount = interview.metadata.personas?.length ?? 1;
216
+ const hasPrompts = (interview.promptProfiles?.length ?? 0) > 0;
217
+ const hasResources = (interview.resourceProfiles?.length ?? 0) > 0;
218
+ // Platinum: Security testing + all personas + high pass rate
219
+ if (hasSecurityTesting &&
220
+ personaCount >= VERIFICATION_TIERS.PLATINUM.MIN_PERSONAS &&
221
+ passRate >= VERIFICATION_TIERS.PLATINUM.MIN_PASS_RATE) {
222
+ return 'platinum';
223
+ }
224
+ // Gold: Multiple personas + good coverage + high pass rate
225
+ if (personaCount >= VERIFICATION_TIERS.GOLD.MIN_PERSONAS &&
226
+ passRate >= VERIFICATION_TIERS.GOLD.MIN_PASS_RATE &&
227
+ (hasPrompts || hasResources)) {
228
+ return 'gold';
229
+ }
230
+ // Silver: Error handling tested + decent pass rate
231
+ if (personaCount >= VERIFICATION_TIERS.SILVER.MIN_PERSONAS &&
232
+ passRate >= VERIFICATION_TIERS.SILVER.MIN_PASS_RATE) {
233
+ return 'silver';
234
+ }
235
+ // Bronze: Basic testing
236
+ return 'bronze';
237
+ }
238
+ /**
239
+ * Determine verification status based on results.
240
+ */
241
+ function determineStatus(passRate, achievedTier, targetTier) {
242
+ // Minimum pass rate for verification
243
+ if (passRate < VERIFICATION_TIERS.MIN_PASS_RATE_FOR_VERIFICATION) {
244
+ return 'failed';
245
+ }
246
+ // Check if target tier is met
247
+ if (targetTier) {
248
+ const tierOrder = ['bronze', 'silver', 'gold', 'platinum'];
249
+ const achievedIndex = tierOrder.indexOf(achievedTier);
250
+ const targetIndex = tierOrder.indexOf(targetTier);
251
+ if (achievedIndex < targetIndex) {
252
+ return 'failed';
253
+ }
254
+ }
255
+ return 'verified';
256
+ }
257
+ /**
258
+ * Generate a hash of the interview results for verification.
259
+ */
260
+ function generateReportHash(interview) {
261
+ const data = {
262
+ serverName: interview.discovery.serverInfo.name,
263
+ serverVersion: interview.discovery.serverInfo.version,
264
+ toolCount: interview.toolProfiles.length,
265
+ toolNames: interview.toolProfiles.map(p => p.name).sort(),
266
+ promptCount: interview.promptProfiles?.length ?? 0,
267
+ resourceCount: interview.resourceProfiles?.length ?? 0,
268
+ timestamp: interview.metadata.startTime.toISOString(),
269
+ };
270
+ return createHash('sha256')
271
+ .update(JSON.stringify(data))
272
+ .digest('hex')
273
+ .substring(0, DISPLAY_LIMITS.HASH_DISPLAY_LENGTH);
274
+ }
275
+ /**
276
+ * Get color for a verification tier.
277
+ */
278
+ function getTierColor(tier) {
279
+ switch (tier) {
280
+ case 'platinum':
281
+ return '00CED1'; // Dark cyan
282
+ case 'gold':
283
+ return 'FFD700'; // Gold
284
+ case 'silver':
285
+ return 'C0C0C0'; // Silver
286
+ case 'bronze':
287
+ return 'CD7F32'; // Bronze
288
+ default:
289
+ return 'brightgreen';
290
+ }
291
+ }
292
+ /**
293
+ * Get icon for a verification tier.
294
+ */
295
+ function getTierIcon(tier) {
296
+ switch (tier) {
297
+ case 'platinum':
298
+ return '💎';
299
+ case 'gold':
300
+ return '🥇';
301
+ case 'silver':
302
+ return '🥈';
303
+ case 'bronze':
304
+ return '🥉';
305
+ default:
306
+ return '✓';
307
+ }
308
+ }
309
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Centralized version management.
3
+ *
4
+ * All version references should import from this module rather than
5
+ * hardcoding the version string.
6
+ */
7
+ /**
8
+ * The current Bellwether version.
9
+ */
10
+ export declare const VERSION: string;
11
+ /**
12
+ * Package name.
13
+ */
14
+ export declare const PACKAGE_NAME = "@dotsetlabs/bellwether";
15
+ /**
16
+ * User-Agent string for HTTP requests.
17
+ */
18
+ export declare const USER_AGENT: string;
19
+ //# sourceMappingURL=version.d.ts.map
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Centralized version management.
3
+ *
4
+ * All version references should import from this module rather than
5
+ * hardcoding the version string.
6
+ */
7
+ import { dirname, join } from 'path';
8
+ import { fileURLToPath } from 'url';
9
+ import { readFileSync } from 'fs';
10
+ /**
11
+ * Get the package version.
12
+ *
13
+ * This reads from package.json at runtime, which works correctly
14
+ * whether running in development or as an installed global package.
15
+ */
16
+ function getPackageVersion() {
17
+ try {
18
+ // First try npm_package_version (works when run via npm scripts)
19
+ if (process.env.npm_package_version) {
20
+ return process.env.npm_package_version;
21
+ }
22
+ // Otherwise read from package.json relative to this module
23
+ const __filename = fileURLToPath(import.meta.url);
24
+ const __dirname = dirname(__filename);
25
+ // In dist/, we need to go up one level to find package.json
26
+ // In src/, we also need to go up one level
27
+ const packagePath = join(__dirname, '..', 'package.json');
28
+ const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));
29
+ return packageJson.version;
30
+ }
31
+ catch {
32
+ // Fallback version - should match package.json
33
+ return '0.10.0';
34
+ }
35
+ }
36
+ /**
37
+ * The current Bellwether version.
38
+ */
39
+ export const VERSION = getPackageVersion();
40
+ /**
41
+ * Package name.
42
+ */
43
+ export const PACKAGE_NAME = '@dotsetlabs/bellwether';
44
+ /**
45
+ * User-Agent string for HTTP requests.
46
+ */
47
+ export const USER_AGENT = `bellwether/${VERSION}`;
48
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Workflow auto-generator - generates workflow YAML from discovered tools.
3
+ *
4
+ * This module analyzes tool descriptions and schemas to automatically
5
+ * generate test workflows that represent common usage patterns.
6
+ * Unlike the LLM-powered WorkflowDiscoverer, this uses heuristics
7
+ * for deterministic workflow generation in check mode.
8
+ */
9
+ import type { MCPTool } from '../transport/types.js';
10
+ import type { Workflow, WorkflowDiscoveryOptions } from './types.js';
11
+ /**
12
+ * Generate workflows from available tools using pattern matching.
13
+ *
14
+ * This function analyzes tool names, descriptions, and schemas to
15
+ * identify common workflow patterns like CRUD operations, auth flows,
16
+ * and chained data processing.
17
+ *
18
+ * @param tools - Available MCP tools
19
+ * @param options - Generation options
20
+ * @returns Array of generated workflows
21
+ */
22
+ export declare function generateWorkflowsFromTools(tools: MCPTool[], options?: WorkflowDiscoveryOptions): Workflow[];
23
+ /**
24
+ * Generate YAML content for workflows.
25
+ */
26
+ export declare function generateWorkflowYamlContent(workflows: Workflow[]): string;
27
+ //# sourceMappingURL=auto-generator.d.ts.map