@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,554 @@
1
+ /**
2
+ * Migration Guide Generator
3
+ *
4
+ * Auto-generates migration guides for breaking changes between baselines.
5
+ * Provides step-by-step instructions, code examples, and effort estimates.
6
+ */
7
+ import { analyzeSchemaChanges, } from './change-impact-analyzer.js';
8
+ import { MIGRATION_GUIDE } from '../constants.js';
9
+ /**
10
+ * Generate a migration guide from two baselines.
11
+ */
12
+ export function generateMigrationGuide(oldBaseline, newBaseline, diff) {
13
+ const breakingChanges = [];
14
+ const steps = [];
15
+ const warnings = [];
16
+ const changesByType = {};
17
+ let stepNumber = 0;
18
+ // Process removed tools
19
+ const removedTools = diff?.toolsRemoved ?? findRemovedTools(oldBaseline, newBaseline);
20
+ for (const toolName of removedTools) {
21
+ const oldTool = oldBaseline.tools.find(t => t.name === toolName);
22
+ if (oldTool) {
23
+ breakingChanges.push({
24
+ toolName,
25
+ changeType: 'parameter_removed',
26
+ parameterPath: toolName,
27
+ before: oldTool,
28
+ after: null,
29
+ description: `Tool "${toolName}" has been removed`,
30
+ severity: 'breaking',
31
+ });
32
+ steps.push({
33
+ stepNumber: ++stepNumber,
34
+ type: 'tool_removal',
35
+ toolName,
36
+ title: `Remove usage of "${toolName}"`,
37
+ description: `The tool "${toolName}" has been removed from the server. Update all code that calls this tool to use an alternative or remove the functionality.`,
38
+ isBreaking: true,
39
+ codeExamples: generateToolRemovalExamples(toolName),
40
+ });
41
+ changesByType['parameter_removed'] = (changesByType['parameter_removed'] || 0) + 1;
42
+ }
43
+ }
44
+ // Process added tools (non-breaking, but noteworthy)
45
+ const addedTools = diff?.toolsAdded ?? findAddedTools(oldBaseline, newBaseline);
46
+ for (const toolName of addedTools) {
47
+ const newTool = newBaseline.tools.find(t => t.name === toolName);
48
+ if (newTool) {
49
+ steps.push({
50
+ stepNumber: ++stepNumber,
51
+ type: 'tool_addition',
52
+ toolName,
53
+ title: `New tool available: "${toolName}"`,
54
+ description: `A new tool "${toolName}" is now available. ${newTool.description}`,
55
+ isBreaking: false,
56
+ codeExamples: generateToolAdditionExamples(toolName, newTool.inputSchema),
57
+ });
58
+ changesByType['parameter_added'] = (changesByType['parameter_added'] || 0) + 1;
59
+ }
60
+ }
61
+ // Process modified tools
62
+ const modifiedToolNames = diff?.toolsModified.map(t => t.tool) ?? findModifiedTools(oldBaseline, newBaseline);
63
+ for (const toolName of modifiedToolNames) {
64
+ const oldTool = oldBaseline.tools.find(t => t.name === toolName);
65
+ const newTool = newBaseline.tools.find(t => t.name === toolName);
66
+ if (oldTool && newTool) {
67
+ const schemaChanges = analyzeSchemaChanges(oldTool.inputSchema, newTool.inputSchema);
68
+ for (const change of schemaChanges) {
69
+ // Track change type
70
+ changesByType[change.type] = (changesByType[change.type] || 0) + 1;
71
+ if (change.breaking) {
72
+ breakingChanges.push({
73
+ toolName,
74
+ changeType: change.type,
75
+ parameterPath: change.parameterPath,
76
+ before: change.before,
77
+ after: change.after,
78
+ description: change.description,
79
+ severity: 'breaking',
80
+ });
81
+ }
82
+ // Generate migration step
83
+ const step = generateMigrationStep(toolName, change, ++stepNumber);
84
+ if (step) {
85
+ steps.push(step);
86
+ }
87
+ }
88
+ // Check for deprecation changes
89
+ if (!oldTool.deprecated && newTool.deprecated) {
90
+ warnings.push(`Tool "${toolName}" has been deprecated. ${newTool.deprecationNotice || ''}`);
91
+ if (newTool.replacementTool) {
92
+ warnings.push(`Consider migrating to "${newTool.replacementTool}".`);
93
+ }
94
+ }
95
+ }
96
+ }
97
+ // Limit steps
98
+ const limitedSteps = steps.slice(0, MIGRATION_GUIDE.MAX_MIGRATION_STEPS);
99
+ if (steps.length > MIGRATION_GUIDE.MAX_MIGRATION_STEPS) {
100
+ warnings.push(`Migration guide truncated: ${steps.length - MIGRATION_GUIDE.MAX_MIGRATION_STEPS} additional steps not shown.`);
101
+ }
102
+ // Calculate effort
103
+ const estimatedEffort = estimateEffort(breakingChanges.length);
104
+ // Generate summary
105
+ const summary = generateSummary(breakingChanges.length, removedTools.length, addedTools.length, estimatedEffort);
106
+ // Generate general code examples
107
+ const codeExamples = generateGeneralExamples(breakingChanges);
108
+ return {
109
+ fromVersion: oldBaseline.version,
110
+ toVersion: newBaseline.version,
111
+ dateRange: {
112
+ from: oldBaseline.createdAt,
113
+ to: newBaseline.createdAt,
114
+ },
115
+ breakingChanges,
116
+ steps: limitedSteps,
117
+ codeExamples,
118
+ estimatedEffort,
119
+ stats: {
120
+ breakingChangesCount: breakingChanges.length,
121
+ toolsAffected: new Set([...removedTools, ...addedTools, ...modifiedToolNames]).size,
122
+ stepsCount: limitedSteps.length,
123
+ changesByType: changesByType,
124
+ },
125
+ summary,
126
+ removedTools,
127
+ addedTools,
128
+ warnings,
129
+ };
130
+ }
131
+ /**
132
+ * Find tools that were removed.
133
+ */
134
+ function findRemovedTools(oldBaseline, newBaseline) {
135
+ const newToolNames = new Set(newBaseline.tools.map(t => t.name));
136
+ return oldBaseline.tools.filter(t => !newToolNames.has(t.name)).map(t => t.name);
137
+ }
138
+ /**
139
+ * Find tools that were added.
140
+ */
141
+ function findAddedTools(oldBaseline, newBaseline) {
142
+ const oldToolNames = new Set(oldBaseline.tools.map(t => t.name));
143
+ return newBaseline.tools.filter(t => !oldToolNames.has(t.name)).map(t => t.name);
144
+ }
145
+ /**
146
+ * Find tools that were modified.
147
+ */
148
+ function findModifiedTools(oldBaseline, newBaseline) {
149
+ const modified = [];
150
+ const oldToolMap = new Map(oldBaseline.tools.map(t => [t.name, t]));
151
+ for (const newTool of newBaseline.tools) {
152
+ const oldTool = oldToolMap.get(newTool.name);
153
+ if (oldTool && oldTool.schemaHash !== newTool.schemaHash) {
154
+ modified.push(newTool.name);
155
+ }
156
+ }
157
+ return modified;
158
+ }
159
+ /**
160
+ * Generate a migration step for a schema change.
161
+ */
162
+ function generateMigrationStep(toolName, change, stepNumber) {
163
+ const { type, parameterPath, before, after, description, breaking } = change;
164
+ switch (type) {
165
+ case 'parameter_removed':
166
+ return {
167
+ stepNumber,
168
+ type: 'remove_parameter',
169
+ toolName,
170
+ parameterPath,
171
+ title: `Remove parameter "${parameterPath}" from ${toolName}`,
172
+ description: `The parameter "${parameterPath}" has been removed. Update all calls to "${toolName}" that use this parameter.`,
173
+ isBreaking: breaking,
174
+ codeExamples: generateParameterRemovalExamples(toolName, parameterPath),
175
+ schemaChange: change,
176
+ };
177
+ case 'parameter_required_added':
178
+ return {
179
+ stepNumber,
180
+ type: 'add_parameter',
181
+ toolName,
182
+ parameterPath,
183
+ title: `Add required parameter "${parameterPath}" to ${toolName}`,
184
+ description: `A new required parameter "${parameterPath}" has been added. All calls to "${toolName}" must now include this parameter.`,
185
+ isBreaking: breaking,
186
+ codeExamples: generateRequiredParameterExamples(toolName, parameterPath, after),
187
+ schemaChange: change,
188
+ };
189
+ case 'parameter_added':
190
+ return {
191
+ stepNumber,
192
+ type: 'add_parameter',
193
+ toolName,
194
+ parameterPath,
195
+ title: `New optional parameter "${parameterPath}" available for ${toolName}`,
196
+ description: `A new optional parameter "${parameterPath}" is now available. You can use it to ${description.toLowerCase()}.`,
197
+ isBreaking: false,
198
+ codeExamples: [],
199
+ schemaChange: change,
200
+ };
201
+ case 'parameter_type_changed':
202
+ return {
203
+ stepNumber,
204
+ type: 'change_type',
205
+ toolName,
206
+ parameterPath,
207
+ title: `Update type of "${parameterPath}" in ${toolName}`,
208
+ description: `The type of "${parameterPath}" has changed from ${before} to ${after}. Update all values passed to this parameter.`,
209
+ isBreaking: breaking,
210
+ codeExamples: generateTypeChangeExamples(toolName, parameterPath, before, after),
211
+ schemaChange: change,
212
+ };
213
+ case 'enum_value_removed':
214
+ return {
215
+ stepNumber,
216
+ type: 'update_enum',
217
+ toolName,
218
+ parameterPath,
219
+ title: `Update enum values for "${parameterPath}" in ${toolName}`,
220
+ description: `The enum value "${before}" has been removed from "${parameterPath}". Update any code using this value.`,
221
+ isBreaking: breaking,
222
+ codeExamples: generateEnumChangeExamples(toolName, parameterPath, before),
223
+ schemaChange: change,
224
+ };
225
+ case 'constraint_tightened':
226
+ return {
227
+ stepNumber,
228
+ type: 'update_constraint',
229
+ toolName,
230
+ parameterPath,
231
+ title: `Update values for "${parameterPath}" in ${toolName}`,
232
+ description: `The constraint for "${parameterPath}" has been tightened. Ensure all values meet the new constraint: ${after}.`,
233
+ isBreaking: breaking,
234
+ codeExamples: [],
235
+ schemaChange: change,
236
+ };
237
+ default:
238
+ // For non-critical changes, return a generic step
239
+ if (breaking) {
240
+ return {
241
+ stepNumber,
242
+ type: 'update_constraint',
243
+ toolName,
244
+ parameterPath,
245
+ title: `Update "${parameterPath}" in ${toolName}`,
246
+ description,
247
+ isBreaking: true,
248
+ codeExamples: [],
249
+ schemaChange: change,
250
+ };
251
+ }
252
+ return null;
253
+ }
254
+ }
255
+ /**
256
+ * Estimate migration effort based on breaking changes.
257
+ */
258
+ function estimateEffort(breakingCount) {
259
+ if (breakingCount <= MIGRATION_GUIDE.EFFORT_THRESHOLDS.trivial) {
260
+ return 'trivial';
261
+ }
262
+ if (breakingCount <= MIGRATION_GUIDE.EFFORT_THRESHOLDS.minor) {
263
+ return 'minor';
264
+ }
265
+ if (breakingCount <= MIGRATION_GUIDE.EFFORT_THRESHOLDS.moderate) {
266
+ return 'moderate';
267
+ }
268
+ return 'major';
269
+ }
270
+ /**
271
+ * Generate summary text.
272
+ */
273
+ function generateSummary(breakingCount, removedCount, addedCount, effort) {
274
+ const parts = [];
275
+ if (breakingCount === 0) {
276
+ parts.push('This migration contains no breaking changes.');
277
+ }
278
+ else {
279
+ parts.push(`This migration contains ${breakingCount} breaking change(s).`);
280
+ }
281
+ if (removedCount > 0) {
282
+ parts.push(`${removedCount} tool(s) have been removed.`);
283
+ }
284
+ if (addedCount > 0) {
285
+ parts.push(`${addedCount} new tool(s) are available.`);
286
+ }
287
+ parts.push(`Estimated effort: ${effort.toUpperCase()}.`);
288
+ return parts.join(' ');
289
+ }
290
+ /**
291
+ * Generate examples for tool removal.
292
+ */
293
+ function generateToolRemovalExamples(toolName) {
294
+ return [{
295
+ language: 'typescript',
296
+ title: `Remove calls to ${toolName}`,
297
+ before: `// Old code using the removed tool
298
+ const result = await mcp.callTool('${toolName}', {
299
+ param: 'value'
300
+ });`,
301
+ after: `// The tool has been removed
302
+ // Option 1: Remove the functionality
303
+ // Option 2: Use an alternative tool if available
304
+ // Option 3: Implement the functionality differently`,
305
+ }];
306
+ }
307
+ /**
308
+ * Generate examples for tool addition.
309
+ */
310
+ function generateToolAdditionExamples(toolName, schema) {
311
+ const params = schema?.properties
312
+ ? Object.keys(schema.properties).slice(0, 3).join(', ')
313
+ : 'param1, param2';
314
+ return [{
315
+ language: 'typescript',
316
+ title: `Use the new ${toolName} tool`,
317
+ before: `// Tool was not available before`,
318
+ after: `// New tool is now available
319
+ const result = await mcp.callTool('${toolName}', {
320
+ ${params.split(', ').map(p => `${p}: /* value */`).join(',\n ')}
321
+ });`,
322
+ }];
323
+ }
324
+ /**
325
+ * Generate examples for parameter removal.
326
+ */
327
+ function generateParameterRemovalExamples(toolName, parameterPath) {
328
+ return [{
329
+ language: 'typescript',
330
+ title: `Remove "${parameterPath}" from ${toolName} calls`,
331
+ before: `const result = await mcp.callTool('${toolName}', {
332
+ ${parameterPath}: 'value', // This parameter is being removed
333
+ otherParam: 'other'
334
+ });`,
335
+ after: `const result = await mcp.callTool('${toolName}', {
336
+ // ${parameterPath} has been removed
337
+ otherParam: 'other'
338
+ });`,
339
+ }];
340
+ }
341
+ /**
342
+ * Generate examples for required parameter addition.
343
+ */
344
+ function generateRequiredParameterExamples(toolName, parameterPath, newSchema) {
345
+ const typeHint = typeof newSchema === 'object' && newSchema !== null && 'type' in newSchema
346
+ ? newSchema.type
347
+ : 'string';
348
+ return [{
349
+ language: 'typescript',
350
+ title: `Add required "${parameterPath}" to ${toolName} calls`,
351
+ before: `const result = await mcp.callTool('${toolName}', {
352
+ existingParam: 'value'
353
+ });`,
354
+ after: `const result = await mcp.callTool('${toolName}', {
355
+ existingParam: 'value',
356
+ ${parameterPath}: /* ${typeHint} - REQUIRED */
357
+ });`,
358
+ }];
359
+ }
360
+ /**
361
+ * Generate examples for type changes.
362
+ */
363
+ function generateTypeChangeExamples(toolName, parameterPath, oldType, newType) {
364
+ return [{
365
+ language: 'typescript',
366
+ title: `Update "${parameterPath}" type in ${toolName} calls`,
367
+ before: `const result = await mcp.callTool('${toolName}', {
368
+ ${parameterPath}: /* ${oldType} */
369
+ });`,
370
+ after: `const result = await mcp.callTool('${toolName}', {
371
+ ${parameterPath}: /* ${newType} - type changed! */
372
+ });`,
373
+ }];
374
+ }
375
+ /**
376
+ * Generate examples for enum changes.
377
+ */
378
+ function generateEnumChangeExamples(toolName, parameterPath, removedValue) {
379
+ return [{
380
+ language: 'typescript',
381
+ title: `Update enum value for "${parameterPath}" in ${toolName}`,
382
+ before: `const result = await mcp.callTool('${toolName}', {
383
+ ${parameterPath}: '${removedValue}' // This value is no longer valid
384
+ });`,
385
+ after: `const result = await mcp.callTool('${toolName}', {
386
+ ${parameterPath}: /* use a different valid value */
387
+ });`,
388
+ }];
389
+ }
390
+ /**
391
+ * Generate general code examples based on breaking changes.
392
+ */
393
+ function generateGeneralExamples(breakingChanges) {
394
+ const examples = [];
395
+ // Group by tool
396
+ const byTool = new Map();
397
+ for (const change of breakingChanges) {
398
+ const existing = byTool.get(change.toolName) || [];
399
+ existing.push(change);
400
+ byTool.set(change.toolName, existing);
401
+ }
402
+ // Generate combined example for tools with multiple changes
403
+ for (const [toolName, changes] of byTool) {
404
+ if (changes.length > 1 && examples.length < MIGRATION_GUIDE.MAX_CODE_EXAMPLES_PER_STEP) {
405
+ const beforeParams = changes.map(c => ` ${c.parameterPath}: /* old */`).join(',\n');
406
+ const afterParams = changes.map(c => ` ${c.parameterPath}: /* updated */`).join(',\n');
407
+ examples.push({
408
+ language: 'typescript',
409
+ title: `Update multiple parameters in ${toolName}`,
410
+ before: `const result = await mcp.callTool('${toolName}', {\n${beforeParams}\n});`,
411
+ after: `const result = await mcp.callTool('${toolName}', {\n${afterParams}\n});`,
412
+ });
413
+ }
414
+ }
415
+ return examples;
416
+ }
417
+ /**
418
+ * Format migration guide as markdown.
419
+ */
420
+ export function formatMigrationGuideMarkdown(guide) {
421
+ const lines = [];
422
+ lines.push(`# Migration Guide: ${guide.fromVersion} → ${guide.toVersion}`);
423
+ lines.push('');
424
+ lines.push(`**Date Range:** ${guide.dateRange.from.toISOString().split('T')[0]} to ${guide.dateRange.to.toISOString().split('T')[0]}`);
425
+ lines.push(`**Estimated Effort:** ${guide.estimatedEffort.toUpperCase()}`);
426
+ lines.push('');
427
+ lines.push('## Summary');
428
+ lines.push('');
429
+ lines.push(guide.summary);
430
+ lines.push('');
431
+ // Statistics
432
+ lines.push('## Statistics');
433
+ lines.push('');
434
+ lines.push(`- **Breaking Changes:** ${guide.stats.breakingChangesCount}`);
435
+ lines.push(`- **Tools Affected:** ${guide.stats.toolsAffected}`);
436
+ lines.push(`- **Migration Steps:** ${guide.stats.stepsCount}`);
437
+ lines.push('');
438
+ // Warnings
439
+ if (guide.warnings.length > 0) {
440
+ lines.push('## ⚠️ Warnings');
441
+ lines.push('');
442
+ for (const warning of guide.warnings) {
443
+ lines.push(`- ${warning}`);
444
+ }
445
+ lines.push('');
446
+ }
447
+ // Breaking changes
448
+ if (guide.breakingChanges.length > 0) {
449
+ lines.push('## Breaking Changes');
450
+ lines.push('');
451
+ for (const change of guide.breakingChanges) {
452
+ lines.push(`### ${change.toolName}: ${change.parameterPath}`);
453
+ lines.push('');
454
+ lines.push(`**Type:** ${change.changeType}`);
455
+ lines.push('');
456
+ lines.push(change.description);
457
+ lines.push('');
458
+ }
459
+ }
460
+ // Migration steps
461
+ if (guide.steps.length > 0) {
462
+ lines.push('## Migration Steps');
463
+ lines.push('');
464
+ for (const step of guide.steps) {
465
+ const breakingBadge = step.isBreaking ? ' ⚠️' : '';
466
+ lines.push(`### Step ${step.stepNumber}: ${step.title}${breakingBadge}`);
467
+ lines.push('');
468
+ lines.push(step.description);
469
+ lines.push('');
470
+ for (const example of step.codeExamples) {
471
+ lines.push(`**${example.title}**`);
472
+ lines.push('');
473
+ lines.push('Before:');
474
+ lines.push('```' + example.language);
475
+ lines.push(example.before);
476
+ lines.push('```');
477
+ lines.push('');
478
+ lines.push('After:');
479
+ lines.push('```' + example.language);
480
+ lines.push(example.after);
481
+ lines.push('```');
482
+ lines.push('');
483
+ }
484
+ }
485
+ }
486
+ // Added tools
487
+ if (guide.addedTools.length > 0) {
488
+ lines.push('## New Tools Available');
489
+ lines.push('');
490
+ for (const tool of guide.addedTools) {
491
+ lines.push(`- \`${tool}\``);
492
+ }
493
+ lines.push('');
494
+ }
495
+ // Removed tools
496
+ if (guide.removedTools.length > 0) {
497
+ lines.push('## Removed Tools');
498
+ lines.push('');
499
+ for (const tool of guide.removedTools) {
500
+ lines.push(`- \`${tool}\``);
501
+ }
502
+ lines.push('');
503
+ }
504
+ return lines.join('\n');
505
+ }
506
+ /**
507
+ * Format migration guide for console output.
508
+ */
509
+ export function formatMigrationGuideText(guide) {
510
+ const lines = [];
511
+ lines.push(`Migration Guide: ${guide.fromVersion} → ${guide.toVersion}`);
512
+ lines.push('═'.repeat(60));
513
+ lines.push('');
514
+ lines.push(guide.summary);
515
+ lines.push('');
516
+ lines.push(`Estimated Effort: ${guide.estimatedEffort.toUpperCase()}`);
517
+ lines.push(`Breaking Changes: ${guide.stats.breakingChangesCount}`);
518
+ lines.push(`Tools Affected: ${guide.stats.toolsAffected}`);
519
+ lines.push('');
520
+ if (guide.warnings.length > 0) {
521
+ lines.push('Warnings:');
522
+ for (const warning of guide.warnings) {
523
+ lines.push(` ⚠️ ${warning}`);
524
+ }
525
+ lines.push('');
526
+ }
527
+ if (guide.steps.length > 0) {
528
+ lines.push('Migration Steps:');
529
+ lines.push('─'.repeat(40));
530
+ for (const step of guide.steps.filter(s => s.isBreaking)) {
531
+ const icon = step.isBreaking ? '!' : ' ';
532
+ lines.push(` ${icon} Step ${step.stepNumber}: ${step.title}`);
533
+ }
534
+ lines.push('');
535
+ }
536
+ return lines.join('\n');
537
+ }
538
+ /**
539
+ * Check if a migration guide contains breaking changes that require action.
540
+ */
541
+ export function hasBreakingMigrationChanges(guide) {
542
+ return guide.breakingChanges.length > 0;
543
+ }
544
+ /**
545
+ * Get breaking tools from guide.
546
+ */
547
+ export function getBreakingTools(guide) {
548
+ const tools = new Set();
549
+ for (const change of guide.breakingChanges) {
550
+ tools.add(change.toolName);
551
+ }
552
+ return Array.from(tools);
553
+ }
554
+ //# sourceMappingURL=migration-generator.js.map
@@ -0,0 +1,60 @@
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 type { BehavioralBaseline } from './types.js';
14
+ /**
15
+ * Check if a baseline can be migrated to the current CLI version.
16
+ *
17
+ * Migration is possible if:
18
+ * - Source version has a different major version than current
19
+ * - A migration path exists
20
+ *
21
+ * @param fromVersion - Source version (string, number, or undefined)
22
+ * @returns true if migration is possible
23
+ */
24
+ export declare function canMigrate(fromVersion: string | number | undefined): boolean;
25
+ /**
26
+ * Get the list of migrations that would be applied.
27
+ *
28
+ * @param fromVersion - Source version
29
+ * @returns Array of major version strings for migrations that would be applied
30
+ */
31
+ export declare function getMigrationsToApply(fromVersion: string | number | undefined): string[];
32
+ /**
33
+ * Migrate a baseline to the current CLI version format.
34
+ *
35
+ * @param baseline - The baseline object to migrate (can be any version)
36
+ * @returns Migrated baseline conforming to BehavioralBaseline interface
37
+ * @throws Error if migration is not possible (e.g., downgrade attempt)
38
+ */
39
+ export declare function migrateBaseline(baseline: Record<string, unknown>): BehavioralBaseline;
40
+ /**
41
+ * Check if a baseline needs migration.
42
+ *
43
+ * @param baseline - The baseline to check
44
+ * @returns true if the baseline major version differs from current CLI major version
45
+ */
46
+ export declare function needsMigration(baseline: Record<string, unknown>): boolean;
47
+ /**
48
+ * Get information about what migrations would be applied.
49
+ *
50
+ * @param baseline - The baseline to analyze
51
+ * @returns Object with migration details
52
+ */
53
+ export declare function getMigrationInfo(baseline: Record<string, unknown>): {
54
+ currentVersion: string;
55
+ targetVersion: string;
56
+ needsMigration: boolean;
57
+ migrationsToApply: string[];
58
+ canMigrate: boolean;
59
+ };
60
+ //# sourceMappingURL=migrations.d.ts.map