@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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const badgeCommand: Command;
3
+ //# sourceMappingURL=badge.d.ts.map
@@ -0,0 +1,74 @@
1
+ import { Command } from 'commander';
2
+ import { createCloudClient } from '../../../cloud/client.js';
3
+ import { getLinkedProject } from '../../../cloud/auth.js';
4
+ import { EXIT_CODES } from '../../../constants.js';
5
+ import * as output from '../../output.js';
6
+ export const badgeCommand = new Command('badge')
7
+ .description('Get embeddable badge for your project')
8
+ .option('-p, --project <id>', 'Project ID (uses linked project if not specified)')
9
+ .option('--json', 'Output as JSON')
10
+ .option('--markdown', 'Output markdown only')
11
+ .option('--url', 'Output badge URL only')
12
+ .action(async (options) => {
13
+ // Get project ID
14
+ let projectId = options.project;
15
+ if (!projectId) {
16
+ const link = getLinkedProject();
17
+ if (!link) {
18
+ output.error('No project specified and no linked project found.');
19
+ output.error('Run `bellwether link <project>` first or use --project <id>');
20
+ process.exit(EXIT_CODES.ERROR);
21
+ }
22
+ projectId = link.projectId;
23
+ }
24
+ // Create cloud client
25
+ const client = createCloudClient();
26
+ try {
27
+ const badge = await client.getBadgeInfo(projectId);
28
+ if (!badge) {
29
+ output.error(`Project not found: ${projectId}`);
30
+ process.exit(EXIT_CODES.ERROR);
31
+ }
32
+ if (options.json) {
33
+ output.info(JSON.stringify(badge, null, 2));
34
+ return;
35
+ }
36
+ if (options.markdown) {
37
+ output.info(badge.markdown);
38
+ return;
39
+ }
40
+ if (options.url) {
41
+ output.info(badge.badgeUrl);
42
+ return;
43
+ }
44
+ // Default: formatted output
45
+ output.info('');
46
+ output.info(`Project: ${badge.projectName}`);
47
+ output.info(`Status: ${badge.statusText}`);
48
+ if (badge.lastVerified) {
49
+ output.info(`Verified: ${new Date(badge.lastVerified).toLocaleString()}`);
50
+ }
51
+ if (badge.latestVersion) {
52
+ output.info(`Version: v${badge.latestVersion}`);
53
+ }
54
+ output.info('');
55
+ output.info('Badge URL:');
56
+ output.info(` ${badge.badgeUrl}`);
57
+ output.info('');
58
+ output.info('Add to your README.md:');
59
+ output.info('');
60
+ output.info(` ${badge.markdown}`);
61
+ output.info('');
62
+ output.info('Or with HTML:');
63
+ output.info('');
64
+ // Extract base URL from badge URL for consistency
65
+ const baseUrl = badge.badgeUrl.replace(/\/badge\/.*$/, '');
66
+ output.info(` <a href="${baseUrl}/projects/${projectId}"><img src="${badge.badgeUrl}" alt="Bellwether"></a>`);
67
+ output.info('');
68
+ }
69
+ catch (error) {
70
+ output.error('Failed to get badge info: ' + (error instanceof Error ? error.message : String(error)));
71
+ process.exit(EXIT_CODES.ERROR);
72
+ }
73
+ });
74
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Diff command for comparing specific versions.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const diffCommand: Command;
6
+ //# sourceMappingURL=diff.d.ts.map
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Diff command for comparing specific versions.
3
+ */
4
+ import { Command } from 'commander';
5
+ import { EXIT_CODES } from '../../../constants.js';
6
+ import { loadConfigOrExit, getSessionTokenOrExit, createAuthenticatedClient, resolveProjectId } from './shared.js';
7
+ import * as output from '../../output.js';
8
+ export const diffCommand = new Command('diff')
9
+ .description('Compare two baseline versions')
10
+ .argument('<from>', 'From version number')
11
+ .argument('<to>', 'To version number')
12
+ .option('-c, --config <path>', 'Path to config file')
13
+ .option('-p, --project <id>', 'Project ID (uses linked project if not specified)')
14
+ .option('--json', 'Output as JSON')
15
+ .option('--session <session>', 'Session token (overrides stored/env session)')
16
+ .action(async (fromArg, toArg, options) => {
17
+ const config = loadConfigOrExit(options.config);
18
+ // Get session
19
+ const sessionToken = getSessionTokenOrExit(options.session);
20
+ // Determine project ID
21
+ const projectId = resolveProjectId(undefined, options.project);
22
+ if (!projectId) {
23
+ output.error('No project specified. Use --project <id> or run `bellwether link`.');
24
+ process.exit(EXIT_CODES.ERROR);
25
+ }
26
+ // Parse versions
27
+ const fromVersion = parseInt(fromArg, 10);
28
+ const toVersion = parseInt(toArg, 10);
29
+ if (isNaN(fromVersion) || isNaN(toVersion)) {
30
+ output.error('Invalid version numbers. Provide integers (e.g., `bellwether diff 1 2`).');
31
+ process.exit(EXIT_CODES.ERROR);
32
+ }
33
+ // Create client and fetch diff
34
+ const client = createAuthenticatedClient(sessionToken);
35
+ try {
36
+ const diff = await client.getDiff(projectId, fromVersion, toVersion);
37
+ const outputJson = options.json ? true : config.history.json;
38
+ if (outputJson) {
39
+ output.info(JSON.stringify(diff, null, 2));
40
+ return;
41
+ }
42
+ output.info(`Comparing v${fromVersion} → v${toVersion}\n`);
43
+ const severityIcon = {
44
+ none: '✓',
45
+ info: 'ℹ',
46
+ warning: '⚠',
47
+ breaking: '✗',
48
+ };
49
+ output.info(`Severity: ${severityIcon[diff.severity] ?? '?'} ${diff.severity.toUpperCase()}`);
50
+ output.info('');
51
+ if (diff.toolsAdded > 0) {
52
+ output.info(`Tools added: +${diff.toolsAdded}`);
53
+ }
54
+ if (diff.toolsRemoved > 0) {
55
+ output.info(`Tools removed: -${diff.toolsRemoved}`);
56
+ }
57
+ if (diff.toolsModified > 0) {
58
+ output.info(`Tools modified: ~${diff.toolsModified}`);
59
+ }
60
+ if (diff.behaviorChanges > 0) {
61
+ output.info(`Behavior changes: ${diff.behaviorChanges}`);
62
+ }
63
+ if (diff.toolsAdded === 0 &&
64
+ diff.toolsRemoved === 0 &&
65
+ diff.toolsModified === 0 &&
66
+ diff.behaviorChanges === 0) {
67
+ output.info('No changes detected between these versions.');
68
+ }
69
+ if (diff.severity === 'breaking') {
70
+ output.info('\n⚠️ Breaking changes detected!');
71
+ output.info(' Tools were removed or modified in incompatible ways.');
72
+ }
73
+ }
74
+ catch (error) {
75
+ output.error('Failed to fetch diff: ' + (error instanceof Error ? error.message : String(error)));
76
+ process.exit(EXIT_CODES.ERROR);
77
+ }
78
+ });
79
+ //# sourceMappingURL=diff.js.map
@@ -0,0 +1,6 @@
1
+ /**
2
+ * History command for viewing baseline history in Bellwether Cloud.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const historyCommand: Command;
6
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1,102 @@
1
+ /**
2
+ * History command for viewing baseline history in Bellwether Cloud.
3
+ */
4
+ import { Command } from 'commander';
5
+ import { formatDateLocale } from '../../../utils/index.js';
6
+ import { EXIT_CODES } from '../../../constants.js';
7
+ import { getSeverityIcon } from '../../output.js';
8
+ import { loadConfigOrExit, getSessionTokenOrExit, createAuthenticatedClient, resolveProjectId } from './shared.js';
9
+ import * as output from '../../output.js';
10
+ export const historyCommand = new Command('history')
11
+ .description('View baseline history for a project')
12
+ .argument('[project-id]', 'Project ID (uses linked project if not specified)')
13
+ .option('-c, --config <path>', 'Path to config file')
14
+ .option('-n, --limit <n>', 'Number of versions to show')
15
+ .option('--json', 'Output as JSON')
16
+ .option('--session <session>', 'Session token (overrides stored/env session)')
17
+ .action(async (projectIdArg, options) => {
18
+ const config = loadConfigOrExit(options.config);
19
+ // Get session
20
+ const sessionToken = getSessionTokenOrExit(options.session);
21
+ // Determine project ID
22
+ const projectId = resolveProjectId(projectIdArg);
23
+ if (!projectId) {
24
+ output.error('No project specified.');
25
+ output.error('\nEither:');
26
+ output.error(' - Provide a project ID as argument');
27
+ output.error(' - Run `bellwether link` to link this directory to a project');
28
+ process.exit(EXIT_CODES.ERROR);
29
+ }
30
+ // Create client and fetch history
31
+ const client = createAuthenticatedClient(sessionToken);
32
+ const limit = parseInt(options.limit ?? String(config.history.limit), 10);
33
+ try {
34
+ const history = await client.getHistory(projectId, limit);
35
+ const outputJson = options.json ? true : config.history.json;
36
+ if (outputJson) {
37
+ output.info(JSON.stringify(history, null, 2));
38
+ return;
39
+ }
40
+ if (history.length === 0) {
41
+ output.info('No baselines uploaded yet.');
42
+ output.info('\nRun `bellwether check <server> --save-baseline` then `bellwether upload`.');
43
+ return;
44
+ }
45
+ // Get project info for display
46
+ const project = await client.getProject(projectId);
47
+ const projectName = project?.name ?? projectId;
48
+ output.info(`Baseline History: ${projectName}`);
49
+ output.info(`Showing ${history.length} version(s)\n`);
50
+ output.info('Ver Uploaded CLI Version Hash');
51
+ output.info('─── ─────────────────────── ─────────── ────────────────');
52
+ for (const baseline of history) {
53
+ const date = formatDateLocale(baseline.uploadedAt);
54
+ const cliVersion = baseline.cliVersion.padEnd(11);
55
+ const hash = baseline.hash.slice(0, 16);
56
+ output.info(`${baseline.version.toString().padStart(3)} ` +
57
+ `${date.padEnd(23)} ` +
58
+ `${cliVersion} ` +
59
+ hash);
60
+ }
61
+ // Show diff summary if multiple versions
62
+ if (history.length >= 2) {
63
+ output.info('\nLatest changes:');
64
+ try {
65
+ const diff = await client.getLatestDiff(projectId);
66
+ if (diff) {
67
+ printDiffSummary(diff);
68
+ }
69
+ }
70
+ catch {
71
+ // Diff failed, just skip
72
+ }
73
+ }
74
+ }
75
+ catch (error) {
76
+ output.error('Failed to fetch history: ' + (error instanceof Error ? error.message : String(error)));
77
+ process.exit(EXIT_CODES.ERROR);
78
+ }
79
+ });
80
+ function printDiffSummary(diff) {
81
+ const parts = [];
82
+ if (diff.toolsAdded > 0) {
83
+ parts.push(`+${diff.toolsAdded} tools`);
84
+ }
85
+ if (diff.toolsRemoved > 0) {
86
+ parts.push(`-${diff.toolsRemoved} tools`);
87
+ }
88
+ if (diff.toolsModified > 0) {
89
+ parts.push(`~${diff.toolsModified} modified`);
90
+ }
91
+ if (diff.behaviorChanges > 0) {
92
+ parts.push(`${diff.behaviorChanges} behavior changes`);
93
+ }
94
+ if (parts.length === 0) {
95
+ output.info(' No changes from previous version');
96
+ }
97
+ else {
98
+ const icon = getSeverityIcon(diff.severity);
99
+ output.info(` ${icon} ${diff.severity}: ${parts.join(', ')}`);
100
+ }
101
+ }
102
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Link command for connecting current directory to a Bellwether Cloud project.
3
+ */
4
+ import { Command } from 'commander';
5
+ export declare const linkCommand: Command;
6
+ /**
7
+ * Projects command for listing projects.
8
+ */
9
+ //# sourceMappingURL=link.d.ts.map
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Link command for connecting current directory to a Bellwether Cloud project.
3
+ */
4
+ import { Command } from 'commander';
5
+ import { basename } from 'path';
6
+ import { getLinkedProject, saveProjectLink, removeProjectLink, getActiveTeam, getTeamId, } from '../../../cloud/auth.js';
7
+ import { EXIT_CODES } from '../../../constants.js';
8
+ import { loadConfigOrExit, getSessionTokenOrExit, createAuthenticatedClient } from './shared.js';
9
+ import * as output from '../../output.js';
10
+ export const linkCommand = new Command('link')
11
+ .description('Link current directory to a Bellwether Cloud project')
12
+ .argument('[project-id]', 'Project ID to link to (creates new if not specified)')
13
+ .option('-n, --name <name>', 'Project name (for new projects)')
14
+ .option('-c, --command <cmd>', 'Server command (for new projects)')
15
+ .option('--config <path>', 'Path to config file')
16
+ .option('--unlink', 'Remove the project link from current directory')
17
+ .option('--status', 'Show current link status')
18
+ .action(async (projectIdArg, options) => {
19
+ const config = loadConfigOrExit(options.config);
20
+ // Handle --status
21
+ if (options.status) {
22
+ showLinkStatus();
23
+ return;
24
+ }
25
+ // Handle --unlink
26
+ if (options.unlink) {
27
+ if (removeProjectLink()) {
28
+ output.info('Project link removed.');
29
+ }
30
+ else {
31
+ output.info('No project link to remove.');
32
+ }
33
+ return;
34
+ }
35
+ // Check authentication
36
+ const sessionToken = getSessionTokenOrExit();
37
+ const client = createAuthenticatedClient(sessionToken);
38
+ let project;
39
+ if (projectIdArg) {
40
+ // Link to existing project
41
+ output.info(`Looking up project ${projectIdArg}...`);
42
+ project = await client.getProject(projectIdArg);
43
+ if (!project) {
44
+ output.error(`Project not found: ${projectIdArg}`);
45
+ output.error('\nUse `bellwether link` without an ID to create a new project.');
46
+ process.exit(EXIT_CODES.ERROR);
47
+ }
48
+ output.info(`Found project: ${project.name}`);
49
+ }
50
+ else {
51
+ // Create new project
52
+ const projectName = options.name ?? inferProjectName();
53
+ const serverCommand = options.command ?? config.link.defaultServerCommand;
54
+ output.info(`Creating project "${projectName}"...`);
55
+ try {
56
+ project = await client.createProject(projectName, serverCommand);
57
+ output.info(`Project created: ${project.id}`);
58
+ }
59
+ catch (error) {
60
+ output.error('Failed to create project: ' + (error instanceof Error ? error.message : String(error)));
61
+ process.exit(EXIT_CODES.ERROR);
62
+ }
63
+ }
64
+ // Get active team for the link
65
+ const activeTeam = getActiveTeam();
66
+ const teamId = getTeamId();
67
+ // Save link with team context
68
+ const link = {
69
+ projectId: project.id,
70
+ projectName: project.name,
71
+ linkedAt: new Date().toISOString(),
72
+ teamId,
73
+ teamName: activeTeam?.name,
74
+ };
75
+ saveProjectLink(link);
76
+ output.info(`\nLinked to project: ${project.name}`);
77
+ output.info(`Project ID: ${project.id}`);
78
+ if (activeTeam) {
79
+ output.info(`Team: ${activeTeam.name}`);
80
+ }
81
+ output.info(`Server command: ${project.serverCommand}`);
82
+ output.info('\nSaved to .bellwether/link.json');
83
+ output.info('\nYou can now run:');
84
+ output.info(' bellwether check <server> --save-baseline');
85
+ output.info(' bellwether upload');
86
+ });
87
+ /**
88
+ * Infer project name from current directory.
89
+ */
90
+ function inferProjectName() {
91
+ return basename(process.cwd());
92
+ }
93
+ /**
94
+ * Show current link status.
95
+ */
96
+ function showLinkStatus() {
97
+ const link = getLinkedProject();
98
+ if (!link) {
99
+ output.info('Not linked to any project.');
100
+ output.info('\nRun `bellwether link` to create or link to a project.');
101
+ return;
102
+ }
103
+ output.info('Project Link Status');
104
+ output.info('───────────────────');
105
+ output.info(`Project: ${link.projectName}`);
106
+ output.info(`ID: ${link.projectId}`);
107
+ if (link.teamName) {
108
+ output.info(`Team: ${link.teamName}`);
109
+ }
110
+ if (link.teamId) {
111
+ output.info(`Team ID: ${link.teamId}`);
112
+ }
113
+ output.info(`Linked: ${new Date(link.linkedAt).toLocaleString()}`);
114
+ output.info(`Config: .bellwether/link.json`);
115
+ }
116
+ /**
117
+ * Projects command for listing projects.
118
+ */
119
+ //# sourceMappingURL=link.js.map
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Login command for Bellwether Cloud authentication using OAuth.
3
+ * Supports GitHub and Google as authentication providers.
4
+ */
5
+ import { Command } from 'commander';
6
+ export declare const loginCommand: Command;
7
+ //# sourceMappingURL=login.d.ts.map