@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,206 @@
1
+ /**
2
+ * Progress bar utilities for CLI test display.
3
+ */
4
+ import cliProgress from 'cli-progress';
5
+ import { suppressLogs, restoreLogLevel } from '../../logging/logger.js';
6
+ import { DISPLAY_LIMITS } from '../../constants.js';
7
+ /**
8
+ * Creates and manages a progress bar for test progress.
9
+ */
10
+ export class InterviewProgressBar {
11
+ bar = null;
12
+ enabled;
13
+ started = false;
14
+ totalWork = 0;
15
+ toolWork = 0;
16
+ currentValue = 0;
17
+ currentPayload = {};
18
+ constructor(options = {}) {
19
+ const stream = options.stream ?? process.stderr;
20
+ // Only enable progress bar if running in a TTY terminal
21
+ this.enabled = (options.enabled ?? true) && (stream.isTTY ?? false);
22
+ if (this.enabled) {
23
+ this.bar = new cliProgress.SingleBar({
24
+ format: '{bar} {percentage}% | {phase}: {item} ({current}/{phaseTotal}) | {questions} questions',
25
+ barCompleteChar: '\u2588',
26
+ barIncompleteChar: '\u2591',
27
+ hideCursor: true,
28
+ clearOnComplete: true,
29
+ stream,
30
+ // Force redraw on every update to prevent stale display
31
+ forceRedraw: true,
32
+ // Disable line wrapping to prevent display issues
33
+ linewrap: false,
34
+ // Synchronous updates prevent race conditions with terminal output
35
+ synchronousUpdate: true,
36
+ }, cliProgress.Presets.shades_classic);
37
+ }
38
+ }
39
+ /**
40
+ * Start the progress bar with initial values.
41
+ */
42
+ start(totalTools, totalPersonas, totalPrompts = 0, totalResources = 0) {
43
+ if (!this.enabled || !this.bar)
44
+ return;
45
+ // Suppress logging while progress bar is active to prevent interference
46
+ suppressLogs();
47
+ // Calculate total work across all phases
48
+ this.toolWork = totalTools * totalPersonas;
49
+ this.totalWork = this.toolWork + totalPrompts + totalResources;
50
+ this.bar.start(this.totalWork, 0, {
51
+ phase: 'Starting',
52
+ item: '...',
53
+ current: 0,
54
+ phaseTotal: totalTools,
55
+ questions: 0,
56
+ });
57
+ this.started = true;
58
+ }
59
+ /**
60
+ * Update the progress bar with current progress.
61
+ */
62
+ update(progress) {
63
+ if (!this.enabled || !this.bar || !this.started)
64
+ return;
65
+ // Handle workflow phase differently
66
+ if (progress.phase === 'workflows' && progress.totalWorkflows) {
67
+ this.bar.update(progress.workflowsCompleted ?? 0, {
68
+ phase: 'Workflows',
69
+ item: progress.currentWorkflow ?? '...',
70
+ current: (progress.workflowsCompleted ?? 0) + 1,
71
+ phaseTotal: progress.totalWorkflows,
72
+ questions: progress.questionsAsked,
73
+ });
74
+ return;
75
+ }
76
+ // Calculate completed work based on current phase
77
+ let completedWork;
78
+ let phaseLabel;
79
+ let currentItem;
80
+ let currentNum;
81
+ let totalNum;
82
+ if (progress.phase === 'interviewing') {
83
+ // Tools phase: count completed tools across personas
84
+ completedWork = progress.personasCompleted * progress.totalTools + progress.toolsCompleted;
85
+ phaseLabel = progress.currentPersona ?? 'Interviewing';
86
+ currentItem = progress.currentTool ?? '...';
87
+ currentNum = progress.toolsCompleted + 1;
88
+ totalNum = progress.totalTools;
89
+ }
90
+ else if (progress.phase === 'prompts') {
91
+ // Prompts phase: all tools done + prompts completed
92
+ completedWork = this.toolWork + (progress.promptsCompleted ?? 0);
93
+ phaseLabel = 'Prompts';
94
+ currentItem = progress.currentTool?.replace('prompt:', '') ?? '...';
95
+ currentNum = (progress.promptsCompleted ?? 0) + 1;
96
+ totalNum = progress.totalPrompts ?? 0;
97
+ }
98
+ else if (progress.phase === 'resources') {
99
+ // Resources phase: all tools done + all prompts done + resources completed
100
+ completedWork = this.toolWork + (progress.totalPrompts ?? 0) + (progress.resourcesCompleted ?? 0);
101
+ phaseLabel = 'Resources';
102
+ currentItem = progress.currentTool?.replace('resource:', '') ?? '...';
103
+ currentNum = (progress.resourcesCompleted ?? 0) + 1;
104
+ totalNum = progress.totalResources ?? 0;
105
+ }
106
+ else {
107
+ // Default/starting phase
108
+ completedWork = 0;
109
+ phaseLabel = 'Starting';
110
+ currentItem = '...';
111
+ currentNum = 0;
112
+ totalNum = progress.totalTools;
113
+ }
114
+ // Track current state for potential restart after logging
115
+ this.currentValue = completedWork;
116
+ this.currentPayload = {
117
+ phase: phaseLabel,
118
+ item: currentItem,
119
+ current: currentNum,
120
+ phaseTotal: totalNum,
121
+ questions: progress.questionsAsked,
122
+ };
123
+ this.bar.update(completedWork, this.currentPayload);
124
+ }
125
+ /**
126
+ * Stop and clear the progress bar.
127
+ */
128
+ stop() {
129
+ if (!this.enabled || !this.bar || !this.started)
130
+ return;
131
+ this.bar.stop();
132
+ this.started = false;
133
+ // Restore logging after progress bar is done
134
+ restoreLogLevel();
135
+ }
136
+ /**
137
+ * Log a message while the progress bar is active.
138
+ * Uses the same stream as the progress bar to avoid terminal overlap issues.
139
+ */
140
+ log(message) {
141
+ if (!this.enabled || !this.bar || !this.started) {
142
+ console.log(message);
143
+ return;
144
+ }
145
+ // Stop the progress bar temporarily to prevent overlap
146
+ this.bar.stop();
147
+ // Write to stderr (same stream as progress bar) to avoid mixing streams
148
+ process.stderr.write(message + '\n');
149
+ // Restart the progress bar with tracked state
150
+ this.bar.start(this.totalWork, this.currentValue, this.currentPayload);
151
+ }
152
+ }
153
+ /**
154
+ * Format a startup banner for the check command.
155
+ */
156
+ export function formatCheckBanner(options) {
157
+ const { serverCommand, toolCount } = options;
158
+ // Truncate server command if too long
159
+ const maxCmdLen = DISPLAY_LIMITS.BANNER_COMMAND_MAX_LENGTH;
160
+ const displayCmd = serverCommand.length > maxCmdLen
161
+ ? serverCommand.substring(0, maxCmdLen - 3) + '...'
162
+ : serverCommand;
163
+ const lines = [
164
+ 'Bellwether Check - Schema Validation & Drift Detection',
165
+ '',
166
+ '\u250C' + '\u2500'.repeat(50) + '\u2510',
167
+ `\u2502 Server: ${displayCmd.padEnd(38)}\u2502`,
168
+ `\u2502 Mode: ${'Check (free, deterministic)'.padEnd(38)}\u2502`,
169
+ ];
170
+ if (toolCount !== undefined) {
171
+ lines.push(`\u2502 Tools: ${String(toolCount + ' discovered').padEnd(38)}\u2502`);
172
+ }
173
+ lines.push('\u2514' + '\u2500'.repeat(50) + '\u2518');
174
+ return lines.join('\n');
175
+ }
176
+ /**
177
+ * Format a startup banner for the explore command.
178
+ */
179
+ export function formatExploreBanner(options) {
180
+ const { serverCommand, provider, model, personas, questionsPerTool, toolCount, } = options;
181
+ // Truncate server command if too long
182
+ const maxCmdLen = DISPLAY_LIMITS.BANNER_COMMAND_MAX_LENGTH;
183
+ const displayCmd = serverCommand.length > maxCmdLen
184
+ ? serverCommand.substring(0, maxCmdLen - 3) + '...'
185
+ : serverCommand;
186
+ const personaList = personas.join(', ');
187
+ const personaLabel = `${personaList} (${personas.length})`;
188
+ const lines = [
189
+ 'Bellwether Explore - Behavioral Documentation',
190
+ '',
191
+ '\u250C' + '\u2500'.repeat(50) + '\u2510',
192
+ `\u2502 Server: ${displayCmd.padEnd(38)}\u2502`,
193
+ `\u2502 Provider: ${provider.padEnd(38)}\u2502`,
194
+ `\u2502 Model: ${model.padEnd(38)}\u2502`,
195
+ `\u2502 Personas: ${personaLabel.padEnd(38)}\u2502`,
196
+ `\u2502 Questions: ${String(questionsPerTool + ' per tool').padEnd(38)}\u2502`,
197
+ ];
198
+ if (toolCount !== undefined) {
199
+ lines.push(`\u2502 Tools: ${String(toolCount + ' discovered').padEnd(38)}\u2502`);
200
+ }
201
+ lines.push('\u2514' + '\u2500'.repeat(50) + '\u2518');
202
+ lines.push('');
203
+ lines.push('Tip: For drift detection, use "bellwether check" instead');
204
+ return lines.join('\n');
205
+ }
206
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1,10 @@
1
+ import type { ServerContext } from '../../interview/types.js';
2
+ /**
3
+ * Extract server context from command and arguments.
4
+ *
5
+ * Analyzes the server command to provide hints about the server type
6
+ * (filesystem, database, git, etc.) and extracts path arguments for
7
+ * allowed directories.
8
+ */
9
+ export declare function extractServerContextFromArgs(command: string, args: string[]): ServerContext;
10
+ //# sourceMappingURL=server-context.d.ts.map
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Extract server context from command and arguments.
3
+ *
4
+ * Analyzes the server command to provide hints about the server type
5
+ * (filesystem, database, git, etc.) and extracts path arguments for
6
+ * allowed directories.
7
+ */
8
+ export function extractServerContextFromArgs(command, args) {
9
+ const context = {
10
+ allowedDirectories: [],
11
+ constraints: [],
12
+ hints: [],
13
+ };
14
+ const fullCommand = `${command} ${args.join(' ')}`.toLowerCase();
15
+ const pathArgs = args.filter((arg) => arg.startsWith('/') && !arg.startsWith('--'));
16
+ if (fullCommand.includes('filesystem') || fullCommand.includes('file-system')) {
17
+ context.allowedDirectories = pathArgs;
18
+ if (context.allowedDirectories.length > 0) {
19
+ context.hints.push(`Filesystem server with allowed directories: ${context.allowedDirectories.join(', ')}`);
20
+ }
21
+ context.constraints.push('Operations limited to specified directories');
22
+ }
23
+ else if (fullCommand.includes('postgres') || fullCommand.includes('mysql') || fullCommand.includes('sqlite')) {
24
+ context.hints.push('Database server - SQL operations expected');
25
+ context.constraints.push('Database operations only');
26
+ }
27
+ else if (fullCommand.includes('git')) {
28
+ context.allowedDirectories = pathArgs;
29
+ context.hints.push('Git server - repository operations expected');
30
+ }
31
+ else {
32
+ context.allowedDirectories = pathArgs;
33
+ }
34
+ return context;
35
+ }
36
+ //# sourceMappingURL=server-context.js.map
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Authentication module for Bellwether Cloud.
3
+ *
4
+ * Handles session storage, retrieval, and management.
5
+ * Sessions are stored in ~/.bellwether/session.json with restricted permissions.
6
+ */
7
+ import type { StoredSession, ProjectLink, SessionTeam } from './types.js';
8
+ /**
9
+ * Directory for bellwether configuration.
10
+ */
11
+ export declare const CONFIG_DIR: string;
12
+ /**
13
+ * Path to session file.
14
+ */
15
+ export declare const SESSION_FILE: string;
16
+ /**
17
+ * Environment variable name for session token.
18
+ */
19
+ export declare const SESSION_ENV_VAR = "BELLWETHER_SESSION";
20
+ /**
21
+ * Environment variable name for API base URL.
22
+ */
23
+ export declare const BASE_URL_ENV_VAR = "BELLWETHER_API_URL";
24
+ /**
25
+ * Environment variable name for team ID override.
26
+ */
27
+ export declare const TEAM_ID_ENV_VAR = "BELLWETHER_TEAM_ID";
28
+ /**
29
+ * Session token prefix for validation.
30
+ */
31
+ export declare const SESSION_PREFIX: "sess_";
32
+ /**
33
+ * Mock session prefix for development.
34
+ */
35
+ export declare const MOCK_SESSION_PREFIX: "sess_mock_";
36
+ /**
37
+ * Ensure the config directory exists.
38
+ */
39
+ export declare function ensureConfigDir(): void;
40
+ /**
41
+ * Get the stored session.
42
+ * Returns null if no session exists, session is expired, or file is corrupted.
43
+ */
44
+ export declare function getStoredSession(): StoredSession | null;
45
+ /**
46
+ * Save session to disk.
47
+ * File is created with 0600 permissions (owner read/write only).
48
+ */
49
+ export declare function saveSession(session: StoredSession): void;
50
+ /**
51
+ * Clear the stored session.
52
+ */
53
+ export declare function clearSession(): void;
54
+ /**
55
+ * Get the session token.
56
+ *
57
+ * Priority:
58
+ * 1. BELLWETHER_SESSION environment variable
59
+ * 2. Stored session in ~/.bellwether/session.json
60
+ */
61
+ export declare function getSessionToken(): string | undefined;
62
+ /**
63
+ * Get the API base URL.
64
+ *
65
+ * Priority:
66
+ * 1. BELLWETHER_API_URL environment variable
67
+ * 2. Default: https://api.bellwether.sh
68
+ *
69
+ * Security: Validates that custom URLs use HTTPS (except localhost for development).
70
+ */
71
+ export declare function getBaseUrl(): string;
72
+ /**
73
+ * Check if a session token appears valid (strict format check).
74
+ * Validates against exact patterns to prevent injection.
75
+ */
76
+ export declare function isValidSessionFormat(token: string): boolean;
77
+ /**
78
+ * Check if a session token is a mock session (for development).
79
+ */
80
+ export declare function isMockSession(token: string): boolean;
81
+ /**
82
+ * Check if currently authenticated.
83
+ */
84
+ export declare function isAuthenticated(): boolean;
85
+ /**
86
+ * Get the active team ID.
87
+ *
88
+ * Priority:
89
+ * 1. BELLWETHER_TEAM_ID environment variable
90
+ * 2. Team ID from project link (if in a linked project directory)
91
+ * 3. Active team ID from stored session
92
+ */
93
+ export declare function getTeamId(projectDir?: string): string | undefined;
94
+ /**
95
+ * Get the active team details.
96
+ * Returns the full team object if available.
97
+ */
98
+ export declare function getActiveTeam(projectDir?: string): SessionTeam | undefined;
99
+ /**
100
+ * Get all teams from the stored session.
101
+ */
102
+ export declare function getSessionTeams(): SessionTeam[];
103
+ /**
104
+ * Set the active team in the stored session.
105
+ * Returns true if successful, false if team not found in session.
106
+ */
107
+ export declare function setActiveTeam(teamId: string): boolean;
108
+ /**
109
+ * Update the session token in the stored session.
110
+ * Called when the server rotates the token and returns a new one.
111
+ *
112
+ * @param newToken - The new session token from the server
113
+ * @returns Promise that resolves when the session is updated
114
+ */
115
+ export declare function updateSessionToken(newToken: string): Promise<void>;
116
+ /**
117
+ * Directory name for per-project bellwether config.
118
+ */
119
+ export declare const PROJECT_CONFIG_DIR = ".bellwether";
120
+ /**
121
+ * File name for project link configuration.
122
+ */
123
+ export declare const LINK_FILE = "link.json";
124
+ /**
125
+ * Get the project link file path for a given directory.
126
+ */
127
+ export declare function getLinkFilePath(projectDir?: string): string;
128
+ /**
129
+ * Get the linked project for the current directory.
130
+ */
131
+ export declare function getLinkedProject(projectDir?: string): ProjectLink | null;
132
+ /**
133
+ * Save a project link for the current directory.
134
+ */
135
+ export declare function saveProjectLink(link: ProjectLink, projectDir?: string): void;
136
+ /**
137
+ * Remove the project link for the current directory.
138
+ */
139
+ export declare function removeProjectLink(projectDir?: string): boolean;
140
+ /**
141
+ * Check if the current directory is linked to a project.
142
+ */
143
+ export declare function isLinked(projectDir?: string): boolean;
144
+ //# sourceMappingURL=auth.d.ts.map