@metabase/cli 0.3.0 → 0.3.1-alpha.versioning.9ac5f50

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 (234) hide show
  1. package/dist/{add-collection-B3Ty8SzB.mjs → add-collection-Dmd-uNeU.mjs} +4 -7
  2. package/dist/{alert-DT-ee7yf.mjs → alert-D1u2MVZj.mjs} +7 -7
  3. package/dist/{alerts-Bf2RH_p_.mjs → alerts-DcBjcfEE.mjs} +5 -5
  4. package/dist/{append-DFzQRPMd.mjs → append-B9Htvmab.mjs} +6 -5
  5. package/dist/{archive-lQqs13Uz.mjs → archive-B660RguB.mjs} +4 -4
  6. package/dist/{archive-ByvA49Kz.mjs → archive-BNivAYGr.mjs} +4 -4
  7. package/dist/{archive-4tmm946K.mjs → archive-BUoYMkxO.mjs} +4 -4
  8. package/dist/{archive-C7w49Grr.mjs → archive-BVmFGFwG.mjs} +4 -4
  9. package/dist/{archive-ChORH5JH.mjs → archive-Bf014rFm.mjs} +4 -4
  10. package/dist/{archive-gid9Y09v.mjs → archive-BmsZFOZY.mjs} +4 -4
  11. package/dist/{archive-BxNPHxOY.mjs → archive-CNif6BKy.mjs} +6 -6
  12. package/dist/{archive-Cd29QC0c.mjs → archive-CgmidYZV.mjs} +4 -4
  13. package/dist/{archive-CwAdlv63.mjs → archive-CvU2z5192.mjs} +4 -4
  14. package/dist/{archive-Dr9Xnx_Z.mjs → archive-DhDQIKR_.mjs} +6 -6
  15. package/dist/{archive-B6eXiyER.mjs → archive-bPdDITuY.mjs} +4 -4
  16. package/dist/{auth-Dltxua89.mjs → auth-CefYEPP5.mjs} +5 -5
  17. package/dist/{body-Cur4NJt9.mjs → body-C7m9q4cm.mjs} +3 -3
  18. package/dist/{branches-DchlyU0i.mjs → branches-pz04OjF2.mjs} +3 -6
  19. package/dist/{cancel-BMQa5R1Z.mjs → cancel-CNLnv19e.mjs} +4 -4
  20. package/dist/{cancel-task-C5CU1pxU.mjs → cancel-task-DbnxSh7U.mjs} +3 -6
  21. package/dist/card-BRarvKYX.mjs +24 -0
  22. package/dist/{cards-SccWvRQD.mjs → cards-DtYlVoGP.mjs} +6 -6
  23. package/dist/cli.mjs +554 -62
  24. package/dist/{client-BqhzKdLM.mjs → client-Bv7Iwdvh.mjs} +258 -76
  25. package/dist/collection-CKeO8X7U.mjs +20 -0
  26. package/dist/{collection-CGoVLvcD.mjs → collection-DALwHnbz.mjs} +1 -1
  27. package/dist/{collection-CfulNRBG.mjs → collection-WFdBeyqa.mjs} +1 -1
  28. package/dist/{collection-namespace-GwydWBF3.mjs → collection-namespace-CvT0TIZA.mjs} +2 -2
  29. package/dist/content-translation-BrHOrmj9.mjs +5 -0
  30. package/dist/content-translation-D7POzJJ6.mjs +12 -0
  31. package/dist/{create-CD008jdE.mjs → create-BEE8uvz2.mjs} +12 -8
  32. package/dist/{create-CAQV2g6V.mjs → create-Bh2j733n.mjs} +7 -7
  33. package/dist/{create-BNQ_DytP.mjs → create-Bwg-5p08.mjs} +4 -4
  34. package/dist/{create-C79vErX0.mjs → create-CGPle4nE.mjs} +5 -5
  35. package/dist/{create-i14Wv3Tj.mjs → create-CGgPnb7L.mjs} +4 -4
  36. package/dist/{create-DJmXXQoq.mjs → create-CLgalJUe.mjs} +8 -8
  37. package/dist/{create-Beh-2uoN.mjs → create-CN24yp_W.mjs} +6 -6
  38. package/dist/{create-DF4QtgDL.mjs → create-CuYGZ4gu2.mjs} +4 -4
  39. package/dist/{create-CAWytBE5.mjs → create-DGHILnnk.mjs} +5 -5
  40. package/dist/{create-zeveFdnd.mjs → create-DYd_o9BD.mjs} +5 -8
  41. package/dist/{create-DV-Ln5Mo.mjs → create-DhDREiiy.mjs} +4 -4
  42. package/dist/{create-CHQx7jq4.mjs → create-Di4YvIbK.mjs} +4 -4
  43. package/dist/{create-tQbnuz-I.mjs → create-DnqnjGGf.mjs} +4 -4
  44. package/dist/{create-CCh_LyW9.mjs → create-Ds-DnSBe.mjs} +4 -4
  45. package/dist/{create-BOLwWt8Q.mjs → create-JOXq0ULN.mjs} +5 -5
  46. package/dist/{create-branch-CYo6jZth.mjs → create-branch-DWcxC30N.mjs} +3 -7
  47. package/dist/{csv-B2Jgb1GM.mjs → csv-CUQvcCEk.mjs} +6 -5
  48. package/dist/{current-task-MpBFGttd.mjs → current-task-D6P0eL21.mjs} +3 -6
  49. package/dist/{dashboard-CsIFFpzK.mjs → dashboard-BlbNszi8.mjs} +1 -1
  50. package/dist/{dashboard-BHJBoaG7.mjs → dashboard-BudI952R.mjs} +10 -10
  51. package/dist/{dashboard-BCpSq_G-.mjs → dashboard-CKUR8ZpQ.mjs} +1 -0
  52. package/dist/{db-DsfojyeH.mjs → db-C7UTd-6P.mjs} +7 -7
  53. package/dist/{delete-DFmX7jTp.mjs → delete-DSxqbcFE.mjs} +5 -5
  54. package/dist/{delete-Ck0q4Dzp.mjs → delete-DbZZKcYj.mjs} +5 -5
  55. package/dist/{delete-Ob06PPie.mjs → delete-Ds-zGh9C.mjs} +5 -5
  56. package/dist/{delete-B8e01xAG.mjs → delete-Ud6iliGM.mjs} +5 -5
  57. package/dist/{delete-BApOjQvl.mjs → delete-_IHffP-A.mjs} +5 -5
  58. package/dist/{delete-runtime-D74s6vhu.mjs → delete-runtime-BjHL1ryM.mjs} +1 -2
  59. package/dist/{delete-table-DuyhGrvA.mjs → delete-table-DtXH6IN5.mjs} +5 -5
  60. package/dist/{dependencies-Bj3QrGIm.mjs → dependencies-CR1dlq-A.mjs} +6 -6
  61. package/dist/{dirty-DNYoM6Bp.mjs → dirty-CYxnOnh0.mjs} +3 -6
  62. package/dist/document-BoILnE_1.mjs +19 -0
  63. package/dist/download-DPpmmYQe.mjs +25 -0
  64. package/dist/{eid-WTZmDdsr.mjs → eid-D-BbtWjt.mjs} +4 -5
  65. package/dist/{events-Bn7jh5lP.mjs → events-CJEnn8WE.mjs} +4 -4
  66. package/dist/{export-BjfoZRDJ.mjs → export-BOgyuIOQ.mjs} +4 -7
  67. package/dist/{field-Zau6Hc6X.mjs → field-CzHBOPER.mjs} +5 -5
  68. package/dist/{fields-CBBa-Prp.mjs → fields-Bwgkrvus.mjs} +4 -4
  69. package/dist/{get-C2-Q3iQ5.mjs → get-B89DUSvw.mjs} +4 -4
  70. package/dist/{get-DkWO0EI0.mjs → get-BL90QC64.mjs} +6 -6
  71. package/dist/{get-ByBOq30r.mjs → get-BLJSCw53.mjs} +6 -6
  72. package/dist/{get-DRvsATp-.mjs → get-BOLwso0V.mjs} +6 -6
  73. package/dist/{get-B7sMgsFs.mjs → get-BaPadzdM.mjs} +4 -4
  74. package/dist/{get-00lyLv6R.mjs → get-BfVCLBqc.mjs} +4 -4
  75. package/dist/{get-DdsoHaKH.mjs → get-C1ZdOvMm.mjs} +4 -4
  76. package/dist/{get-DmpB6J9g.mjs → get-CLu4yzMp2.mjs} +4 -4
  77. package/dist/{get-DY03Azx9.mjs → get-COwdtskS.mjs} +5 -8
  78. package/dist/{get-D_h-G9bn.mjs → get-CWfIiXwL.mjs} +4 -4
  79. package/dist/get-CqQ-pf0q.mjs +89 -0
  80. package/dist/{get-DYO1kywc.mjs → get-CvIgxPXV.mjs} +4 -4
  81. package/dist/{get-Bz99dAxK.mjs → get-D4OTJblo.mjs} +6 -6
  82. package/dist/{get-Dn9ZiSZr.mjs → get-D8lHwu4-.mjs} +4 -4
  83. package/dist/{get-B_xdF1kq.mjs → get-DVi3a2nm.mjs} +4 -4
  84. package/dist/{get-CDJFVvhj.mjs → get-DgnYF7LR.mjs} +4 -4
  85. package/dist/{get-CDMGbgrh.mjs → get-DsKmZfM2.mjs} +4 -4
  86. package/dist/{get-Dmj9Ygz1.mjs → get-DyyPiiaB.mjs} +4 -4
  87. package/dist/{get-CnbUCzDM.mjs → get-Eqq13YY-.mjs} +4 -4
  88. package/dist/{get-run-Cnux9ln0.mjs → get-run-Iya0Yw9s.mjs} +6 -6
  89. package/dist/git-sync-CdN0Maun.mjs +28 -0
  90. package/dist/{group-DBM87IgC.mjs → group-CmVCLBDz.mjs} +2 -1
  91. package/dist/{has-remote-changes-C684Redh.mjs → has-remote-changes-DfJUMP8F.mjs} +3 -6
  92. package/dist/{import-Rmmttboo.mjs → import-FEAx-Y5A.mjs} +4 -7
  93. package/dist/{input-DH9i67x_.mjs → input-DFZ_qGW_.mjs} +1 -1
  94. package/dist/{is-dirty-DYeJYhBz.mjs → is-dirty-BsYjBSXG.mjs} +3 -6
  95. package/dist/{items-CQlPXBXE.mjs → items-D4rstE12.mjs} +6 -6
  96. package/dist/{key-BEhqIzIQ.mjs → key-BmWundO3.mjs} +1 -1
  97. package/dist/{library-DfYAT2Ep.mjs → library-CmctxHjv.mjs} +1 -1
  98. package/dist/library-DXB8sm4r.mjs +81 -0
  99. package/dist/{library-Bsm5KsFF.mjs → library-uzyHWBap.mjs} +5 -5
  100. package/dist/{list-DF2rvoO1.mjs → list-1DkkU82x.mjs} +13 -12
  101. package/dist/{list-BpFp9Wre.mjs → list-B7tqNV8B.mjs} +3 -3
  102. package/dist/{list-DE9FM957.mjs → list-BRpPbvyS.mjs} +3 -3
  103. package/dist/{list-CQwOgIlj.mjs → list-BXL8HFr_.mjs} +3 -3
  104. package/dist/{list-BzVTHOoH.mjs → list-Bjj0z5BS.mjs} +5 -5
  105. package/dist/{list-CQDprvW0.mjs → list-BmMi_wPD.mjs} +6 -6
  106. package/dist/{list-C5Zs8nrb.mjs → list-CC1M_n6Z.mjs} +5 -5
  107. package/dist/{list-CKK-s3Ty.mjs → list-CQy0z7f9.mjs} +3 -3
  108. package/dist/{list-BtmsNOEn.mjs → list-D_zvX0ms.mjs} +3 -3
  109. package/dist/{list-CMpoc2TN.mjs → list-DeNGm9G4.mjs} +3 -3
  110. package/dist/{list-DMKDsBRd.mjs → list-Dgm6TkqR.mjs} +6 -6
  111. package/dist/{list-BOET6zhP.mjs → list-DoTiQc3D.mjs} +3 -3
  112. package/dist/{list-BP3MPq-M.mjs → list-DrS3ePsv.mjs} +3 -3
  113. package/dist/list-bN0RC14-.mjs +59 -0
  114. package/dist/{list-B4hJuMhA.mjs → list-ndIl9XqV.mjs} +4 -4
  115. package/dist/{list-B8nAGwP4.mjs → list-sQcA4g05.mjs} +3 -3
  116. package/dist/{list-CNUiF8Z7.mjs → list-squb_ioH.mjs} +3 -3
  117. package/dist/{list-BtkWNtvY.mjs → list-xMfCeuZc.mjs} +4 -4
  118. package/dist/{login-CGHeSjlP.mjs → login-D_1-zE4A.mjs} +15 -12
  119. package/dist/{logout-DAxOlbv4.mjs → logout-DPi2q1Wu.mjs} +3 -4
  120. package/dist/{measure-BsYv0p26.mjs → measure-CdA8Nl3Z.mjs} +6 -6
  121. package/dist/{parameter-values-CJTdqd8c.mjs → parameter-values-C6dj6I4g.mjs} +4 -5
  122. package/dist/{parse-enum-D0Jfm_Bz.mjs → parse-enum-B1t8S194.mjs} +1 -1
  123. package/dist/{parse-id-C_jmKFaa.mjs → parse-id-DR8aUSdL.mjs} +1 -1
  124. package/dist/{parse-ref-ibKVB0J4.mjs → parse-ref-BJ_Q0tNW.mjs} +1 -1
  125. package/dist/{path-B5gHvrYL.mjs → path-B96DI8u2.mjs} +4 -4
  126. package/dist/{poll-75SvT7Zv.mjs → poll-By46YQ5J.mjs} +2 -2
  127. package/dist/{preflight-YpPQo-sa.mjs → preflight-Bl1oitm8.mjs} +3 -4
  128. package/dist/{process-DBOOrmET.mjs → process-CcQM4qPv.mjs} +1 -1
  129. package/dist/{publish-DijrxaCW.mjs → publish-BKJYvxif.mjs} +9 -9
  130. package/dist/{query-Dc__-KJH.mjs → query-BKSM-pbi.mjs} +6 -7
  131. package/dist/{query-BbqECzmF.mjs → query-qBHjZQc_.mjs} +5 -12
  132. package/dist/{remove-collection-BOnxYvhj.mjs → remove-collection-BWFW7Rn6.mjs} +4 -7
  133. package/dist/{render-CI93iP0I.mjs → render-DmykmrFB.mjs} +11 -2
  134. package/dist/{replace-Cq4CxVa-.mjs → replace-BmAqD3zY.mjs} +6 -5
  135. package/dist/{rescan-values-Dr_j416g.mjs → rescan-values-BrCLrihF.mjs} +4 -4
  136. package/dist/{run-C3DkS6NP.mjs → run-CtbzjDKY.mjs} +6 -6
  137. package/dist/{run-DdGJ544X.mjs → run-q5Y44Fxj.mjs} +26 -14
  138. package/dist/{runs-CUNWiidL.mjs → runs-JFlbezkQ.mjs} +6 -6
  139. package/dist/{runtime-DiKyBxOw.mjs → runtime-BQiGgbgZ.mjs} +850 -265
  140. package/dist/{schema-tables-CV386fnC.mjs → schema-tables-Bzx2ShyE.mjs} +4 -4
  141. package/dist/{schemas-DM-UqZBQ.mjs → schemas-ww5mU2AS.mjs} +4 -4
  142. package/dist/{search-DmGScXs8.mjs → search-J4RwCof-.mjs} +4 -4
  143. package/dist/{segment-BzUGM2Fr.mjs → segment-XXTjU0eG.mjs} +6 -6
  144. package/dist/{selectors-DGDn0Hto.mjs → selectors-BAAZMi43.mjs} +3 -3
  145. package/dist/{send-CVxxEpDB.mjs → send-BmpDlw9O.mjs} +4 -4
  146. package/dist/{set-DFolTjbd.mjs → set-DUWrSza9.mjs} +5 -5
  147. package/dist/{set-active-BD8L1lPX.mjs → set-active-BiUlbNI5.mjs} +5 -5
  148. package/dist/{setting-DyhaeICs.mjs → setting-B1KBQN3M.mjs} +4 -4
  149. package/dist/{setup-BbDQN8fe.mjs → setup-CVaNVwOd.mjs} +4 -4
  150. package/dist/{signal-CMd0EFUa.mjs → signal-GhGmuHfx.mjs} +11 -2
  151. package/dist/{list-UhpKG6_m.mjs → skill-list-DTnDhnL5.mjs} +17 -46
  152. package/dist/{skills--vK6J-e4.mjs → skills-BWrAlj9l.mjs} +3 -3
  153. package/dist/{skills-DTCrMcix.mjs → skills-DkDsSH5F.mjs} +102 -14
  154. package/dist/snippet-CG75L2DS.mjs +19 -0
  155. package/dist/{stash-D0S4JmAz.mjs → stash-DMm8YF8V.mjs} +4 -8
  156. package/dist/{status-hL1am-HV.mjs → status-BzEQjQ_t.mjs} +12 -11
  157. package/dist/{status-BhswxJL1.mjs → status-ClWsQD6v.mjs} +9 -7
  158. package/dist/stream-McixcoUl.mjs +7 -0
  159. package/dist/{subscription-_d5fB45F.mjs → subscription-CdFn2hre.mjs} +6 -6
  160. package/dist/{subscriptions-s4TF6Ax3.mjs → subscriptions-DBda1pE5.mjs} +5 -5
  161. package/dist/{summary-CsPvcUwW.mjs → summary-B4GPiuqD.mjs} +4 -4
  162. package/dist/{sync-schema-DaZ_MV-u.mjs → sync-schema-DsIM5g2U.mjs} +5 -5
  163. package/dist/{table-DYoC1kPn.mjs → table-D4Alrrwh.mjs} +5 -5
  164. package/dist/timeline-DmM0BuX8.mjs +21 -0
  165. package/dist/{timeline-event-CNQdCTDg.mjs → timeline-event-DWIh3Tdt.mjs} +6 -6
  166. package/dist/transform-BcV_XlSX.mjs +28 -0
  167. package/dist/{transform-DoTyyXAu.mjs → transform-Bk0D0nIs.mjs} +1 -1
  168. package/dist/{transform-D3QX0jxA.mjs → transform-DpuG-ON3.mjs} +26 -5
  169. package/dist/{transform-job-50GZHhKH.mjs → transform-job-AaMZRxAq.mjs} +1 -1
  170. package/dist/{transform-job-DRrK28IH.mjs → transform-job-CCguL6LP.mjs} +41 -4
  171. package/dist/transform-job-CjtwBGoM.mjs +22 -0
  172. package/dist/{transform-tag-_tgwlsdB.mjs → transform-tag-DJ3_bksm.mjs} +5 -5
  173. package/dist/{transforms-oU4zizbO.mjs → transforms-Dg2MfB2a.mjs} +6 -6
  174. package/dist/{tree-CH-f3bjP.mjs → tree-BQL0f7YX.mjs} +4 -5
  175. package/dist/{unpublish-BUl9RU5C.mjs → unpublish-DfSvb_Rs.mjs} +4 -7
  176. package/dist/{update-D-NE60AV.mjs → update-B-hRR8gW.mjs} +5 -5
  177. package/dist/{update-CO4m4wH3.mjs → update-BCgAyfj_.mjs} +6 -6
  178. package/dist/{update-BzMDeZiU.mjs → update-Bhmli02m.mjs} +5 -5
  179. package/dist/{update-CvOO8TED.mjs → update-BxIyFtrX.mjs} +5 -5
  180. package/dist/{update-BiFDBcEH.mjs → update-CDo0Orvu.mjs} +5 -5
  181. package/dist/{update-BCS5FxKr.mjs → update-CKoBDTL7.mjs} +9 -9
  182. package/dist/{update-CmDTljK-.mjs → update-CiYxcf8M.mjs} +7 -7
  183. package/dist/{update-CHNSUHK4.mjs → update-Cr5zHb0D.mjs} +5 -5
  184. package/dist/{update-Nfi44RrE.mjs → update-CtDHMxW8.mjs} +6 -6
  185. package/dist/{update-bD_Jh5-s.mjs → update-D1QdfpKR.mjs} +5 -5
  186. package/dist/{update-BZPllQoR.mjs → update-D4qdTlLF.mjs} +5 -5
  187. package/dist/{update-C4YJQFDS.mjs → update-DBGaJDsj.mjs} +5 -5
  188. package/dist/{update-tX9mKBN_.mjs → update-Izqip6jY.mjs} +9 -9
  189. package/dist/{update-cYkvbqK8.mjs → update-NZhIjTCf.mjs} +5 -5
  190. package/dist/{update-dashcard-C3TuYO_k.mjs → update-dashcard-D5b971AO.mjs} +7 -7
  191. package/dist/{update-CVPAwJaH.mjs → update-sYLQIUgh.mjs} +6 -6
  192. package/dist/{upgrade-DXMV4AyP.mjs → upgrade-CD1xtsIv.mjs} +6 -8
  193. package/dist/upload-BUd3MG90.mjs +23 -0
  194. package/dist/upload-C3z5ZaXA.mjs +24 -0
  195. package/dist/upload-DzGTlldn.mjs +13 -0
  196. package/dist/upload-akKFxpVA.mjs +39 -0
  197. package/dist/{uuid-BJkDWj9p.mjs → uuid-oVdJ62eA.mjs} +3 -4
  198. package/dist/{validate-BWchyW0V.mjs → validate-CWd6l6KZ.mjs} +1 -1
  199. package/dist/{validate-query-DaGYSmpQ.mjs → validate-query-Boi8-cAP.mjs} +2 -3
  200. package/dist/{values-Dxf1JEoA.mjs → values-DLwZl-P8.mjs} +4 -4
  201. package/dist/{verify-K96rItG5.mjs → verify-CH9Tw8yv.mjs} +3 -18
  202. package/dist/{wait-flags-DWEF9tX4.mjs → wait-flags-DiQ_kRjZ.mjs} +2 -2
  203. package/dist/{wait-DoMDH226.mjs → wait-rfTdQWdi.mjs} +5 -8
  204. package/package.json +1 -1
  205. package/skill-data/core/SKILL.md +16 -5
  206. package/skill-data/dashboard/SKILL.md +2 -2
  207. package/skill-data/data-workflow/references/building-clean-tables.md +6 -2
  208. package/skill-data/data-workflow/references/reusable-definitions.md +11 -3
  209. package/skill-data/document/SKILL.md +4 -1
  210. package/skill-data/git-sync/SKILL.md +5 -0
  211. package/skill-data/mbql/SKILL.md +1 -1
  212. package/skill-data/mbql/references/operators.md +20 -15
  213. package/skill-data/metadata/SKILL.md +1 -1
  214. package/skill-data/metadata/references/semantic-types.md +7 -1
  215. package/skill-data/native-sql/references/template-tags.md +6 -2
  216. package/skill-data/notification/SKILL.md +7 -1
  217. package/skill-data/transform/SKILL.md +12 -2
  218. package/skill-data/visualization/SKILL.md +11 -3
  219. package/skill-data/visualization/references/settings.md +6 -4
  220. package/skills/metabase-cli/SKILL.md +1 -1
  221. package/dist/card-CHI2bmds.mjs +0 -24
  222. package/dist/collection-CY0AB99E.mjs +0 -20
  223. package/dist/document-BbskZPTT.mjs +0 -19
  224. package/dist/get-CvI--9S_.mjs +0 -80
  225. package/dist/git-sync-MQQYRYLg.mjs +0 -28
  226. package/dist/library-ClLgrAXy.mjs +0 -19
  227. package/dist/network-error-CEb9ymDW.mjs +0 -423
  228. package/dist/predicates-Bkm2IoeX.mjs +0 -170
  229. package/dist/snippet-DRwKb2x7.mjs +0 -19
  230. package/dist/timeline-xlDbEKWg.mjs +0 -21
  231. package/dist/transform-Bs0EWijQ.mjs +0 -28
  232. package/dist/transform-job-BcLChRup.mjs +0 -22
  233. package/dist/upload-CH632qW6.mjs +0 -46
  234. package/dist/upload-Dey_8rLf.mjs +0 -13
