@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,337 @@
1
+ /**
2
+ * Workflow types - defines chained tool execution patterns.
3
+ */
4
+ import type { MCPToolCallResult } from '../transport/types.js';
5
+ /**
6
+ * A workflow defines a sequence of tool calls that represent
7
+ * a realistic usage pattern.
8
+ */
9
+ export interface Workflow {
10
+ /** Unique identifier for the workflow */
11
+ id: string;
12
+ /** Human-readable name */
13
+ name: string;
14
+ /** Description of what the workflow accomplishes */
15
+ description: string;
16
+ /** Ordered sequence of steps */
17
+ steps: WorkflowStep[];
18
+ /** Expected final outcome description */
19
+ expectedOutcome: string;
20
+ /** Whether this workflow was auto-discovered */
21
+ discovered?: boolean;
22
+ }
23
+ /**
24
+ * A single step in a workflow.
25
+ */
26
+ export interface WorkflowStep {
27
+ /** Tool to call for this step */
28
+ tool: string;
29
+ /** Description of what this step does */
30
+ description: string;
31
+ /** Static arguments to pass to the tool */
32
+ args?: Record<string, unknown>;
33
+ /** Dynamic argument mapping from previous step outputs */
34
+ argMapping?: ArgMapping;
35
+ /** Assertions to verify after this step */
36
+ assertions?: Assertion[];
37
+ /** Whether this step is optional (workflow continues if it fails) */
38
+ optional?: boolean;
39
+ }
40
+ /**
41
+ * Maps parameter names to JSONPath expressions referencing previous step outputs.
42
+ * Example: { "flightId": "$steps[0].result.flights[0].id" }
43
+ */
44
+ export type ArgMapping = Record<string, string>;
45
+ /**
46
+ * An assertion to verify after a step.
47
+ */
48
+ export interface Assertion {
49
+ /** JSONPath expression to evaluate */
50
+ path: string;
51
+ /** Expected condition */
52
+ condition: 'exists' | 'equals' | 'contains' | 'truthy' | 'type';
53
+ /** Expected value (for equals/contains/type) */
54
+ value?: unknown;
55
+ /** Error message if assertion fails */
56
+ message?: string;
57
+ }
58
+ /**
59
+ * Result of executing a single workflow step.
60
+ */
61
+ export interface WorkflowStepResult {
62
+ /** The step that was executed */
63
+ step: WorkflowStep;
64
+ /** Step index in the workflow */
65
+ stepIndex: number;
66
+ /** Whether the step succeeded */
67
+ success: boolean;
68
+ /** The tool call response */
69
+ response: MCPToolCallResult | null;
70
+ /** Error message if the step failed */
71
+ error?: string;
72
+ /** Resolved arguments (after applying mapping) */
73
+ resolvedArgs: Record<string, unknown>;
74
+ /** Assertion results */
75
+ assertionResults?: AssertionResult[];
76
+ /** Time taken in ms */
77
+ durationMs: number;
78
+ /** LLM analysis of this step */
79
+ analysis?: string;
80
+ }
81
+ /**
82
+ * Result of an assertion check.
83
+ */
84
+ export interface AssertionResult {
85
+ /** The assertion that was checked */
86
+ assertion: Assertion;
87
+ /** Whether the assertion passed */
88
+ passed: boolean;
89
+ /** Actual value found */
90
+ actualValue?: unknown;
91
+ /** Error message if failed */
92
+ message?: string;
93
+ }
94
+ /**
95
+ * Complete result of executing a workflow.
96
+ */
97
+ export interface WorkflowResult {
98
+ /** The workflow that was executed */
99
+ workflow: Workflow;
100
+ /** Results for each step */
101
+ steps: WorkflowStepResult[];
102
+ /** Whether the entire workflow succeeded */
103
+ success: boolean;
104
+ /** Reason for failure if unsuccessful */
105
+ failureReason?: string;
106
+ /** Index of the step that failed (if any) */
107
+ failedStepIndex?: number;
108
+ /** Total time taken in ms */
109
+ durationMs: number;
110
+ /** Data flow between steps (for visualization) */
111
+ dataFlow?: DataFlowEdge[];
112
+ /** LLM-generated summary of what the workflow demonstrated */
113
+ summary?: string;
114
+ /** State tracking information (if enabled) */
115
+ stateTracking?: WorkflowStateTracking;
116
+ }
117
+ /**
118
+ * Represents data flowing between workflow steps.
119
+ */
120
+ export interface DataFlowEdge {
121
+ /** Source step index */
122
+ fromStep: number;
123
+ /** Target step index */
124
+ toStep: number;
125
+ /** JSONPath of source data */
126
+ sourcePath: string;
127
+ /** Parameter name at target */
128
+ targetParam: string;
129
+ /** Sample value (for documentation) */
130
+ sampleValue?: unknown;
131
+ }
132
+ /**
133
+ * YAML format for user-defined workflows.
134
+ */
135
+ export interface WorkflowYAML {
136
+ id: string;
137
+ name: string;
138
+ description?: string;
139
+ expectedOutcome?: string;
140
+ steps: Array<{
141
+ tool: string;
142
+ description?: string;
143
+ args?: Record<string, unknown>;
144
+ argMapping?: Record<string, string>;
145
+ optional?: boolean;
146
+ assertions?: Array<{
147
+ path: string;
148
+ condition: string;
149
+ value?: unknown;
150
+ message?: string;
151
+ }>;
152
+ }>;
153
+ }
154
+ /**
155
+ * Workflow execution progress information.
156
+ */
157
+ export interface WorkflowProgress {
158
+ /** Current phase of execution */
159
+ phase: 'starting' | 'executing' | 'analyzing' | 'summarizing' | 'complete';
160
+ /** Workflow being executed */
161
+ workflow: Workflow;
162
+ /** Current step index (0-based) */
163
+ currentStep: number;
164
+ /** Total number of steps */
165
+ totalSteps: number;
166
+ /** Current step being executed */
167
+ currentStepInfo?: WorkflowStep;
168
+ /** Steps completed so far */
169
+ stepsCompleted: number;
170
+ /** Number of steps that failed */
171
+ stepsFailed: number;
172
+ /** Elapsed time in milliseconds */
173
+ elapsedMs: number;
174
+ }
175
+ /**
176
+ * Callback for workflow progress updates.
177
+ */
178
+ export type WorkflowProgressCallback = (progress: WorkflowProgress) => void;
179
+ /**
180
+ * Options for workflow execution.
181
+ */
182
+ export interface WorkflowExecutorOptions {
183
+ /** Whether to continue after a step fails */
184
+ continueOnError?: boolean;
185
+ /** Timeout per step in ms (default: 30000) */
186
+ stepTimeout?: number;
187
+ /** Whether to generate LLM analysis for each step */
188
+ analyzeSteps?: boolean;
189
+ /** Whether to generate an overall summary */
190
+ generateSummary?: boolean;
191
+ /** Progress callback for tracking execution */
192
+ onProgress?: WorkflowProgressCallback;
193
+ /** State tracking configuration */
194
+ stateTracking?: StateTrackingOptions;
195
+ /** Timeout configuration for various operations */
196
+ timeouts?: WorkflowTimeoutConfig;
197
+ /** AbortSignal for cancelling workflow execution */
198
+ signal?: AbortSignal;
199
+ /**
200
+ * Skip steps whose dependencies (previous steps that provide data via argMapping)
201
+ * have failed. When true, if a step depends on data from a failed step, it will be
202
+ * skipped rather than attempted with potentially invalid/missing data.
203
+ * Default: true
204
+ */
205
+ requireSuccessfulDependencies?: boolean;
206
+ }
207
+ /**
208
+ * Timeout configuration for workflow operations.
209
+ */
210
+ export interface WorkflowTimeoutConfig {
211
+ /** Timeout for individual tool calls in ms (default: 30000) */
212
+ toolCall?: number;
213
+ /** Timeout for state snapshot operations in ms (default: 30000) */
214
+ stateSnapshot?: number;
215
+ /** Timeout for individual probe tool calls in ms (default: 5000) */
216
+ probeTool?: number;
217
+ /** Timeout for LLM analysis calls in ms (default: 30000) */
218
+ llmAnalysis?: number;
219
+ /** Timeout for LLM summary generation in ms (default: 45000) */
220
+ llmSummary?: number;
221
+ }
222
+ /**
223
+ * Options for workflow discovery.
224
+ */
225
+ export interface WorkflowDiscoveryOptions {
226
+ /** Maximum workflows to discover */
227
+ maxWorkflows?: number;
228
+ /** Minimum steps per workflow */
229
+ minSteps?: number;
230
+ /** Maximum steps per workflow */
231
+ maxSteps?: number;
232
+ }
233
+ /**
234
+ * Role of a tool in state management.
235
+ */
236
+ export type ToolStateRole = 'reader' | 'writer' | 'both' | 'unknown';
237
+ /**
238
+ * Information about how a tool interacts with state.
239
+ */
240
+ export interface ToolStateInfo {
241
+ /** Tool name */
242
+ tool: string;
243
+ /** Role in state management */
244
+ role: ToolStateRole;
245
+ /** Types of state this tool affects (e.g., "files", "database", "cache") */
246
+ stateTypes?: string[];
247
+ /** Whether this tool can be used as a state probe */
248
+ isProbe: boolean;
249
+ /** Confidence in this classification (0-1) */
250
+ confidence: number;
251
+ }
252
+ /**
253
+ * A snapshot of state at a point in time.
254
+ */
255
+ export interface StateSnapshot {
256
+ /** When the snapshot was taken */
257
+ timestamp: Date;
258
+ /** Step index when snapshot was taken (-1 for before workflow) */
259
+ afterStepIndex: number;
260
+ /** Tool used to capture this snapshot (the probe) */
261
+ probeTool?: string;
262
+ /** The captured state data */
263
+ data: unknown;
264
+ /** Hash of the state for quick comparison */
265
+ hash: string;
266
+ }
267
+ /**
268
+ * Describes a state change between two snapshots.
269
+ */
270
+ export interface StateChange {
271
+ /** Type of change */
272
+ type: 'created' | 'modified' | 'deleted';
273
+ /** Path to the changed element (JSONPath-like) */
274
+ path: string;
275
+ /** Value before the change */
276
+ before?: unknown;
277
+ /** Value after the change */
278
+ after?: unknown;
279
+ /** Which step caused this change */
280
+ causedByStep: number;
281
+ }
282
+ /**
283
+ * Dependency between steps based on state.
284
+ */
285
+ export interface StateDependency {
286
+ /** Step that produces state */
287
+ producerStep: number;
288
+ /** Step that consumes state */
289
+ consumerStep: number;
290
+ /** Type of state (e.g., "file", "resource", "entity") */
291
+ stateType: string;
292
+ /** Description of the dependency */
293
+ description: string;
294
+ /** Whether this dependency was verified during execution */
295
+ verified: boolean;
296
+ }
297
+ /**
298
+ * Complete state tracking result for a workflow.
299
+ */
300
+ export interface WorkflowStateTracking {
301
+ /** State snapshots taken during workflow execution */
302
+ snapshots: StateSnapshot[];
303
+ /** Detected state changes */
304
+ changes: StateChange[];
305
+ /** Inferred dependencies between steps */
306
+ dependencies: StateDependency[];
307
+ /** Tools classified by their state role */
308
+ toolRoles: ToolStateInfo[];
309
+ /** Summary of state behavior */
310
+ summary?: string;
311
+ }
312
+ /**
313
+ * Options for state tracking during workflow execution.
314
+ */
315
+ export interface StateTrackingOptions {
316
+ /** Whether to enable state tracking */
317
+ enabled?: boolean;
318
+ /** Tools to use as state probes (if not specified, auto-detect) */
319
+ probeTools?: string[];
320
+ /** Take initial snapshot before workflow starts */
321
+ snapshotBefore?: boolean;
322
+ /** Take final snapshot after workflow completes */
323
+ snapshotAfter?: boolean;
324
+ /** Take snapshot after each step */
325
+ snapshotAfterEachStep?: boolean;
326
+ }
327
+ /**
328
+ * Extended workflow step with state hints.
329
+ */
330
+ export interface WorkflowStepWithState extends WorkflowStep {
331
+ /** Expected state role for this step's tool */
332
+ stateHint?: {
333
+ role: ToolStateRole;
334
+ stateTypes?: string[];
335
+ };
336
+ }
337
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Workflow types - defines chained tool execution patterns.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
package/package.json ADDED
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "@dotsetlabs/bellwether",
3
+ "version": "0.10.0",
4
+ "description": "Structural drift detection for MCP servers. Zero-LLM check mode by default, optional multi-persona exploration with OpenAI/Anthropic. Auto-generate CONTRACT.md or AGENTS.md documentation.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./cli": {
14
+ "import": "./dist/cli/index.js"
15
+ },
16
+ "./logging": {
17
+ "import": "./dist/logging/logger.js",
18
+ "types": "./dist/logging/logger.d.ts"
19
+ }
20
+ },
21
+ "bin": {
22
+ "bellwether": "dist/cli/index.js"
23
+ },
24
+ "scripts": {
25
+ "build": "tsc",
26
+ "postbuild": "chmod +x dist/cli/index.js",
27
+ "dev": "tsc --watch",
28
+ "test": "vitest run",
29
+ "test:watch": "vitest",
30
+ "test:coverage": "vitest run --coverage",
31
+ "lint": "eslint src --ext .ts",
32
+ "clean": "rm -rf dist",
33
+ "prepublishOnly": "npm run build"
34
+ },
35
+ "keywords": [
36
+ "mcp",
37
+ "model-context-protocol",
38
+ "ai-agents",
39
+ "documentation",
40
+ "behavioral-testing",
41
+ "drift-detection",
42
+ "security",
43
+ "llm",
44
+ "openai",
45
+ "anthropic"
46
+ ],
47
+ "author": "Dotset Labs LLC <hello@dotsetlabs.com>",
48
+ "license": "MIT",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "https://github.com/dotsetlabs/bellwether"
52
+ },
53
+ "bugs": {
54
+ "url": "https://github.com/dotsetlabs/bellwether/issues"
55
+ },
56
+ "homepage": "https://github.com/dotsetlabs/bellwether#readme",
57
+ "engines": {
58
+ "node": ">=20.0.0"
59
+ },
60
+ "dependencies": {
61
+ "@anthropic-ai/sdk": "^0.71.2",
62
+ "chalk": "^5.4.1",
63
+ "cli-progress": "^3.12.0",
64
+ "commander": "^14.0.2",
65
+ "dotenv": "^17.2.3",
66
+ "openai": "^6.16.0",
67
+ "pino": "^10.2.1",
68
+ "ajv": "^8.17.1",
69
+ "yaml": "^2.3.4",
70
+ "zod": "^3.25.76"
71
+ },
72
+ "optionalDependencies": {
73
+ "keytar": "^7.9.0"
74
+ },
75
+ "devDependencies": {
76
+ "@types/cli-progress": "^3.11.6",
77
+ "@types/keytar": "^4.4.0",
78
+ "@types/node": "^25.0.9",
79
+ "@typescript-eslint/eslint-plugin": "^6.21.0",
80
+ "@typescript-eslint/parser": "^6.21.0",
81
+ "eslint": "^8.57.1",
82
+ "tsx": "^4.21.0",
83
+ "typescript": "^5.3.0",
84
+ "vitest": "^4.0.17"
85
+ },
86
+ "files": [
87
+ "dist",
88
+ "!dist/**/*.map",
89
+ "schemas",
90
+ "README.md",
91
+ "LICENSE",
92
+ "CHANGELOG.md"
93
+ ]
94
+ }