@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,60 @@
1
+ /**
2
+ * CI/CD integration utilities.
3
+ */
4
+ import type { InterviewResult } from '../interview/types.js';
5
+ import type { BehavioralDiff, CICheckResult } from '../baseline/types.js';
6
+ /**
7
+ * Exit codes for CI scripting.
8
+ */
9
+ export declare const EXIT_CODES: {
10
+ /** All checks passed */
11
+ readonly SUCCESS: 0;
12
+ /** Behavioral drift or security issues detected */
13
+ readonly FAILURE: 1;
14
+ /** Internal error during execution */
15
+ readonly ERROR: 2;
16
+ };
17
+ /**
18
+ * CI mode options.
19
+ */
20
+ export interface CIModeOptions {
21
+ /** Disable colors in output */
22
+ noColors?: boolean;
23
+ /** Fail if behavioral drift detected */
24
+ failOnDrift?: boolean;
25
+ /** Fail if security issues found */
26
+ failOnSecurity?: boolean;
27
+ /** Minimum severity to fail on */
28
+ failOnSeverity?: 'info' | 'warning' | 'breaking';
29
+ /** Output format */
30
+ outputFormat?: 'text' | 'json';
31
+ /** Whether running in CI environment */
32
+ isCI?: boolean;
33
+ }
34
+ /**
35
+ * Detect if running in a CI environment.
36
+ */
37
+ export declare function detectCIEnvironment(): boolean;
38
+ /**
39
+ * Get CI environment details.
40
+ */
41
+ export declare function getCIEnvironment(): {
42
+ name: string;
43
+ detected: boolean;
44
+ runId?: string;
45
+ branch?: string;
46
+ commit?: string;
47
+ };
48
+ /**
49
+ * Evaluate CI check from interview result.
50
+ */
51
+ export declare function evaluateInterviewResult(result: InterviewResult, options?: CIModeOptions): CICheckResult;
52
+ /**
53
+ * Evaluate CI check from behavioral diff.
54
+ */
55
+ export declare function evaluateDiff(diff: BehavioralDiff, options?: CIModeOptions): CICheckResult;
56
+ /**
57
+ * Format CI output for console.
58
+ */
59
+ export declare function formatCIOutput(checkResult: CICheckResult, options?: CIModeOptions): string;
60
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,342 @@
1
+ /**
2
+ * CI/CD integration utilities.
3
+ */
4
+ import { createBaseline } from '../baseline/index.js';
5
+ /**
6
+ * Exit codes for CI scripting.
7
+ */
8
+ export const EXIT_CODES = {
9
+ /** All checks passed */
10
+ SUCCESS: 0,
11
+ /** Behavioral drift or security issues detected */
12
+ FAILURE: 1,
13
+ /** Internal error during execution */
14
+ ERROR: 2,
15
+ };
16
+ /**
17
+ * Detect if running in a CI environment.
18
+ */
19
+ export function detectCIEnvironment() {
20
+ const ciEnvVars = [
21
+ 'CI',
22
+ 'CONTINUOUS_INTEGRATION',
23
+ 'GITHUB_ACTIONS',
24
+ 'GITLAB_CI',
25
+ 'CIRCLECI',
26
+ 'JENKINS_URL',
27
+ 'TRAVIS',
28
+ 'BUILDKITE',
29
+ 'AZURE_PIPELINES',
30
+ 'TEAMCITY_VERSION',
31
+ ];
32
+ return ciEnvVars.some((envVar) => process.env[envVar] !== undefined);
33
+ }
34
+ /**
35
+ * Get CI environment details.
36
+ */
37
+ export function getCIEnvironment() {
38
+ if (process.env.GITHUB_ACTIONS) {
39
+ return {
40
+ name: 'GitHub Actions',
41
+ detected: true,
42
+ runId: process.env.GITHUB_RUN_ID,
43
+ branch: process.env.GITHUB_REF_NAME,
44
+ commit: process.env.GITHUB_SHA,
45
+ };
46
+ }
47
+ if (process.env.GITLAB_CI) {
48
+ return {
49
+ name: 'GitLab CI',
50
+ detected: true,
51
+ runId: process.env.CI_JOB_ID,
52
+ branch: process.env.CI_COMMIT_REF_NAME,
53
+ commit: process.env.CI_COMMIT_SHA,
54
+ };
55
+ }
56
+ if (process.env.CIRCLECI) {
57
+ return {
58
+ name: 'CircleCI',
59
+ detected: true,
60
+ runId: process.env.CIRCLE_BUILD_NUM,
61
+ branch: process.env.CIRCLE_BRANCH,
62
+ commit: process.env.CIRCLE_SHA1,
63
+ };
64
+ }
65
+ if (process.env.JENKINS_URL) {
66
+ return {
67
+ name: 'Jenkins',
68
+ detected: true,
69
+ runId: process.env.BUILD_NUMBER,
70
+ branch: process.env.GIT_BRANCH,
71
+ commit: process.env.GIT_COMMIT,
72
+ };
73
+ }
74
+ if (process.env.TRAVIS) {
75
+ return {
76
+ name: 'Travis CI',
77
+ detected: true,
78
+ runId: process.env.TRAVIS_BUILD_NUMBER,
79
+ branch: process.env.TRAVIS_BRANCH,
80
+ commit: process.env.TRAVIS_COMMIT,
81
+ };
82
+ }
83
+ if (detectCIEnvironment()) {
84
+ return {
85
+ name: 'Unknown CI',
86
+ detected: true,
87
+ };
88
+ }
89
+ return {
90
+ name: 'Local',
91
+ detected: false,
92
+ };
93
+ }
94
+ /**
95
+ * Evaluate CI check from interview result.
96
+ */
97
+ export function evaluateInterviewResult(result, options = {}) {
98
+ const findings = [];
99
+ let securityFindingsCount = 0;
100
+ // Extract findings from tool profiles
101
+ for (const profile of result.toolProfiles) {
102
+ // Security notes become findings
103
+ for (let i = 0; i < profile.securityNotes.length; i++) {
104
+ const note = profile.securityNotes[i];
105
+ const isRisk = note.toLowerCase().includes('risk') ||
106
+ note.toLowerCase().includes('vulnerab') ||
107
+ note.toLowerCase().includes('dangerous') ||
108
+ note.toLowerCase().includes('injection');
109
+ findings.push({
110
+ id: `SEC-${profile.name}-${i + 1}`,
111
+ category: 'security',
112
+ severity: isRisk ? 'high' : 'medium',
113
+ title: `Security consideration for ${profile.name}`,
114
+ description: note,
115
+ tool: profile.name,
116
+ recommendation: 'Review and validate security implications',
117
+ });
118
+ if (isRisk)
119
+ securityFindingsCount++;
120
+ }
121
+ // Limitations as findings
122
+ for (let i = 0; i < profile.limitations.length; i++) {
123
+ findings.push({
124
+ id: `LIM-${profile.name}-${i + 1}`,
125
+ category: 'reliability',
126
+ severity: 'low',
127
+ title: `Limitation in ${profile.name}`,
128
+ description: profile.limitations[i],
129
+ tool: profile.name,
130
+ });
131
+ }
132
+ }
133
+ // Workflow failures
134
+ if (result.workflowResults) {
135
+ for (const wr of result.workflowResults) {
136
+ if (!wr.success) {
137
+ findings.push({
138
+ id: `WF-${wr.workflow.id}`,
139
+ category: 'reliability',
140
+ severity: 'high',
141
+ title: `Workflow failed: ${wr.workflow.name}`,
142
+ description: wr.failureReason || 'Workflow execution failed',
143
+ recommendation: 'Investigate workflow step failures',
144
+ });
145
+ }
146
+ }
147
+ }
148
+ // Extract assertions
149
+ const baseline = createBaseline(result, 'interview');
150
+ const assertions = baseline.assertions;
151
+ // Determine pass/fail
152
+ let passed = true;
153
+ let exitCode = EXIT_CODES.SUCCESS;
154
+ if (options.failOnSecurity && securityFindingsCount > 0) {
155
+ passed = false;
156
+ exitCode = EXIT_CODES.FAILURE;
157
+ }
158
+ // Check severity threshold
159
+ if (options.failOnSeverity) {
160
+ const severityMap = {
161
+ info: 1,
162
+ low: 2,
163
+ medium: 3,
164
+ warning: 3,
165
+ high: 4,
166
+ critical: 5,
167
+ breaking: 5,
168
+ };
169
+ const threshold = severityMap[options.failOnSeverity] || 0;
170
+ const hasFailingSeverity = findings.some((f) => (severityMap[f.severity] || 0) >= threshold);
171
+ if (hasFailingSeverity) {
172
+ passed = false;
173
+ exitCode = EXIT_CODES.FAILURE;
174
+ }
175
+ }
176
+ const summary = generateCheckSummary(result, findings, passed);
177
+ return {
178
+ passed,
179
+ exitCode,
180
+ assertions,
181
+ securityFindingsCount,
182
+ summary,
183
+ findings,
184
+ };
185
+ }
186
+ /**
187
+ * Evaluate CI check from behavioral diff.
188
+ */
189
+ export function evaluateDiff(diff, options = {}) {
190
+ const findings = [];
191
+ let securityFindingsCount = 0;
192
+ // Convert diff to findings
193
+ for (const tool of diff.toolsRemoved) {
194
+ findings.push({
195
+ id: `DRIFT-REMOVED-${tool}`,
196
+ category: 'drift',
197
+ severity: 'critical',
198
+ title: `Tool removed: ${tool}`,
199
+ description: `Tool "${tool}" was removed from the server`,
200
+ tool,
201
+ recommendation: 'Verify this removal was intentional',
202
+ });
203
+ }
204
+ for (const tool of diff.toolsAdded) {
205
+ findings.push({
206
+ id: `DRIFT-ADDED-${tool}`,
207
+ category: 'drift',
208
+ severity: 'info',
209
+ title: `Tool added: ${tool}`,
210
+ description: `New tool "${tool}" was added to the server`,
211
+ tool,
212
+ });
213
+ }
214
+ for (const change of diff.behaviorChanges) {
215
+ const severity = change.significance === 'high' ? 'high' :
216
+ change.significance === 'medium' ? 'medium' : 'low';
217
+ findings.push({
218
+ id: `DRIFT-${change.tool}-${change.aspect}`,
219
+ category: change.aspect === 'security' ? 'security' : 'drift',
220
+ severity,
221
+ title: `${change.aspect} changed: ${change.tool}`,
222
+ description: change.description,
223
+ tool: change.tool,
224
+ evidence: [
225
+ change.before ? `Before: ${change.before}` : '',
226
+ change.after ? `After: ${change.after}` : '',
227
+ ].filter(Boolean),
228
+ });
229
+ if (change.aspect === 'security') {
230
+ securityFindingsCount++;
231
+ }
232
+ }
233
+ // Determine pass/fail
234
+ let passed = true;
235
+ let exitCode = EXIT_CODES.SUCCESS;
236
+ if (options.failOnDrift && diff.severity !== 'none') {
237
+ passed = false;
238
+ exitCode = EXIT_CODES.FAILURE;
239
+ }
240
+ if (options.failOnSecurity && securityFindingsCount > 0) {
241
+ passed = false;
242
+ exitCode = EXIT_CODES.FAILURE;
243
+ }
244
+ // Breaking changes always fail
245
+ if (diff.severity === 'breaking') {
246
+ passed = false;
247
+ exitCode = EXIT_CODES.FAILURE;
248
+ }
249
+ const summary = diff.summary;
250
+ return {
251
+ passed,
252
+ exitCode,
253
+ diff,
254
+ assertions: [],
255
+ securityFindingsCount,
256
+ summary,
257
+ findings,
258
+ };
259
+ }
260
+ /**
261
+ * Generate summary for CI check.
262
+ */
263
+ function generateCheckSummary(result, findings, passed) {
264
+ const toolCount = result.toolProfiles.length;
265
+ const securityCount = findings.filter((f) => f.category === 'security').length;
266
+ const reliabilityCount = findings.filter((f) => f.category === 'reliability').length;
267
+ const status = passed ? 'PASSED' : 'FAILED';
268
+ return (`Bellwether check ${status}: ` +
269
+ `${toolCount} tool(s) profiled, ` +
270
+ `${securityCount} security finding(s), ` +
271
+ `${reliabilityCount} reliability finding(s)`);
272
+ }
273
+ /**
274
+ * Format CI output for console.
275
+ */
276
+ export function formatCIOutput(checkResult, options = {}) {
277
+ const lines = [];
278
+ const useColors = !options.noColors && !options.isCI;
279
+ const { green, red, yellow, cyan } = useColors ? colors : noColors;
280
+ // Status header
281
+ const statusIcon = checkResult.passed ? green('✓') : red('✗');
282
+ const statusText = checkResult.passed ? green('PASSED') : red('FAILED');
283
+ lines.push(`${statusIcon} Bellwether Check ${statusText}`);
284
+ lines.push('');
285
+ // Summary
286
+ lines.push(checkResult.summary);
287
+ lines.push('');
288
+ // Findings by severity
289
+ const critical = checkResult.findings.filter((f) => f.severity === 'critical');
290
+ const high = checkResult.findings.filter((f) => f.severity === 'high');
291
+ const medium = checkResult.findings.filter((f) => f.severity === 'medium');
292
+ const low = checkResult.findings.filter((f) => f.severity === 'low' || f.severity === 'info');
293
+ if (critical.length > 0) {
294
+ lines.push(red(`Critical (${critical.length}):`));
295
+ for (const f of critical) {
296
+ lines.push(` ${red('!')} ${f.title}`);
297
+ }
298
+ lines.push('');
299
+ }
300
+ if (high.length > 0) {
301
+ lines.push(red(`High (${high.length}):`));
302
+ for (const f of high) {
303
+ lines.push(` ${red('●')} ${f.title}`);
304
+ }
305
+ lines.push('');
306
+ }
307
+ if (medium.length > 0) {
308
+ lines.push(yellow(`Medium (${medium.length}):`));
309
+ for (const f of medium) {
310
+ lines.push(` ${yellow('●')} ${f.title}`);
311
+ }
312
+ lines.push('');
313
+ }
314
+ if (low.length > 0 && !options.isCI) {
315
+ lines.push(cyan(`Low/Info (${low.length}):`));
316
+ for (const f of low) {
317
+ lines.push(` ${cyan('○')} ${f.title}`);
318
+ }
319
+ lines.push('');
320
+ }
321
+ // Exit code info
322
+ lines.push(`Exit code: ${checkResult.exitCode}`);
323
+ return lines.join('\n');
324
+ }
325
+ // Color utilities
326
+ const colors = {
327
+ red: (s) => `\x1b[31m${s}\x1b[0m`,
328
+ green: (s) => `\x1b[32m${s}\x1b[0m`,
329
+ yellow: (s) => `\x1b[33m${s}\x1b[0m`,
330
+ cyan: (s) => `\x1b[36m${s}\x1b[0m`,
331
+ bold: (s) => `\x1b[1m${s}\x1b[0m`,
332
+ reset: '\x1b[0m',
333
+ };
334
+ const noColors = {
335
+ red: (s) => s,
336
+ green: (s) => s,
337
+ yellow: (s) => s,
338
+ cyan: (s) => s,
339
+ bold: (s) => s,
340
+ reset: '',
341
+ };
342
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Auth command for managing LLM provider API keys.
3
+ *
4
+ * Provides secure storage via system keychain with fallback to file-based storage.
5
+ * Separate from the `login` command which handles Bellwether Cloud authentication.
6
+ */
7
+ import { Command } from 'commander';
8
+ /**
9
+ * The auth command.
10
+ */
11
+ export declare const authCommand: Command;
12
+ //# sourceMappingURL=auth.d.ts.map