package/dist/cli.mjs CHANGED
@@ -1,10 +1,338 @@
1
1
  #!/usr/bin/env node
2
- import { i as ConfigError, m as toMetabaseError, n as AbortError, t as isPlainObject } from "./predicates-Bkm2IoeX.mjs";
3
2
  import { defineCommand, renderUsage, runMain } from "citty";
4
- import { z } from "zod";
3
+ import { ZodError, core, z } from "zod";
5
4
  import tls from "node:tls";
6
5
  import { confirm, isCancel, password, select, text } from "@clack/prompts";
7
6
  import Table from "cli-table3";
7
+ //#region ../client/src/json-pointer.ts
8
+ function escapeJsonPointerSegment(key) {
9
+ if (typeof key === "number") return String(key);
10
+ return (typeof key === "symbol" ? key.toString() : key).replaceAll("~", "~0").replaceAll("/", "~1");
11
+ }
12
+ //#endregion
13
+ //#region ../client/src/domain/session-properties.ts
14
+ const ServerVersion = z.object({
15
+ tag: z.string(),
16
+ date: z.string().optional(),
17
+ hash: z.string().optional()
18
+ }).loose();
19
+ const TokenFeatures = z.record(z.string(), z.boolean());
20
+ const SessionProperties = z.object({
21
+ version: ServerVersion,
22
+ "token-features": TokenFeatures.optional()
23
+ }).loose();
24
+ //#endregion
25
+ //#region ../client/src/version/features.ts
26
+ const FEATURE_RULES = {
27
+ transforms: { since: 59 },
28
+ transformJobActivation: { since: 61 },
29
+ measures: { since: 59 },
30
+ library: {
31
+ since: 59,
32
+ tokenFeature: "library"
33
+ },
34
+ remoteSync: {
35
+ since: 60,
36
+ tokenFeature: "remote_sync"
37
+ },
38
+ contentTranslation: {
39
+ since: 58,
40
+ tokenFeature: "content_translation"
41
+ },
42
+ transformTargetTableId: { since: 61 },
43
+ transformTargetTableLinkedOnCreate: {
44
+ since: 61,
45
+ until: 61
46
+ },
47
+ transformJobRunIdIsNumeric: { since: 64 },
48
+ libraryChildrenCarryType: { since: 62 },
49
+ collectionItemsTotalOnEmptyPage: { since: 64 },
50
+ invalidMbqlIsBadRequest: { since: 59 },
51
+ boxplotDisplay: { since: 59 },
52
+ nativeTableTemplateTag: { since: 59 },
53
+ smartLinkMeasureModel: { since: 60 },
54
+ dashboardSubscriptionFilters: {
55
+ since: 58,
56
+ tokenFeature: "dashboard_subscription_filters"
57
+ }
58
+ };
59
+ function isFeatureName(name) {
60
+ return Object.hasOwn(FEATURE_RULES, name);
61
+ }
62
+ const FEATURE_NAMES = Object.keys(FEATURE_RULES).filter(isFeatureName);
63
+ const Features = z.record(z.enum(FEATURE_NAMES), z.boolean());
64
+ function evaluateFeatures(effectiveMajor, tokenFeatures) {
65
+ const entries = FEATURE_NAMES.map((name) => [name, ruleHolds(FEATURE_RULES[name], effectiveMajor, tokenFeatures)]);
66
+ return Features.parse(Object.fromEntries(entries));
67
+ }
68
+ function ruleHolds(rule, effectiveMajor, tokenFeatures) {
69
+ return ruleGap(rule, effectiveMajor, tokenFeatures) === null;
70
+ }
71
+ function ruleGap(rule, effectiveMajor, tokenFeatures) {
72
+ if (effectiveMajor < rule.since) return { kind: "version" };
73
+ if (rule.until !== void 0 && effectiveMajor > rule.until) return { kind: "version" };
74
+ if (rule.tokenFeature === void 0) return null;
75
+ return tokenFeatures !== null && tokenFeatures[rule.tokenFeature] === true ? null : {
76
+ kind: "token",
77
+ tokenFeature: rule.tokenFeature
78
+ };
79
+ }
80
+ //#endregion
81
+ //#region ../client/src/version/tag.ts
82
+ const ParsedVersion = z.object({
83
+ tag: z.string(),
84
+ major: z.number().int().nonnegative(),
85
+ patch: z.number().int().nonnegative()
86
+ });
87
+ const Edition = z.enum(["oss", "ee"]);
88
+ const TAG = /^v?([01])\.(\d+)\.(\d+)(?:\.\d+)?(?:-([0-9A-Za-z.-]+))?$/;
89
+ const OSS_EDITION_NUMBER = "0";
90
+ const DEV_BUILD_SUFFIX = "SNAPSHOT";
91
+ function tagParts(tag) {
92
+ const match = TAG.exec(tag);
93
+ if (match === null) return null;
94
+ const [, editionNumber, major, patch, prerelease] = match;
95
+ if (editionNumber === void 0 || major === void 0 || patch === void 0) return null;
96
+ return {
97
+ edition: editionNumber === OSS_EDITION_NUMBER ? "oss" : "ee",
98
+ major: Number(major),
99
+ patch: Number(patch),
100
+ prerelease: prerelease ?? null
101
+ };
102
+ }
103
+ function tryParseTag(tag) {
104
+ const parts = tagParts(tag);
105
+ if (parts === null || parts.prerelease === DEV_BUILD_SUFFIX) return null;
106
+ return {
107
+ tag,
108
+ major: parts.major,
109
+ patch: parts.patch
110
+ };
111
+ }
112
+ function editionFromTag(tag) {
113
+ const parts = tagParts(tag);
114
+ return parts === null ? null : parts.edition;
115
+ }
116
+ //#endregion
117
+ //#region ../client/src/version/profile.ts
118
+ const KNOWN_RANGE = {
119
+ min: 58,
120
+ max: 63
121
+ };
122
+ const Skew = z.enum([
123
+ "supported",
124
+ "newer-than-known",
125
+ "unknown"
126
+ ]);
127
+ z.object({
128
+ version: ParsedVersion.nullable(),
129
+ buildDate: z.string().nullable(),
130
+ hash: z.string().nullable(),
131
+ edition: Edition,
132
+ tokenFeatures: TokenFeatures.nullable(),
133
+ features: Features,
134
+ skew: Skew
135
+ });
136
+ function createServerProfile(info) {
137
+ const placement = place(info.version);
138
+ return {
139
+ version: info.version,
140
+ buildDate: info.date,
141
+ hash: info.hash,
142
+ edition: detectEdition(info),
143
+ tokenFeatures: info.tokenFeatures,
144
+ features: evaluateFeatures(placement.effectiveMajor, info.tokenFeatures),
145
+ skew: placement.skew
146
+ };
147
+ }
148
+ function featureGap(profile, feature) {
149
+ const placement = place(profile.version);
150
+ return ruleGap(FEATURE_RULES[feature], placement.effectiveMajor, profile.tokenFeatures);
151
+ }
152
+ function place(version) {
153
+ if (version === null) return {
154
+ effectiveMajor: KNOWN_RANGE.max + 1,
155
+ skew: "unknown"
156
+ };
157
+ if (version.major > KNOWN_RANGE.max) return {
158
+ effectiveMajor: KNOWN_RANGE.max + 1,
159
+ skew: "newer-than-known"
160
+ };
161
+ return {
162
+ effectiveMajor: version.major,
163
+ skew: "supported"
164
+ };
165
+ }
166
+ function detectEdition(info) {
167
+ if (info.edition !== null) return info.edition;
168
+ return grantsAnyFeature(info.tokenFeatures) ? "ee" : "oss";
169
+ }
170
+ function grantsAnyFeature(tokenFeatures) {
171
+ return tokenFeatures !== null && Object.values(tokenFeatures).some((enabled) => enabled);
172
+ }
173
+ //#endregion
174
+ //#region ../client/src/errors.ts
175
+ var MetabaseError = class extends Error {
176
+ get userMessage() {
177
+ return this.message;
178
+ }
179
+ };
180
+ var NetworkError = class extends MetabaseError {
181
+ category = "network";
182
+ isRetryable = true;
183
+ developerDetail;
184
+ constructor(message, developerDetail) {
185
+ super(message);
186
+ this.name = "NetworkError";
187
+ this.developerDetail = developerDetail;
188
+ }
189
+ };
190
+ var TimeoutError = class extends MetabaseError {
191
+ category = "timeout";
192
+ isRetryable = true;
193
+ developerDetail;
194
+ constructor(message, developerDetail) {
195
+ super(message);
196
+ this.name = "TimeoutError";
197
+ this.developerDetail = developerDetail;
198
+ }
199
+ };
200
+ var ValidationError = class extends MetabaseError {
201
+ category = "validation";
202
+ isRetryable = false;
203
+ developerDetail;
204
+ constructor(message, developerDetail) {
205
+ super(message);
206
+ this.name = "ValidationError";
207
+ this.developerDetail = developerDetail;
208
+ }
209
+ get userMessage() {
210
+ const issues = this.developerDetail.zodIssues;
211
+ if (issues.length === 0) return this.message;
212
+ return `${this.message}\n${formatIssueLines(issues, VALIDATION_ISSUE_FORMAT)}`;
213
+ }
214
+ };
215
+ const VALIDATION_MAX_ISSUES = 10;
216
+ const RESPONSE_SHAPE_MAX_ISSUES = 5;
217
+ const VALIDATION_ISSUE_FORMAT = {
218
+ max: VALIDATION_MAX_ISSUES,
219
+ formatIssue: (issue) => `${formatZodIssuePointer(issue.path)}: ${issue.message}`
220
+ };
221
+ const RESPONSE_SHAPE_ISSUE_FORMAT = {
222
+ max: RESPONSE_SHAPE_MAX_ISSUES,
223
+ formatIssue: formatZodIssue
224
+ };
225
+ function formatIssueLines(issues, format) {
226
+ const head = issues.slice(0, format.max).map(format.formatIssue);
227
+ const overflow = issues.length - format.max;
228
+ if (overflow > 0) head.push(`... and ${overflow} more`);
229
+ return head.map((line) => ` ${line}`).join("\n");
230
+ }
231
+ function formatZodIssuePointer(path) {
232
+ if (path.length === 0) return "/";
233
+ return path.map((key) => `/${escapeJsonPointerSegment(key)}`).join("");
234
+ }
235
+ const RESPONSE_SHAPE_LEAD_UNKNOWN_VERSION = "Metabase returned unexpected response shape";
236
+ var ResponseShapeError = class ResponseShapeError extends MetabaseError {
237
+ category = "response-shape";
238
+ isRetryable = false;
239
+ developerDetail;
240
+ constructor(message, developerDetail) {
241
+ super(message);
242
+ this.name = "ResponseShapeError";
243
+ this.developerDetail = developerDetail;
244
+ }
245
+ static fromZodIssues(developerDetail) {
246
+ return new ResponseShapeError(formatResponseShapeMessage(developerDetail), developerDetail);
247
+ }
248
+ };
249
+ function formatResponseShapeMessage(detail) {
250
+ const { zodIssues: issues, serverTag, serverSkew } = detail;
251
+ const lead = serverTag === null ? RESPONSE_SHAPE_LEAD_UNKNOWN_VERSION : `On Metabase ${describeServer(serverTag, serverSkew)} the response shape was unexpected`;
252
+ if (issues.length === 0) return lead;
253
+ return `${lead}:\n${formatIssueLines(issues, RESPONSE_SHAPE_ISSUE_FORMAT)}`;
254
+ }
255
+ function describeServer(tag, skew) {
256
+ if (skew === "newer-than-known") return `${tag} (newer than this client supports, up to v${KNOWN_RANGE.max})`;
257
+ return tag;
258
+ }
259
+ var ConfigError = class extends MetabaseError {
260
+ category = "config";
261
+ isRetryable = false;
262
+ developerDetail = null;
263
+ constructor(message) {
264
+ super(message);
265
+ this.name = "ConfigError";
266
+ }
267
+ };
268
+ var InternalError = class extends MetabaseError {
269
+ category = "internal";
270
+ isRetryable = false;
271
+ developerDetail = null;
272
+ constructor(message) {
273
+ super(message);
274
+ this.name = "InternalError";
275
+ }
276
+ };
277
+ var AbortError = class extends MetabaseError {
278
+ category = "abort";
279
+ isRetryable = false;
280
+ developerDetail = null;
281
+ constructor(message = "aborted") {
282
+ super(message);
283
+ this.name = "AbortError";
284
+ }
285
+ };
286
+ var ChainedRequestError = class extends MetabaseError {
287
+ cause;
288
+ constructor(message, cause) {
289
+ super(message);
290
+ this.name = "ChainedRequestError";
291
+ this.cause = cause;
292
+ }
293
+ get category() {
294
+ return this.cause.category;
295
+ }
296
+ get isRetryable() {
297
+ return this.cause.isRetryable;
298
+ }
299
+ get developerDetail() {
300
+ return this.cause.developerDetail;
301
+ }
302
+ };
303
+ var UnknownError = class extends MetabaseError {
304
+ category = "unknown";
305
+ isRetryable = false;
306
+ developerDetail;
307
+ constructor(input) {
308
+ super(input.originalMessage);
309
+ this.name = "UnknownError";
310
+ this.developerDetail = input;
311
+ }
312
+ };
313
+ function toMetabaseError(error) {
314
+ if (error instanceof MetabaseError) return error;
315
+ if (error instanceof ZodError) return new ConfigError(error.issues.map(formatZodIssue).join("; "));
316
+ if (error instanceof Error) return new UnknownError({
317
+ originalMessage: error.message,
318
+ stack: error.stack ?? null
319
+ });
320
+ return new UnknownError({
321
+ originalMessage: String(error),
322
+ stack: null
323
+ });
324
+ }
325
+ function formatZodIssue(issue) {
326
+ const path = core.toDotPath(issue.path);
327
+ return path === "" ? issue.message : `${path}: ${issue.message}`;
328
+ }
329
+ function isFileNotFoundError(value) {
330
+ return value instanceof Error && "code" in value && value.code === "ENOENT";
331
+ }
332
+ function errorMessage(value) {
333
+ return value instanceof Error ? value.message : String(value);
334
+ }
335
+ //#endregion
8
336
  //#region src/runtime/citty.ts
