@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,322 @@
1
+ /**
2
+ * Deprecation Lifecycle Management
3
+ *
4
+ * Tracks tool deprecation status and warns consumers about deprecated tools.
5
+ * Supports grace periods, replacement suggestions, and removal date enforcement.
6
+ */
7
+ import { DEPRECATION } from '../constants.js';
8
+ // Re-export centralized constant for backwards compatibility
9
+ export { DEPRECATION } from '../constants.js';
10
+ /**
11
+ * Default deprecation configuration.
12
+ * Uses values from centralized constants.
13
+ */
14
+ export const DEPRECATION_DEFAULTS = {
15
+ warnOnUsage: DEPRECATION.DEFAULTS.warnOnUsage,
16
+ failOnExpired: DEPRECATION.DEFAULTS.failOnExpired,
17
+ gracePeriodDays: DEPRECATION.DEFAULTS.gracePeriodDays,
18
+ deprecatedSeverity: 'warning',
19
+ expiredSeverity: 'breaking',
20
+ };
21
+ /**
22
+ * Days thresholds for warning levels.
23
+ * Uses values from centralized constants.
24
+ */
25
+ export const DEPRECATION_THRESHOLDS = {
26
+ /** Warn about upcoming removal within this many days */
27
+ UPCOMING_REMOVAL_DAYS: DEPRECATION.THRESHOLDS.upcomingRemovalDays,
28
+ /** Critical warning within this many days */
29
+ CRITICAL_REMOVAL_DAYS: DEPRECATION.THRESHOLDS.criticalRemovalDays,
30
+ };
31
+ /**
32
+ * Check all tools in a baseline for deprecation issues.
33
+ */
34
+ export function checkDeprecations(baseline, config = {}) {
35
+ const fullConfig = { ...DEPRECATION_DEFAULTS, ...config };
36
+ const warnings = [];
37
+ let deprecatedCount = 0;
38
+ let expiredCount = 0;
39
+ let gracePeriodCount = 0;
40
+ const now = new Date();
41
+ for (const tool of baseline.tools) {
42
+ const warning = checkToolDeprecation(tool, now, fullConfig);
43
+ if (warning) {
44
+ warnings.push(warning);
45
+ if (warning.status === 'removed' || warning.isPastRemoval) {
46
+ expiredCount++;
47
+ }
48
+ else if (warning.status === 'deprecated') {
49
+ deprecatedCount++;
50
+ }
51
+ if (warning.isInGracePeriod) {
52
+ gracePeriodCount++;
53
+ }
54
+ }
55
+ }
56
+ // Determine overall severity
57
+ const overallSeverity = determineOverallSeverity(warnings);
58
+ // Generate summary
59
+ const summary = generateDeprecationSummary(warnings, deprecatedCount, expiredCount, gracePeriodCount);
60
+ return {
61
+ warnings,
62
+ deprecatedCount,
63
+ expiredCount,
64
+ gracePeriodCount,
65
+ overallSeverity,
66
+ summary,
67
+ hasCriticalIssues: expiredCount > 0,
68
+ };
69
+ }
70
+ /**
71
+ * Check a single tool for deprecation issues.
72
+ */
73
+ export function checkToolDeprecation(tool, now = new Date(), config = DEPRECATION_DEFAULTS) {
74
+ // Not deprecated - no warning
75
+ if (!tool.deprecated) {
76
+ return null;
77
+ }
78
+ // Calculate days until removal (if removal date is set)
79
+ let daysUntilRemoval;
80
+ let isPastRemoval = false;
81
+ let isInGracePeriod = false;
82
+ if (tool.removalDate) {
83
+ const removalDate = new Date(tool.removalDate);
84
+ const diffMs = removalDate.getTime() - now.getTime();
85
+ daysUntilRemoval = Math.ceil(diffMs / (1000 * 60 * 60 * 24));
86
+ isPastRemoval = daysUntilRemoval < 0;
87
+ // Check grace period
88
+ if (isPastRemoval) {
89
+ const daysPastRemoval = Math.abs(daysUntilRemoval);
90
+ isInGracePeriod = daysPastRemoval <= config.gracePeriodDays;
91
+ }
92
+ }
93
+ // Determine status
94
+ let status = 'deprecated';
95
+ if (isPastRemoval && !isInGracePeriod) {
96
+ status = 'removed';
97
+ }
98
+ else if (isPastRemoval && isInGracePeriod) {
99
+ status = 'sunset';
100
+ }
101
+ // Determine severity
102
+ let severity = config.deprecatedSeverity;
103
+ if (status === 'removed') {
104
+ severity = config.expiredSeverity;
105
+ }
106
+ else if (status === 'sunset') {
107
+ severity = 'warning';
108
+ }
109
+ else if (daysUntilRemoval !== undefined && daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS) {
110
+ severity = 'breaking';
111
+ }
112
+ // Generate message
113
+ const message = generateDeprecationMessage(tool, status, daysUntilRemoval);
114
+ return {
115
+ toolName: tool.name,
116
+ status,
117
+ severity,
118
+ message,
119
+ deprecatedAt: tool.deprecatedAt ? new Date(tool.deprecatedAt) : undefined,
120
+ removalDate: tool.removalDate ? new Date(tool.removalDate) : undefined,
121
+ daysUntilRemoval,
122
+ replacementTool: tool.replacementTool,
123
+ deprecationNotice: tool.deprecationNotice,
124
+ isPastRemoval,
125
+ isInGracePeriod,
126
+ };
127
+ }
128
+ /**
129
+ * Mark a tool as deprecated.
130
+ */
131
+ export function markAsDeprecated(tool, options = {}) {
132
+ return {
133
+ ...tool,
134
+ deprecated: true,
135
+ deprecatedAt: new Date(),
136
+ deprecationNotice: options.notice,
137
+ removalDate: options.removalDate,
138
+ replacementTool: options.replacementTool,
139
+ };
140
+ }
141
+ /**
142
+ * Clear deprecation status from a tool.
143
+ */
144
+ export function clearDeprecation(tool) {
145
+ const { deprecated: _, deprecatedAt: _1, deprecationNotice: _2, removalDate: _3, replacementTool: _4, ...rest } = tool;
146
+ void [_, _1, _2, _3, _4]; // Explicitly discard unused variables
147
+ return rest;
148
+ }
149
+ /**
150
+ * Generate deprecation message for a tool.
151
+ */
152
+ function generateDeprecationMessage(tool, status, daysUntilRemoval) {
153
+ const parts = [];
154
+ switch (status) {
155
+ case 'removed':
156
+ parts.push(`Tool "${tool.name}" has been REMOVED and is past its removal date.`);
157
+ break;
158
+ case 'sunset':
159
+ parts.push(`Tool "${tool.name}" is in SUNSET phase (grace period).`);
160
+ if (daysUntilRemoval !== undefined) {
161
+ parts.push(`Removal date was ${Math.abs(daysUntilRemoval)} day(s) ago.`);
162
+ }
163
+ break;
164
+ case 'deprecated':
165
+ parts.push(`Tool "${tool.name}" is DEPRECATED.`);
166
+ if (daysUntilRemoval !== undefined) {
167
+ if (daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS) {
168
+ parts.push(`CRITICAL: Will be removed in ${daysUntilRemoval} day(s)!`);
169
+ }
170
+ else if (daysUntilRemoval <= DEPRECATION_THRESHOLDS.UPCOMING_REMOVAL_DAYS) {
171
+ parts.push(`Will be removed in ${daysUntilRemoval} day(s).`);
172
+ }
173
+ else {
174
+ parts.push(`Scheduled for removal on ${tool.removalDate}.`);
175
+ }
176
+ }
177
+ break;
178
+ }
179
+ // Add notice if available
180
+ if (tool.deprecationNotice) {
181
+ parts.push(`Notice: ${tool.deprecationNotice}`);
182
+ }
183
+ // Add replacement suggestion
184
+ if (tool.replacementTool) {
185
+ parts.push(`Use "${tool.replacementTool}" instead.`);
186
+ }
187
+ return parts.join(' ');
188
+ }
189
+ /**
190
+ * Determine overall severity from warnings.
191
+ */
192
+ function determineOverallSeverity(warnings) {
193
+ if (warnings.length === 0) {
194
+ return 'none';
195
+ }
196
+ // Check for any critical issues (removed tools)
197
+ if (warnings.some(w => w.status === 'removed')) {
198
+ return 'breaking';
199
+ }
200
+ // Check for sunset tools
201
+ if (warnings.some(w => w.status === 'sunset')) {
202
+ return 'warning';
203
+ }
204
+ // Check for upcoming critical removals
205
+ if (warnings.some(w => w.daysUntilRemoval !== undefined && w.daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS)) {
206
+ return 'breaking';
207
+ }
208
+ // All deprecated tools
209
+ return 'warning';
210
+ }
211
+ /**
212
+ * Generate summary message for deprecation report.
213
+ */
214
+ function generateDeprecationSummary(warnings, deprecatedCount, expiredCount, gracePeriodCount) {
215
+ if (warnings.length === 0) {
216
+ return 'No deprecated tools found.';
217
+ }
218
+ const parts = [];
219
+ if (expiredCount > 0) {
220
+ parts.push(`${expiredCount} tool(s) past removal date`);
221
+ }
222
+ if (gracePeriodCount > 0) {
223
+ parts.push(`${gracePeriodCount} tool(s) in grace period`);
224
+ }
225
+ if (deprecatedCount > 0) {
226
+ parts.push(`${deprecatedCount} deprecated tool(s)`);
227
+ }
228
+ // Add critical warnings
229
+ const criticalTools = warnings.filter(w => w.daysUntilRemoval !== undefined && w.daysUntilRemoval <= DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS && w.daysUntilRemoval >= 0);
230
+ if (criticalTools.length > 0) {
231
+ parts.push(`${criticalTools.length} tool(s) will be removed within ${DEPRECATION_THRESHOLDS.CRITICAL_REMOVAL_DAYS} days`);
232
+ }
233
+ return parts.join(', ') + '.';
234
+ }
235
+ /**
236
+ * Get all deprecated tools from a baseline.
237
+ */
238
+ export function getDeprecatedTools(baseline) {
239
+ return baseline.tools.filter(t => t.deprecated);
240
+ }
241
+ /**
242
+ * Get tools that are past their removal date.
243
+ */
244
+ export function getExpiredTools(baseline, now = new Date()) {
245
+ return baseline.tools.filter(t => {
246
+ if (!t.deprecated || !t.removalDate) {
247
+ return false;
248
+ }
249
+ const removalDate = new Date(t.removalDate);
250
+ return now > removalDate;
251
+ });
252
+ }
253
+ /**
254
+ * Get tools that will be removed within a specified number of days.
255
+ */
256
+ export function getUpcomingRemovals(baseline, withinDays = DEPRECATION_THRESHOLDS.UPCOMING_REMOVAL_DAYS, now = new Date()) {
257
+ return baseline.tools.filter(t => {
258
+ if (!t.deprecated || !t.removalDate) {
259
+ return false;
260
+ }
261
+ const removalDate = new Date(t.removalDate);
262
+ const diffMs = removalDate.getTime() - now.getTime();
263
+ const daysUntil = Math.ceil(diffMs / (1000 * 60 * 60 * 24));
264
+ return daysUntil >= 0 && daysUntil <= withinDays;
265
+ });
266
+ }
267
+ /**
268
+ * Format deprecation warning for display.
269
+ */
270
+ export function formatDeprecationWarning(warning) {
271
+ const lines = [];
272
+ const icon = warning.isPastRemoval ? '❌' : warning.isInGracePeriod ? '⚠️' : '🕐';
273
+ lines.push(`${icon} ${warning.toolName} [${warning.status.toUpperCase()}]`);
274
+ lines.push(` ${warning.message}`);
275
+ if (warning.replacementTool) {
276
+ lines.push(` Replacement: ${warning.replacementTool}`);
277
+ }
278
+ return lines.join('\n');
279
+ }
280
+ /**
281
+ * Format deprecation report for console output.
282
+ */
283
+ export function formatDeprecationReport(report) {
284
+ const lines = ['Deprecation Report', '═'.repeat(50), ''];
285
+ if (report.warnings.length === 0) {
286
+ lines.push('✓ No deprecated tools found.');
287
+ return lines.join('\n');
288
+ }
289
+ lines.push(report.summary);
290
+ lines.push('');
291
+ // Group by status
292
+ const byStatus = new Map();
293
+ for (const warning of report.warnings) {
294
+ const existing = byStatus.get(warning.status) || [];
295
+ existing.push(warning);
296
+ byStatus.set(warning.status, existing);
297
+ }
298
+ // Show removed first
299
+ const statusOrder = ['removed', 'sunset', 'deprecated'];
300
+ for (const status of statusOrder) {
301
+ const warnings = byStatus.get(status);
302
+ if (warnings && warnings.length > 0) {
303
+ lines.push(`─── ${status.toUpperCase()} ───`);
304
+ for (const warning of warnings) {
305
+ lines.push(formatDeprecationWarning(warning));
306
+ lines.push('');
307
+ }
308
+ }
309
+ }
310
+ return lines.join('\n');
311
+ }
312
+ /**
313
+ * Check if deprecation report should cause failure.
314
+ */
315
+ export function shouldFailOnDeprecation(report, config = {}) {
316
+ const fullConfig = { ...DEPRECATION_DEFAULTS, ...config };
317
+ if (!fullConfig.failOnExpired) {
318
+ return false;
319
+ }
320
+ return report.expiredCount > 0;
321
+ }
322
+ //# sourceMappingURL=deprecation-tracker.js.map
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Diff output formatting for human and machine consumption.
3
+ */
4
+ import type { BehavioralDiff } from './types.js';
5
+ import type { SecurityDiff } from '../security/types.js';
6
+ /**
7
+ * Format diff for human-readable console output.
8
+ */
9
+ export declare function formatDiffText(diff: BehavioralDiff, useColors?: boolean): string;
10
+ /**
11
+ * Format diff as JSON.
12
+ */
13
+ export declare function formatDiffJson(diff: BehavioralDiff): string;
14
+ /**
15
+ * Format diff in a compact single-line format for CI logs.
16
+ */
17
+ export declare function formatDiffCompact(diff: BehavioralDiff): string;
18
+ /**
19
+ * Format diff for GitHub Actions annotations.
20
+ */
21
+ export declare function formatDiffGitHubActions(diff: BehavioralDiff): string;
22
+ /**
23
+ * Format diff as markdown.
24
+ */
25
+ export declare function formatDiffMarkdown(diff: BehavioralDiff): string;
26
+ /**
27
+ * Format diff as JUnit XML for CI dashboard integration.
28
+ *
29
+ * JUnit XML is widely supported by CI/CD systems (Jenkins, GitLab CI,
30
+ * CircleCI, Azure DevOps, etc.) for test result visualization.
31
+ *
32
+ * @param diff - The behavioral diff to format
33
+ * @param suiteName - Name for the test suite (default: 'bellwether')
34
+ * @returns JUnit XML string
35
+ */
36
+ export declare function formatDiffJUnit(diff: BehavioralDiff, suiteName?: string): string;
37
+ /**
38
+ * Format diff as SARIF (Static Analysis Results Interchange Format) for GitHub Code Scanning.
39
+ *
40
+ * SARIF is the standard format for GitHub's code scanning feature and can be
41
+ * uploaded to show drift detection results in pull request reviews.
42
+ *
43
+ * @see https://docs.oasis-open.org/sarif/sarif/v2.1.0/sarif-v2.1.0.html
44
+ *
45
+ * @param diff - The behavioral diff to format
46
+ * @param baselinePath - Path to the baseline file (for location references)
47
+ * @returns SARIF JSON string
48
+ */
49
+ export declare function formatDiffSarif(diff: BehavioralDiff, baselinePath?: string): string;
50
+ /**
51
+ * Format a standalone security report for display.
52
+ * Used when only security data is available (not a full diff).
53
+ */
54
+ export declare function formatSecurityReport(report: SecurityDiff, useColors?: boolean): string;
55
+ //# sourceMappingURL=diff.d.ts.map