@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,169 @@
1
+ import { TIMEOUTS, INTERVIEW, WORKFLOW, PATHS, LLM_DEFAULTS } from '../constants.js';
2
+ const WORKFLOW_STEP_TIMEOUT_MS = 5000;
3
+ export const CONFIG_DEFAULTS = {
4
+ server: {
5
+ command: '',
6
+ args: [],
7
+ timeout: TIMEOUTS.DEFAULT,
8
+ },
9
+ llm: {
10
+ provider: 'ollama',
11
+ model: '',
12
+ ollama: {
13
+ baseUrl: LLM_DEFAULTS.OLLAMA_BASE_URL,
14
+ },
15
+ },
16
+ explore: {
17
+ personas: ['technical_writer'],
18
+ maxQuestionsPerTool: INTERVIEW.MAX_QUESTIONS_PER_TOOL,
19
+ parallelPersonas: false,
20
+ personaConcurrency: INTERVIEW.DEFAULT_PERSONA_CONCURRENCY,
21
+ skipErrorTests: false,
22
+ },
23
+ scenarios: {
24
+ only: false,
25
+ },
26
+ workflows: {
27
+ discover: false,
28
+ trackState: false,
29
+ autoGenerate: false,
30
+ stepTimeout: WORKFLOW_STEP_TIMEOUT_MS,
31
+ requireSuccessfulDependencies: true,
32
+ timeouts: {
33
+ toolCall: WORKFLOW_STEP_TIMEOUT_MS,
34
+ stateSnapshot: WORKFLOW.STATE_SNAPSHOT_TIMEOUT,
35
+ probeTool: WORKFLOW.PROBE_TOOL_TIMEOUT,
36
+ llmAnalysis: WORKFLOW.LLM_ANALYSIS_TIMEOUT,
37
+ llmSummary: WORKFLOW.LLM_SUMMARY_TIMEOUT,
38
+ },
39
+ },
40
+ output: {
41
+ dir: '.bellwether',
42
+ docsDir: '.',
43
+ format: 'both',
44
+ examples: {
45
+ full: true,
46
+ maxLength: 5000,
47
+ maxPerTool: 5,
48
+ },
49
+ files: {
50
+ checkReport: PATHS.DEFAULT_CHECK_REPORT_FILE,
51
+ exploreReport: PATHS.DEFAULT_EXPLORE_REPORT_FILE,
52
+ contractDoc: PATHS.DEFAULT_CONTRACT_FILE,
53
+ agentsDoc: PATHS.DEFAULT_AGENTS_FILE,
54
+ verificationReport: PATHS.DEFAULT_VERIFICATION_REPORT_FILE,
55
+ },
56
+ },
57
+ check: {
58
+ incremental: false,
59
+ incrementalCacheHours: 168,
60
+ parallel: true,
61
+ parallelWorkers: INTERVIEW.DEFAULT_TOOL_CONCURRENCY,
62
+ performanceThreshold: 10,
63
+ diffFormat: 'text',
64
+ warmupRuns: 0,
65
+ smartTestValues: true,
66
+ statefulTesting: {
67
+ enabled: true,
68
+ maxChainLength: 5,
69
+ shareOutputsBetweenTools: true,
70
+ },
71
+ externalServices: {
72
+ mode: 'skip',
73
+ services: {},
74
+ },
75
+ assertions: {
76
+ enabled: true,
77
+ strict: false,
78
+ infer: true,
79
+ },
80
+ rateLimit: {
81
+ enabled: false,
82
+ requestsPerSecond: 10,
83
+ burstLimit: 20,
84
+ backoffStrategy: 'exponential',
85
+ maxRetries: 3,
86
+ },
87
+ security: {
88
+ enabled: false,
89
+ categories: [
90
+ 'sql_injection',
91
+ 'xss',
92
+ 'path_traversal',
93
+ 'command_injection',
94
+ 'ssrf',
95
+ 'error_disclosure',
96
+ ],
97
+ },
98
+ sampling: {
99
+ minSamples: 10,
100
+ targetConfidence: 'low',
101
+ failOnLowConfidence: false,
102
+ },
103
+ metrics: {
104
+ countValidationAsSuccess: true,
105
+ separateValidationMetrics: true,
106
+ },
107
+ },
108
+ baseline: {
109
+ path: PATHS.DEFAULT_BASELINE_FILE,
110
+ savePath: '.bellwether/bellwether-baseline.json',
111
+ failOnDrift: false,
112
+ outputFormat: 'text',
113
+ severity: {
114
+ minimumSeverity: 'none',
115
+ failOnSeverity: 'breaking',
116
+ suppressWarnings: false,
117
+ },
118
+ },
119
+ watch: {
120
+ path: '.',
121
+ interval: TIMEOUTS.WATCH_INTERVAL,
122
+ extensions: ['.ts', '.js', '.json', '.py', '.go'],
123
+ },
124
+ cache: {
125
+ enabled: true,
126
+ dir: PATHS.DEFAULT_CACHE_DIR,
127
+ },
128
+ logging: {
129
+ level: 'info',
130
+ verbose: false,
131
+ },
132
+ discovery: {
133
+ json: false,
134
+ timeout: TIMEOUTS.DEFAULT,
135
+ transport: 'stdio',
136
+ },
137
+ registry: {
138
+ limit: 10,
139
+ json: false,
140
+ },
141
+ history: {
142
+ limit: 10,
143
+ json: false,
144
+ },
145
+ link: {
146
+ defaultServerCommand: 'node dist/server.js',
147
+ },
148
+ golden: {
149
+ defaultArgs: '{}',
150
+ mode: 'structural',
151
+ compareFormat: 'text',
152
+ listFormat: 'text',
153
+ normalizeTimestamps: true,
154
+ normalizeUuids: true,
155
+ },
156
+ verify: {
157
+ tier: 'silver',
158
+ security: false,
159
+ json: false,
160
+ badgeOnly: false,
161
+ },
162
+ contract: {
163
+ mode: 'strict',
164
+ format: 'text',
165
+ timeout: TIMEOUTS.DEFAULT,
166
+ failOnViolation: false,
167
+ },
168
+ };
169
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Configuration loader.
3
+ *
4
+ * Loads bellwether.yaml configuration. Config file is REQUIRED for running tests.
5
+ * Use `bellwether init` to create a config file with all options documented.
6
+ */
7
+ import { type BellwetherConfig } from './validator.js';
8
+ export type { BellwetherConfig };
9
+ /**
10
+ * Error thrown when no config file is found.
11
+ */
12
+ export declare class ConfigNotFoundError extends Error {
13
+ constructor(searchedPaths?: string[]);
14
+ }
15
+ /**
16
+ * Load configuration from file. Config file is REQUIRED.
17
+ *
18
+ * @param explicitPath - Optional explicit path to config file
19
+ * @returns Validated configuration
20
+ * @throws ConfigNotFoundError if no config file is found
21
+ * @throws Error if config file is invalid
22
+ */
23
+ export declare function loadConfig(explicitPath?: string): BellwetherConfig;
24
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Configuration loader.
3
+ *
4
+ * Loads bellwether.yaml configuration. Config file is REQUIRED for running tests.
5
+ * Use `bellwether init` to create a config file with all options documented.
6
+ */
7
+ import { readFileSync } from 'fs';
8
+ import { join } from 'path';
9
+ import { parseYamlSecure } from '../utils/yaml-parser.js';
10
+ import { validateConfig, findConfigFile, } from './validator.js';
11
+ import { PATHS } from '../constants.js';
12
+ /**
13
+ * Interpolate environment variables in a string.
14
+ * Supports ${VAR} and $VAR syntax.
15
+ *
16
+ * @param value - String that may contain env var references
17
+ * @returns String with env vars replaced with their values
18
+ */
19
+ function interpolateEnvVars(value) {
20
+ // Match ${VAR} or ${VAR:-default} syntax
21
+ return value.replace(/\$\{([^}]+)\}/g, (match, expr) => {
22
+ // Check for default value syntax: ${VAR:-default}
23
+ const [varName, defaultValue] = expr.split(':-');
24
+ const envValue = process.env[varName.trim()];
25
+ if (envValue !== undefined) {
26
+ return envValue;
27
+ }
28
+ if (defaultValue !== undefined) {
29
+ return defaultValue;
30
+ }
31
+ // Return original if no value and no default
32
+ return match;
33
+ });
34
+ }
35
+ /**
36
+ * Recursively interpolate environment variables in a config object.
37
+ * Only interpolates string values.
38
+ *
39
+ * @param obj - Object to interpolate
40
+ * @returns New object with env vars interpolated
41
+ */
42
+ function interpolateConfig(obj) {
43
+ if (obj === null || obj === undefined) {
44
+ return obj;
45
+ }
46
+ if (typeof obj === 'string') {
47
+ return interpolateEnvVars(obj);
48
+ }
49
+ if (Array.isArray(obj)) {
50
+ return obj.map((item) => interpolateConfig(item));
51
+ }
52
+ if (typeof obj === 'object') {
53
+ const result = {};
54
+ for (const [key, value] of Object.entries(obj)) {
55
+ result[key] = interpolateConfig(value);
56
+ }
57
+ return result;
58
+ }
59
+ return obj;
60
+ }
61
+ /**
62
+ * Error thrown when no config file is found.
63
+ */
64
+ export class ConfigNotFoundError extends Error {
65
+ constructor(searchedPaths) {
66
+ const message = searchedPaths
67
+ ? `No bellwether config file found.\n\nSearched:\n${searchedPaths.map((p) => ` - ${p}`).join('\n')}\n\nRun \`bellwether init\` to create a config file.`
68
+ : 'No bellwether config file found.\n\nRun `bellwether init` to create a config file.';
69
+ super(message);
70
+ this.name = 'ConfigNotFoundError';
71
+ }
72
+ }
73
+ /**
74
+ * Load configuration from file. Config file is REQUIRED.
75
+ *
76
+ * @param explicitPath - Optional explicit path to config file
77
+ * @returns Validated configuration
78
+ * @throws ConfigNotFoundError if no config file is found
79
+ * @throws Error if config file is invalid
80
+ */
81
+ export function loadConfig(explicitPath) {
82
+ // Find config file
83
+ const configPath = findConfigFile(explicitPath);
84
+ if (!configPath) {
85
+ // Build list of searched paths for helpful error message
86
+ const searchedPaths = explicitPath
87
+ ? [explicitPath]
88
+ : PATHS.CONFIG_FILENAMES.map((name) => join(process.cwd(), name));
89
+ throw new ConfigNotFoundError(searchedPaths);
90
+ }
91
+ // Load and parse the file
92
+ const content = readFileSync(configPath, 'utf-8');
93
+ let parsed;
94
+ try {
95
+ parsed = parseYamlSecure(content);
96
+ }
97
+ catch (error) {
98
+ throw new Error(`Invalid YAML in config file ${configPath}: ${error instanceof Error ? error.message : 'Unknown error'}`);
99
+ }
100
+ // Handle empty config files - treat as minimal valid config
101
+ if (parsed === null || parsed === undefined) {
102
+ parsed = {};
103
+ }
104
+ // Interpolate environment variables (e.g., ${PLEX_TOKEN})
105
+ parsed = interpolateConfig(parsed);
106
+ // SECURITY: Reject API keys stored directly in config files
107
+ const rawConfig = parsed;
108
+ const llmConfig = rawConfig.llm;
109
+ if (llmConfig?.apiKey || llmConfig?.openaiApiKey || llmConfig?.anthropicApiKey) {
110
+ throw new Error(`Security Error: API key found in config file "${configPath}".\n` +
111
+ `Storing API keys in config files is a security risk.\n\n` +
112
+ `Use environment variables instead:\n` +
113
+ ` export OPENAI_API_KEY=sk-xxx\n` +
114
+ ` export ANTHROPIC_API_KEY=sk-ant-xxx\n\n` +
115
+ `Or use the secure credential store:\n` +
116
+ ` bellwether auth\n\n` +
117
+ `Remove any API key fields from your config file.`);
118
+ }
119
+ // Validate and apply defaults using the new schema
120
+ return validateConfig(parsed, configPath);
121
+ }
122
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Configuration template options.
3
+ */
4
+ export interface ConfigTemplateOptions {
5
+ /** Server command (optional, can be set later) */
6
+ serverCommand?: string;
7
+ /** Server arguments */
8
+ serverArgs?: string[];
9
+ /** LLM provider for explore command */
10
+ provider?: 'ollama' | 'openai' | 'anthropic';
11
+ /** Preset name used to generate this config */
12
+ preset?: string;
13
+ /** Environment variables detected from .env.example */
14
+ envVars?: string[];
15
+ /** Whether to optimize for CI (affects baseline.failOnDrift default) */
16
+ ciOptimized?: boolean;
17
+ }
18
+ /**
19
+ * Generate a comprehensive bellwether.yaml configuration file.
20
+ *
21
+ * The generated file includes ALL possible options with explanatory comments,
22
+ * so users can customize without consulting documentation.
23
+ *
24
+ * This config is used by both 'bellwether check' and 'bellwether explore' commands.
25
+ */
26
+ export declare function generateConfigTemplate(options?: ConfigTemplateOptions): string;
27
+ /**
28
+ * Preset configurations for common use cases.
29
+ */
30
+ export declare const PRESETS: Record<string, ConfigTemplateOptions>;
31
+ /**
32
+ * Get preset-specific YAML overrides for documentation purposes.
33
+ *
34
+ * @param presetName - Name of the preset (ci, security, thorough, local)
35
+ * @returns YAML string with preset-specific settings or null if preset not found
36
+ */
37
+ export declare function getPresetOverrides(presetName: string): string | null;
38
+ /**
39
+ * Generate a preset-specific configuration.
40
+ */
41
+ export declare function generatePresetConfig(presetName: string, options?: ConfigTemplateOptions): string;
42
+ //# sourceMappingURL=template.d.ts.map