9
337
  async function resolveCitty(value) {
10
338
  if (value === void 0) return;
@@ -32,7 +360,16 @@ function flagConsumesValue(token, argsDef) {
32
360
  //#region src/output/types.ts
33
361
  const DEFAULT_MAX_BYTES = 24576;
34
362
  function listEnvelopeSchema(item) {
363
+ return z.object(listEnvelopeShape(item));
364
+ }
365
+ function listEnvelopeSchemaWithExtras(item, extras) {
35
366
  return z.object({
367
+ ...listEnvelopeShape(item),
368
+ ...extras
369
+ });
370
+ }
371
+ function listEnvelopeShape(item) {
372
+ return {
36
373
  data: z.array(item).describe("The items in this window."),
37
374
  returned: z.number().int().nonnegative().describe("Number of items in `data`; a short window is not proof the walk is over."),
38
375
  offset: z.number().int().nonnegative().describe("Index of the first item in `data` within the full result set."),
@@ -44,7 +381,7 @@ function listEnvelopeSchema(item) {
44
381
  reason: z.literal("max_bytes"),
45
382
  bytes: z.number().int().nonnegative()
46
383
  }).optional().describe("Present when the `--max-bytes` cap cut the output, not when the data ran out; its `bytes` is what the untruncated answer would have measured, so narrow rows with `--fields` rather than raising the cap.")
47
- });
384
+ };
48
385
  }
