@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,197 @@
1
+ /**
2
+ * Baseline format migrations.
3
+ *
4
+ * This module handles upgrading baselines from older CLI versions to the current version.
5
+ * Migrations are triggered when the CLI major version changes.
6
+ *
7
+ * Migration Strategy:
8
+ * - Migrations are keyed by their TARGET major version
9
+ * - Each migration upgrades from the previous major version
10
+ * - Migrations are applied sequentially in version order
11
+ * - Downgrading is not supported
12
+ */
13
+ import { VERSION } from '../version.js';
14
+ import { parseVersion, compareVersions } from './version.js';
15
+ /**
16
+ * Registry of migrations keyed by target major version.
17
+ *
18
+ * When adding a new migration for CLI v2.0.0:
19
+ * 1. Add an entry with '2' as the key (major version)
20
+ * 2. Implement the migration function to transform from v1.x to v2.x format
21
+ *
22
+ * Example for future migration from v1.x to v2.0.0:
23
+ *
24
+ * '2': (baseline) => {
25
+ * return {
26
+ * ...baseline,
27
+ * version: '2.0.0',
28
+ * // Add new required fields with defaults
29
+ * newField: baseline.newField ?? 'default',
30
+ * // Transform renamed fields
31
+ * renamedField: baseline.oldFieldName,
32
+ * // Remove deprecated fields (just don't include them)
33
+ * };
34
+ * },
35
+ */
36
+ const MIGRATIONS = {
37
+ // Migration from legacy format version "1.0.0" to CLI version format
38
+ // This handles baselines created before the versioning simplification
39
+ '0': (baseline) => {
40
+ const version = baseline.version;
41
+ // If version looks like old format version (1.0.0), convert to CLI version
42
+ if (version === '1.0.0' || version === '1.0' || version === 1) {
43
+ return {
44
+ ...baseline,
45
+ version: VERSION, // Use current CLI version
46
+ };
47
+ }
48
+ return baseline;
49
+ },
50
+ // Future migrations would be added here when CLI major version changes:
51
+ // '1': (baseline) => { ... }, // Migrates v0.x baselines to v1.x format
52
+ // '2': (baseline) => { ... }, // Migrates v1.x baselines to v2.x format
53
+ };
54
+ /**
55
+ * Get the current CLI major version.
56
+ */
57
+ function getCurrentMajorVersion() {
58
+ return parseVersion(VERSION).major;
59
+ }
60
+ /**
61
+ * Check if a version is the legacy format version (before CLI version was used).
62
+ * Legacy format versions were "1.0.0", "1.0", or numeric 1.
63
+ * These need special handling because they're not CLI versions.
64
+ */
65
+ function isLegacyFormatVersion(version) {
66
+ return version === '1.0.0' || version === '1.0' || version === 1;
67
+ }
68
+ /**
69
+ * Check if a baseline can be migrated to the current CLI version.
70
+ *
71
+ * Migration is possible if:
72
+ * - Source version has a different major version than current
73
+ * - A migration path exists
74
+ *
75
+ * @param fromVersion - Source version (string, number, or undefined)
76
+ * @returns true if migration is possible
77
+ */
78
+ export function canMigrate(fromVersion) {
79
+ const from = parseVersion(fromVersion);
80
+ const currentMajor = getCurrentMajorVersion();
81
+ // Same major version - no migration needed
82
+ if (from.major === currentMajor) {
83
+ return true;
84
+ }
85
+ // Check if we have a migration for the current major version
86
+ return MIGRATIONS[String(currentMajor)] !== undefined;
87
+ }
88
+ /**
89
+ * Get the list of migrations that would be applied.
90
+ *
91
+ * @param fromVersion - Source version
92
+ * @returns Array of major version strings for migrations that would be applied
93
+ */
94
+ export function getMigrationsToApply(fromVersion) {
95
+ const currentMajor = getCurrentMajorVersion();
96
+ // Legacy format version needs the '0' migration
97
+ if (isLegacyFormatVersion(fromVersion)) {
98
+ return MIGRATIONS['0'] ? ['0'] : [];
99
+ }
100
+ const from = parseVersion(fromVersion);
101
+ // Same major version - no migrations needed
102
+ if (from.major === currentMajor) {
103
+ return [];
104
+ }
105
+ // Return migrations from source major to current major
106
+ const toApply = [];
107
+ for (let major = from.major; major <= currentMajor; major++) {
108
+ if (MIGRATIONS[String(major)]) {
109
+ toApply.push(String(major));
110
+ }
111
+ }
112
+ return toApply;
113
+ }
114
+ /**
115
+ * Migrate a baseline to the current CLI version format.
116
+ *
117
+ * @param baseline - The baseline object to migrate (can be any version)
118
+ * @returns Migrated baseline conforming to BehavioralBaseline interface
119
+ * @throws Error if migration is not possible (e.g., downgrade attempt)
120
+ */
121
+ export function migrateBaseline(baseline) {
122
+ const sourceVersion = baseline.version;
123
+ const current = parseVersion(VERSION);
124
+ // Handle legacy format version specially (not a real CLI version)
125
+ if (isLegacyFormatVersion(sourceVersion)) {
126
+ let migrated = { ...baseline };
127
+ const migration = MIGRATIONS['0'];
128
+ if (migration) {
129
+ migrated = migration(migrated);
130
+ }
131
+ migrated.version = VERSION;
132
+ return migrated;
133
+ }
134
+ const from = parseVersion(sourceVersion);
135
+ // Already at current version
136
+ if (compareVersions(from, current) === 0) {
137
+ return baseline;
138
+ }
139
+ // Same major version - just update the version string
140
+ if (from.major === current.major) {
141
+ return {
142
+ ...baseline,
143
+ version: VERSION,
144
+ };
145
+ }
146
+ // Cannot downgrade (only applies to actual CLI versions, not legacy format)
147
+ if (from.major > current.major) {
148
+ throw new Error(`Cannot downgrade baseline from v${from.raw} to v${current.raw}. ` +
149
+ `Downgrading baselines is not supported.`);
150
+ }
151
+ // Apply migrations
152
+ let migrated = { ...baseline };
153
+ const migrationsToApply = getMigrationsToApply(sourceVersion);
154
+ for (const majorVersion of migrationsToApply) {
155
+ const migration = MIGRATIONS[majorVersion];
156
+ if (migration) {
157
+ migrated = migration(migrated);
158
+ }
159
+ }
160
+ // Ensure version is set to current CLI version
161
+ migrated.version = VERSION;
162
+ return migrated;
163
+ }
164
+ /**
165
+ * Check if a baseline needs migration.
166
+ *
167
+ * @param baseline - The baseline to check
168
+ * @returns true if the baseline major version differs from current CLI major version
169
+ */
170
+ export function needsMigration(baseline) {
171
+ const version = baseline.version;
172
+ const from = parseVersion(version);
173
+ const currentMajor = getCurrentMajorVersion();
174
+ // Check for legacy format version (1.0.0) which needs migration to CLI version
175
+ if (version === '1.0.0' || version === '1.0' || version === 1) {
176
+ return true;
177
+ }
178
+ return from.major !== currentMajor;
179
+ }
180
+ /**
181
+ * Get information about what migrations would be applied.
182
+ *
183
+ * @param baseline - The baseline to analyze
184
+ * @returns Object with migration details
185
+ */
186
+ export function getMigrationInfo(baseline) {
187
+ const version = baseline.version;
188
+ const from = parseVersion(version);
189
+ return {
190
+ currentVersion: from.raw,
191
+ targetVersion: VERSION,
192
+ needsMigration: needsMigration(baseline),
193
+ migrationsToApply: getMigrationsToApply(version),
194
+ canMigrate: canMigrate(version),
195
+ };
196
+ }
197
+ //# sourceMappingURL=migrations.js.map
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Performance Regression Detection
3
+ *
4
+ * Tracks response times across tool executions and detects performance regressions.
5
+ * Provides percentile-based metrics (p50, p95, p99) for comprehensive latency analysis.
6
+ */
7
+ import type { BehavioralBaseline, ChangeSeverity, PerformanceConfidence } from './types.js';
8
+ /**
9
+ * Latency trend direction.
10
+ */
11
+ export type LatencyTrend = 'improving' | 'stable' | 'degrading';
12
+ /**
13
+ * Performance metrics for a single tool.
14
+ */
15
+ export interface ToolPerformanceMetrics {
16
+ /** Tool name */
17
+ toolName: string;
18
+ /** 50th percentile latency in milliseconds */
19
+ p50Ms: number;
20
+ /** 95th percentile latency in milliseconds */
21
+ p95Ms: number;
22
+ /** 99th percentile latency in milliseconds */
23
+ p99Ms: number;
24
+ /** Success rate (0-1) */
25
+ successRate: number;
26
+ /** Total number of executions */
27
+ sampleCount: number;
28
+ /** Average latency in milliseconds */
29
+ avgMs: number;
30
+ /** Minimum latency in milliseconds */
31
+ minMs: number;
32
+ /** Maximum latency in milliseconds */
33
+ maxMs: number;
34
+ /** Standard deviation of latency */
35
+ stdDevMs: number;
36
+ /** Timestamp of when metrics were collected */
37
+ collectedAt: Date;
38
+ /** Statistical confidence metrics */
39
+ confidence?: PerformanceConfidence;
40
+ }
41
+ /**
42
+ * Performance baseline for a tool (stored in baseline file).
43
+ */
44
+ export interface PerformanceBaseline {
45
+ /** Tool name */
46
+ toolName: string;
47
+ /** Baseline 50th percentile latency */
48
+ baselineP50: number;
49
+ /** Baseline 95th percentile latency */
50
+ baselineP95: number;
51
+ /** Baseline 99th percentile latency */
52
+ baselineP99: number;
53
+ /** Baseline success rate */
54
+ baselineSuccessRate: number;
55
+ /** Maximum allowed regression percentage (default from config) */
56
+ maxAllowedRegression: number;
57
+ /** When the baseline was established */
58
+ establishedAt: Date;
59
+ }
60
+ /**
61
+ * Performance comparison result for a single tool.
62
+ */
63
+ export interface PerformanceComparison {
64
+ /** Tool name */
65
+ toolName: string;
66
+ /** Current metrics */
67
+ current: ToolPerformanceMetrics;
68
+ /** Baseline metrics (if available) */
69
+ baseline?: PerformanceBaseline;
70
+ /** Latency trend */
71
+ trend: LatencyTrend;
72
+ /** Regression percentage for p50 (positive = slower, negative = faster) */
73
+ p50RegressionPercent: number | null;
74
+ /** Regression percentage for p95 */
75
+ p95RegressionPercent: number | null;
76
+ /** Regression percentage for p99 */
77
+ p99RegressionPercent: number | null;
78
+ /** Whether this tool has regressed beyond threshold */
79
+ hasRegression: boolean;
80
+ /** Severity of the regression */
81
+ severity: ChangeSeverity;
82
+ /** Human-readable summary */
83
+ summary: string;
84
+ /** Current confidence level */
85
+ confidence?: PerformanceConfidence;
86
+ /** Whether the regression is statistically reliable (based on confidence) */
87
+ isReliable: boolean;
88
+ }
89
+ /**
90
+ * Overall performance report for a baseline comparison.
91
+ */
92
+ export interface PerformanceReport {
93
+ /** Individual tool comparisons */
94
+ toolComparisons: PerformanceComparison[];
95
+ /** Number of tools with performance regressions */
96
+ regressionCount: number;
97
+ /** Number of tools with improved performance */
98
+ improvementCount: number;
99
+ /** Number of tools with stable performance */
100
+ stableCount: number;
101
+ /** Overall performance trend */
102
+ overallTrend: LatencyTrend;
103
+ /** Overall severity */
104
+ overallSeverity: ChangeSeverity;
105
+ /** Human-readable summary */
106
+ summary: string;
107
+ /** Number of tools with low confidence */
108
+ lowConfidenceCount: number;
109
+ /** Tools with low confidence (names) */
110
+ lowConfidenceTools: string[];
111
+ /** Number of reliable regressions (regressions with good confidence) */
112
+ reliableRegressionCount: number;
113
+ }
114
+ /**
115
+ * Raw latency sample for calculating metrics.
116
+ */
117
+ export interface LatencySample {
118
+ toolName: string;
119
+ durationMs: number;
120
+ success: boolean;
121
+ timestamp: Date;
122
+ /**
123
+ * Expected outcome of this test.
124
+ * - 'success': Happy path test, expects tool to succeed
125
+ * - 'error': Validation test, expects tool to reject/fail
126
+ * - 'either': Edge case, either outcome is acceptable
127
+ */
128
+ expectedOutcome?: 'success' | 'error' | 'either';
129
+ /**
130
+ * Whether the outcome was correct based on expectations.
131
+ * True if: (expected success && got success) OR (expected error && got error)
132
+ */
133
+ outcomeCorrect?: boolean;
134
+ }
135
+ export { PERFORMANCE_TRACKING as PERFORMANCE } from '../constants.js';
136
+ /**
137
+ * Calculate statistical confidence for performance metrics.
138
+ *
139
+ * Confidence is determined by:
140
+ * 1. Sample count - more samples = higher confidence
141
+ * 2. Coefficient of variation (CV) - lower variability = higher confidence
142
+ *
143
+ * Key insight: For confidence calculation, we only count happy_path tests that
144
+ * expect success. Validation tests (expectedOutcome: 'error') are tracked
145
+ * separately because their failure doesn't indicate tool problems.
146
+ *
147
+ * Note: The first sample is excluded from variance calculation because it includes
148
+ * cold-start overhead (JIT compilation, connection establishment, cache warming).
149
+ * This gives more accurate confidence scores for steady-state performance.
150
+ *
151
+ * @param samples - The latency samples to analyze
152
+ * @param options - Optional configuration
153
+ * @returns Performance confidence metrics
154
+ */
155
+ export declare function calculatePerformanceConfidence(samples: LatencySample[], options?: {
156
+ excludeWarmup?: boolean;
157
+ }): PerformanceConfidence;
158
+ /**
159
+ * Calculate performance confidence from ToolPerformanceMetrics.
160
+ * Use this when you already have calculated metrics but need confidence.
161
+ *
162
+ * Note: This function assumes the metrics are from happy path tests only.
163
+ * For full validation/success separation, use calculatePerformanceConfidence with raw samples.
164
+ */
165
+ export declare function calculateConfidenceFromMetrics(metrics: ToolPerformanceMetrics, options?: {
166
+ validationSamples?: number;
167
+ totalTests?: number;
168
+ }): PerformanceConfidence;
169
+ /**
170
+ * Format confidence level for display.
171
+ */
172
+ export declare function formatConfidenceLevel(confidence: PerformanceConfidence, includeIndicator?: boolean): string;
173
+ /**
174
+ * Check if performance data has sufficient confidence for reliable comparisons.
175
+ */
176
+ export declare function hasReliableConfidence(confidence: PerformanceConfidence): boolean;
177
+ /**
178
+ * Calculate performance metrics from raw latency samples.
179
+ */
180
+ export declare function calculateMetrics(samples: LatencySample[]): ToolPerformanceMetrics | null;
181
+ /**
182
+ * Create a performance baseline from metrics.
183
+ */
184
+ export declare function createPerformanceBaseline(metrics: ToolPerformanceMetrics, maxAllowedRegression?: number): PerformanceBaseline;
185
+ /**
186
+ * Extract performance baselines from a behavioral baseline.
187
+ * Uses the performance metrics stored in tool fingerprints.
188
+ */
189
+ export declare function extractPerformanceBaselines(baseline: BehavioralBaseline, regressionThreshold?: number): Map<string, PerformanceBaseline>;
190
+ /**
191
+ * Compare current metrics against baseline.
192
+ */
193
+ export declare function comparePerformance(current: ToolPerformanceMetrics, baseline: PerformanceBaseline | undefined, regressionThreshold?: number): PerformanceComparison;
194
+ /**
195
+ * Generate a complete performance report comparing current and baseline.
196
+ */
197
+ export declare function generatePerformanceReport(currentMetrics: Map<string, ToolPerformanceMetrics>, baselines: Map<string, PerformanceBaseline>, regressionThreshold?: number): PerformanceReport;
198
+ /**
199
+ * Format performance metrics for display.
200
+ */
201
+ export declare function formatMetrics(metrics: ToolPerformanceMetrics): string;
202
+ /**
203
+ * Format performance comparison for display.
204
+ */
205
+ export declare function formatComparison(comparison: PerformanceComparison): string;
206
+ /**
207
+ * Check if metrics indicate acceptable performance.
208
+ */
209
+ export declare function isPerformanceAcceptable(comparison: PerformanceComparison, failOnRegression?: boolean): boolean;
210
+ /**
211
+ * Aggregate multiple samples into metrics grouped by tool.
212
+ */
213
+ export declare function aggregateSamplesByTool(samples: LatencySample[]): Map<string, ToolPerformanceMetrics>;
214
+ //# sourceMappingURL=performance-tracker.d.ts.map