49
386
  //#endregion
50
387
  //#region src/commands/flags.ts
@@ -175,7 +512,7 @@ function trustSystemCa() {
175
512
  //#endregion
176
513
  //#region package.json
177
514
  var name = "@metabase/cli";
178
- var version = "0.3.0";
515
+ var version = "0.3.1-alpha.versioning.9ac5f50";
179
516
  var description = "Metabase CLI";
180
517
  //#endregion
181
518
  //#region src/runtime/command-augment.ts
@@ -195,35 +532,36 @@ const main = defineCommand({
195
532
  description
196
533
  },
197
534
  subCommands: {
198
- auth: () => import("./auth-Dltxua89.mjs").then((mod) => mod.default),
199
- db: () => import("./db-DsfojyeH.mjs").then((mod) => mod.default),
200
- table: () => import("./table-DYoC1kPn.mjs").then((mod) => mod.default),
201
- field: () => import("./field-Zau6Hc6X.mjs").then((mod) => mod.default),
202
- upload: () => import("./upload-Dey_8rLf.mjs").then((mod) => mod.default),
203
- card: () => import("./card-CHI2bmds.mjs").then((mod) => mod.default),
204
- dashboard: () => import("./dashboard-BHJBoaG7.mjs").then((mod) => mod.default),
205
- subscription: () => import("./subscription-_d5fB45F.mjs").then((mod) => mod.default),
206
- alert: () => import("./alert-DT-ee7yf.mjs").then((mod) => mod.default),
207
- collection: () => import("./collection-CY0AB99E.mjs").then((mod) => mod.default),
208
- library: () => import("./library-Bsm5KsFF.mjs").then((mod) => mod.default),
209
- document: () => import("./document-BbskZPTT.mjs").then((mod) => mod.default),
210
- transform: () => import("./transform-Bs0EWijQ.mjs").then((mod) => mod.default),
211
- "transform-job": () => import("./transform-job-BcLChRup.mjs").then((mod) => mod.default),
212
- "transform-tag": () => import("./transform-tag-_tgwlsdB.mjs").then((mod) => mod.default),
213
- setting: () => import("./setting-DyhaeICs.mjs").then((mod) => mod.default),
214
- search: () => import("./search-DmGScXs8.mjs").then((mod) => mod.default),
215
- "git-sync": () => import("./git-sync-MQQYRYLg.mjs").then((mod) => mod.default),
216
- setup: () => import("./setup-BbDQN8fe.mjs").then((mod) => mod.default),
217
- snippet: () => import("./snippet-DRwKb2x7.mjs").then((mod) => mod.default),
218
- segment: () => import("./segment-BzUGM2Fr.mjs").then((mod) => mod.default),
219
- measure: () => import("./measure-BsYv0p26.mjs").then((mod) => mod.default),
220
- timeline: () => import("./timeline-xlDbEKWg.mjs").then((mod) => mod.default),
221
- "timeline-event": () => import("./timeline-event-CNQdCTDg.mjs").then((mod) => mod.default),
222
- eid: () => import("./eid-WTZmDdsr.mjs").then((mod) => mod.default),
223
- query: () => import("./query-Dc__-KJH.mjs").then((mod) => mod.default),
224
- uuid: () => import("./uuid-BJkDWj9p.mjs").then((mod) => mod.default),
225
- upgrade: () => import("./upgrade-DXMV4AyP.mjs").then((mod) => mod.default),
226
- skills: () => import("./skills--vK6J-e4.mjs").then((mod) => mod.default)
535
+ auth: () => import("./auth-CefYEPP5.mjs").then((mod) => mod.default),
536
+ db: () => import("./db-C7UTd-6P.mjs").then((mod) => mod.default),
537
+ table: () => import("./table-D4Alrrwh.mjs").then((mod) => mod.default),
538
+ field: () => import("./field-CzHBOPER.mjs").then((mod) => mod.default),
539
+ upload: () => import("./upload-DzGTlldn.mjs").then((mod) => mod.default),
540
+ "content-translation": () => import("./content-translation-D7POzJJ6.mjs").then((mod) => mod.default),
541
+ card: () => import("./card-BRarvKYX.mjs").then((mod) => mod.default),
542
+ dashboard: () => import("./dashboard-BudI952R.mjs").then((mod) => mod.default),
543
+ subscription: () => import("./subscription-CdFn2hre.mjs").then((mod) => mod.default),
544
+ alert: () => import("./alert-D1u2MVZj.mjs").then((mod) => mod.default),
545
+ collection: () => import("./collection-CKeO8X7U.mjs").then((mod) => mod.default),
546
+ library: () => import("./library-uzyHWBap.mjs").then((mod) => mod.default),
547
+ document: () => import("./document-BoILnE_1.mjs").then((mod) => mod.default),
548
+ transform: () => import("./transform-BcV_XlSX.mjs").then((mod) => mod.default),
549
+ "transform-job": () => import("./transform-job-CjtwBGoM.mjs").then((mod) => mod.default),
550
+ "transform-tag": () => import("./transform-tag-DJ3_bksm.mjs").then((mod) => mod.default),
551
+ setting: () => import("./setting-B1KBQN3M.mjs").then((mod) => mod.default),
552
+ search: () => import("./search-J4RwCof-.mjs").then((mod) => mod.default),
553
+ "git-sync": () => import("./git-sync-CdN0Maun.mjs").then((mod) => mod.default),
554
+ setup: () => import("./setup-CVaNVwOd.mjs").then((mod) => mod.default),
555
+ snippet: () => import("./snippet-CG75L2DS.mjs").then((mod) => mod.default),
556
+ segment: () => import("./segment-XXTjU0eG.mjs").then((mod) => mod.default),
557
+ measure: () => import("./measure-CdA8Nl3Z.mjs").then((mod) => mod.default),
558
+ timeline: () => import("./timeline-DmM0BuX8.mjs").then((mod) => mod.default),
559
+ "timeline-event": () => import("./timeline-event-DWIh3Tdt.mjs").then((mod) => mod.default),
560
+ eid: () => import("./eid-D-BbtWjt.mjs").then((mod) => mod.default),
561
+ query: () => import("./query-BKSM-pbi.mjs").then((mod) => mod.default),
562
+ uuid: () => import("./uuid-oVdJ62eA.mjs").then((mod) => mod.default),
563
+ upgrade: () => import("./upgrade-CD1xtsIv.mjs").then((mod) => mod.default),
564
+ skills: () => import("./skills-BWrAlj9l.mjs").then((mod) => mod.default)
227
565
  }
228
566
  });
229
567
  setMetabaseAugment(main, {
@@ -238,6 +576,7 @@ setMetabaseAugment(main, {
238
576
  }],
239
577
  inputSchema: null,
240
578
  outputSchema: null,
579
+ requires: null,
241
580
  capabilities: null
242
581
  });
243
582
  //#endregion
@@ -379,6 +718,11 @@ function jsonByteLength(value) {
379
718
  return Buffer.byteLength(JSON.stringify(value), "utf8");
380
719
  }
381
720
  //#endregion
721
+ //#region ../client/src/predicates.ts
722
+ function isPlainObject(value) {
723
+ return typeof value === "object" && value !== null && !Array.isArray(value);
724
+ }
725
+ //#endregion
382
726
  //#region src/output/projection.ts
383
727
  function projectForList(item, view, opts) {
384
728
  const full = opts.format === "text" && opts.fields === void 0 ? false : opts.full;
@@ -512,8 +856,11 @@ function renderSummary(item, view, summaryText, opts) {
512
856
  process.stdout.write(body);
513
857
  }
514
858
  function renderList(envelope, view, opts) {
859
+ renderListWithExtras(envelope, {}, view, opts);
860
+ }
861
+ function renderListWithExtras(envelope, extras, view, opts) {
515
862
  if (opts.format === "json") {
516
- renderJsonEnvelope(envelope, view, opts);
863
+ renderJsonEnvelope(envelope, extras, view, opts);
517
864
  return;
518
865
  }
519
866
  if (envelope.data.length === 0) {
@@ -546,8 +893,11 @@ function projectedEnvelope(envelope, view, opts) {
546
893
  data: envelope.data.map((item) => projectForList(item, view, opts))
547
894
  };
548
895
  }
549
- function renderJsonEnvelope(envelope, view, opts) {
550
- const capped = capListEnvelope(projectedEnvelope(envelope, view, opts), opts.maxBytes);
896
+ function renderJsonEnvelope(envelope, extras, view, opts) {
897
+ const capped = capListEnvelope({
898
+ ...projectedEnvelope(envelope, view, opts),
899
+ ...extras
900
+ }, opts.maxBytes);
551
901
  const ordered = {
552
902
  returned: capped.returned,
553
903
  offset: capped.offset,
@@ -556,6 +906,7 @@ function renderJsonEnvelope(envelope, view, opts) {
556
906
  has_more: capped.has_more,
557
907
  next_offset: capped.next_offset,
558
908
  truncated: capped.truncated,
909
+ ...extras,
559
910
  data: capped.data
560
911
  };
561
912
  process.stdout.write(serializeJson(ordered, stdoutPretty()) + "\n");
@@ -653,35 +1004,169 @@ function writeJsonError(handled, exitCode, verbose) {
653
1004
  process.stderr.write(serializeJson(envelope, stderrPretty()) + "\n");
654
1005
  }
655
1006
  //#endregion
656
- //#region ../client/src/version/capabilities.ts
657
- const Capabilities = z.object({
1007
+ //#region ../client/src/version/capability-summary.ts
1008
+ const CapabilitySummary = z.object({
658
1009
  minVersion: z.number(),
659
1010
  tokenFeature: z.string().optional()
660
1011
  });
661
- const BASELINE_CAPABILITIES = Object.freeze({ minVersion: 58 });
662
- function mergeCapabilities(overrides) {
663
- if (overrides === void 0) return BASELINE_CAPABILITIES;
664
- return {
665
- minVersion: overrides.minVersion ?? BASELINE_CAPABILITIES.minVersion,
666
- ...overrides.tokenFeature === void 0 ? {} : { tokenFeature: overrides.tokenFeature }
1012
+ function summarizeCapabilities(features) {
1013
+ const rules = features.map((feature) => FEATURE_RULES[feature]);
1014
+ const minVersion = Math.max(KNOWN_RANGE.min, ...rules.map((rule) => rule.since));
1015
+ const tokenFeatures = [...new Set(rules.flatMap((rule) => rule.tokenFeature === void 0 ? [] : [rule.tokenFeature]))];
1016
+ if (tokenFeatures.length > 1) throw new Error(`a capability summary names one premium feature, got ${tokenFeatures.length}: ${tokenFeatures.join(", ")}`);
1017
+ const [tokenFeature] = tokenFeatures;
1018
+ return tokenFeature === void 0 ? { minVersion } : {
1019
+ minVersion,
1020
+ tokenFeature
667
1021
  };
668
1022
  }
669
- function checkCapabilities(info, required) {
670
- if (info.version === null) return {
671
- reason: "unknown-version",
672
- detail: "Could not detect Metabase server version. Proceeding without preflight check; failures may produce confusing errors."
673
- };
674
- if (info.version.major < required.minVersion) return {
675
- reason: "version-too-old",
676
- detail: `This operation requires Metabase v${required.minVersion}+ (this server is ${info.version.tag}). Upgrade Metabase to use it.`
677
- };
678
- if (required.tokenFeature !== void 0) {
679
- if (!(info.tokenFeatures?.[required.tokenFeature] === true)) return {
680
- reason: "missing-token-feature",
681
- detail: `This operation requires the '${required.tokenFeature}' premium feature (not enabled on this server).`
682
- };
683
- }
684
- return null;
1023
+ //#endregion
1024
+ //#region ../client/src/version/requirements.ts
1025
+ const METHOD_REQUIREMENTS = {
1026
+ "card.list": [],
1027
+ "card.get": [],
1028
+ "card.create": [],
1029
+ "card.update": [],
1030
+ "card.archive": [],
1031
+ "card.query": [],
1032
+ "card.exportQuery": [],
1033
+ "collection.list": [],
1034
+ "collection.listWithLibrary": [],
1035
+ "collection.get": [],
1036
+ "collection.create": [],
1037
+ "collection.update": [],
1038
+ "collection.archive": [],
1039
+ "collection.itemPages": [],
1040
+ "collection.tree": [],
1041
+ "contentTranslation.download": ["contentTranslation"],
1042
+ "contentTranslation.upload": ["contentTranslation"],
1043
+ "dashboard.list": [],
1044
+ "dashboard.get": [],
1045
+ "dashboard.create": [],
1046
+ "dashboard.update": [],
1047
+ "dashboard.archive": [],
1048
+ "dashboard.updateDashcard": [],
1049
+ "dashboard.checkCardReferences": [],
1050
+ "dashboard.parameterValues": [],
1051
+ "dashboard.searchParameterValues": [],
1052
+ "database.list": [],
1053
+ "database.get": [],
1054
+ "database.schemas": [],
1055
+ "database.schemaTables": [],
1056
+ "database.syncSchema": [],
1057
+ "database.rescanValues": [],
1058
+ "dataset.query": [],
1059
+ "document.list": [],
1060
+ "document.get": [],
1061
+ "document.create": [],
1062
+ "document.update": [],
1063
+ "document.archive": [],
1064
+ "eidTranslation.translate": [],
1065
+ "field.get": [],
1066
+ "field.update": [],
1067
+ "field.summary": [],
1068
+ "field.values": [],
1069
+ "gitSync.currentTask": ["remoteSync"],
1070
+ "gitSync.cancelTask": ["remoteSync"],
1071
+ "gitSync.isDirty": ["remoteSync"],
1072
+ "gitSync.dirty": ["remoteSync"],
1073
+ "gitSync.hasRemoteChanges": ["remoteSync"],
1074
+ "gitSync.import": ["remoteSync"],
1075
+ "gitSync.export": ["remoteSync"],
1076
+ "gitSync.stash": ["remoteSync"],
1077
+ "gitSync.branches": ["remoteSync"],
1078
+ "gitSync.createBranch": ["remoteSync"],
1079
+ "gitSync.setCollectionSynced": ["remoteSync"],
1080
+ "gitSync.syncedCollections": ["remoteSync"],
1081
+ "gitSync.remoteUrl": [],
1082
+ "gitSync.branch": [],
1083
+ "gitSync.waitForTask": ["remoteSync"],
1084
+ "library.get": ["library"],
1085
+ "library.create": ["library"],
1086
+ "library.ensureDataCollectionId": ["library"],
1087
+ "library.publishTables": ["library"],
1088
+ "library.unpublishTables": ["library"],
1089
+ "measure.list": ["measures"],
1090
+ "measure.get": ["measures"],
1091
+ "measure.create": ["measures"],
1092
+ "measure.update": ["measures"],
1093
+ "measure.archive": ["measures"],
1094
+ "notification.list": [],
1095
+ "notification.get": [],
1096
+ "notification.create": [],
1097
+ "notification.update": [],
1098
+ "notification.archive": [],
1099
+ "notification.send": [],
1100
+ "pulse.list": [],
1101
+ "pulse.get": [],
1102
+ "pulse.create": [],
1103
+ "pulse.update": [],
1104
+ "pulse.archive": [],
1105
+ "search.query": [],
1106
+ "segment.list": [],
1107
+ "segment.get": [],
1108
+ "segment.create": [],
1109
+ "segment.update": [],
1110
+ "segment.archive": [],
1111
+ "setting.list": [],
1112
+ "setting.get": [],
1113
+ "setting.set": [],
1114
+ "setup.create": [],
1115
+ "snippet.list": [],
1116
+ "snippet.get": [],
1117
+ "snippet.create": [],
1118
+ "snippet.update": [],
1119
+ "snippet.archive": [],
1120
+ "table.list": [],
1121
+ "table.get": [],
1122
+ "table.update": [],
1123
+ "table.queryMetadata": [],
1124
+ "table.appendCsv": [],
1125
+ "table.replaceCsv": [],
1126
+ "timeline.list": [],
1127
+ "timeline.get": [],
1128
+ "timeline.events": [],
1129
+ "timeline.create": [],
1130
+ "timeline.update": [],
1131
+ "timeline.archive": [],
1132
+ "timeline.delete": [],
1133
+ "timelineEvent.get": [],
1134
+ "timelineEvent.create": [],
1135
+ "timelineEvent.update": [],
1136
+ "timelineEvent.archive": [],
1137
+ "timelineEvent.delete": [],
1138
+ "transform.list": ["transforms"],
1139
+ "transform.get": ["transforms"],
1140
+ "transform.create": ["transforms"],
1141
+ "transform.update": ["transforms"],
1142
+ "transform.delete": ["transforms"],
1143
+ "transform.deleteTable": ["transforms"],
1144
+ "transform.dependencies": ["transforms"],
1145
+ "transform.cancel": ["transforms"],
1146
+ "transform.getRun": ["transforms"],
1147
+ "transform.runPages": ["transforms"],
1148
+ "transform.run": ["transforms"],
1149
+ "transformJob.list": ["transforms"],
1150
+ "transformJob.get": ["transforms"],
1151
+ "transformJob.create": ["transforms"],
1152
+ "transformJob.update": ["transforms"],
1153
+ "transformJob.delete": ["transforms"],
1154
+ "transformJob.run": ["transforms"],
1155
+ "transformJob.transforms": ["transforms"],
1156
+ "transformJob.setActive": ["transformJobActivation", "transforms"],
1157
+ "transformTag.list": ["transforms"],
1158
+ "transformTag.create": ["transforms"],
1159
+ "transformTag.update": ["transforms"],
1160
+ "transformTag.delete": ["transforms"],
1161
+ "upload.createFromCsv": [],
1162
+ "user.current": []
1163
+ };
1164
+ function isMethodKey(key) {
1165
+ return Object.hasOwn(METHOD_REQUIREMENTS, key);
1166
+ }
1167
+ const METHOD_KEYS = Object.keys(METHOD_REQUIREMENTS).filter(isMethodKey);
1168
+ function methodRequirements(key) {
1169
+ return METHOD_REQUIREMENTS[key];
685
1170
  }
686
1171
  //#endregion
687
1172
  //#region src/runtime/command-help.ts
@@ -707,6 +1192,10 @@ const CommandHelpSkill = z.object({
707
1192
  skill: z.string(),
708
1193
  purpose: z.string()
709
1194
  });
1195
+ const CommandHelpRequires = z.object({
1196
+ methods: z.array(z.enum(METHOD_KEYS)),
1197
+ features: z.array(z.enum(FEATURE_NAMES))
1198
+ });
710
1199
  z.object({
711
1200
  command: z.string(),
712
1201
  description: z.string().nullable(),
@@ -716,7 +1205,8 @@ z.object({
716
1205
  args: z.array(CommandHelpArg),
717
1206
  inputSchema: z.unknown().nullable(),
718
1207
  outputSchema: z.unknown().nullable(),
719
- capabilities: Capabilities.nullable()
1208
+ requires: CommandHelpRequires.nullable(),
1209
+ capabilities: CapabilitySummary.nullable()
720
1210
  });
721
1211
  const CommandIndexEntry = z.object({
722
1212
  command: z.string(),
@@ -733,6 +1223,7 @@ const EMPTY_AUGMENT = {
733
1223
  skills: [],
734
1224
  inputSchema: null,
735
1225
  outputSchema: null,
1226
+ requires: null,
736
1227
  capabilities: null
737
1228
  };
738
1229
  async function buildHelpEntry(cmd, path) {
@@ -747,6 +1238,7 @@ async function buildHelpEntry(cmd, path) {
747
1238
  args: convertArgs(args),
748
1239
  inputSchema: augment.inputSchema ? z.toJSONSchema(augment.inputSchema) : null,
749
1240
  outputSchema: augment.outputSchema ? z.toJSONSchema(augment.outputSchema) : null,
1241
+ requires: augment.requires,
750
1242
  capabilities: augment.capabilities
751
1243
  };
752
1244
  if (augment.details !== null) entry.details = augment.details;
@@ -1058,4 +1550,4 @@ run().catch((error) => {
1058
1550
  reportError(error);
1059
1551
  });
1060
1552
  //#endregion
1061
- export { name as A, normalizeFlag as B, ENV_PROFILE as C, consumeLegacyEnvWarnings as D, ENV_URL as E, outputFlags as F, profileFlag as I, DEFAULT_MAX_BYTES as L, connectionFlags as M, listFlags as N, readEnv as O, listFlagsWithDefaultLimit as P, listEnvelopeSchema as R, ENV_DISABLE_KEYRING as S, ENV_SKIP_PREFLIGHT as T, toAliasArray as V, promptSelect as _, reportError as a, warn as b, renderSummary as c, MALFORMED_CELL as d, formatScalar as f, promptPassword as g, promptConfirm as h, mergeCapabilities as i, version as j, setMetabaseAugment as k, writeJson as l, projectForList as m, BASELINE_CAPABILITIES as n, renderItem as o, renderRows as p, checkCapabilities as r, renderList as s, interruptSignal as t, writeText as u, promptText as v, ENV_SKILLS_DIR as w, ENV_API_KEY as x, listTruncationNotice as y, flagConsumesValue as z };
1553
+ export { ValidationError as $, setMetabaseAugment as A, listEnvelopeSchemaWithExtras as B, ENV_DISABLE_KEYRING as C, ENV_URL as D, ENV_SKIP_PREFLIGHT as E, listFlagsWithDefaultLimit as F, ChainedRequestError as G, normalizeFlag as H, outputFlags as I, MetabaseError as J, ConfigError as K, profileFlag as L, version as M, connectionFlags as N, consumeLegacyEnvWarnings as O, listFlags as P, UnknownError as Q, DEFAULT_MAX_BYTES as R, ENV_API_KEY as S, ENV_SKILLS_DIR as T, toAliasArray as U, flagConsumesValue as V, AbortError as W, ResponseShapeError as X, NetworkError as Y, TimeoutError as Z, promptPassword as _, renderItem as a, featureGap as at, listTruncationNotice as b, renderSummary as c, editionFromTag as ct, MALFORMED_CELL as d, FEATURE_RULES as dt, errorMessage as et, formatScalar as f, Features as ft, promptConfirm as g, escapeJsonPointerSegment as gt, isPlainObject as h, TokenFeatures as ht, reportError as i, createServerProfile as it, name as j, readEnv as k, writeJson as l, tryParseTag as lt, projectForList as m, SessionProperties as mt, methodRequirements as n, KNOWN_RANGE as nt, renderList as o, Edition as ot, renderRows as p, isFeatureName as pt, InternalError as q, summarizeCapabilities as r, Skew as rt, renderListWithExtras as s, ParsedVersion as st, interruptSignal as t, isFileNotFoundError as tt, writeText as u, FEATURE_NAMES as ut, promptSelect as v, ENV_PROFILE as w, warn as x, promptText as y, listEnvelopeSchema as z };