@metabase/cli 0.1.0-alpha.workspaces-commands.aa383a1 → 0.1.0-alpha.workspaces-commands.935a64c

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 (179) hide show
  1. package/README.md +81 -78
  2. package/dist/add-collection-B-Ye-3rk.mjs +11 -0
  3. package/dist/{add-collection-Cvh_24_Q.mjs → add-collection-FNN_Arg9.mjs} +6 -6
  4. package/dist/{api-key-d2kBtC3S.mjs → api-key-3kWHdrkv.mjs} +1 -1
  5. package/dist/{archive-O0WoU8LU.mjs → archive-C-G9Nxoi.mjs} +6 -6
  6. package/dist/{archive-WgWmkexh.mjs → archive-CeBvAhT6.mjs} +6 -6
  7. package/dist/{archive-BbY8tyIA.mjs → archive-Ctx4ppbz.mjs} +5 -5
  8. package/dist/{archive-CMEk6RsU.mjs → archive-PiPTzqta.mjs} +6 -6
  9. package/dist/auth-yEUbA368.mjs +19 -0
  10. package/dist/{body-C2lo4Axp.mjs → body-DnyBxVKv.mjs} +3 -3
  11. package/dist/{branches-ohsIXufV.mjs → branches-fnskukyH.mjs} +8 -8
  12. package/dist/{cancel-eV9xzouo.mjs → cancel-BHS55uG8.mjs} +5 -5
  13. package/dist/{cancel-task-DEI788SO.mjs → cancel-task--Ql2riG6.mjs} +9 -9
  14. package/dist/{card-BOGKT258.mjs → card-B2ZlGpQP.mjs} +3 -2
  15. package/dist/card-Dnm0jydp.mjs +20 -0
  16. package/dist/{cards-B_XNja43.mjs → cards-Tqz7qbEd.mjs} +5 -5
  17. package/dist/cli.mjs +24 -24
  18. package/dist/collection-CXH6n3JD.mjs +19 -0
  19. package/dist/{create-Dh7YG1mO.mjs → create-BPqZI8eJ.mjs} +7 -7
  20. package/dist/{create-oFRJZRJW.mjs → create-Bn3BDzsS.mjs} +10 -10
  21. package/dist/{create-D5GQ3L7D.mjs → create-C4Fec2QG.mjs} +8 -8
  22. package/dist/create-DIEuYQS2.mjs +48 -0
  23. package/dist/{create-wIKFYXjw.mjs → create-DM5QcfYo.mjs} +9 -9
  24. package/dist/create-DX5SX5HJ.mjs +48 -0
  25. package/dist/{create-CVRcTydU.mjs → create-Ddk53JTY.mjs} +6 -6
  26. package/dist/{create-lYoy27zG.mjs → create-DnboeX4b.mjs} +6 -6
  27. package/dist/{create-BL84c0N2.mjs → create-QfYOXoyJ.mjs} +7 -7
  28. package/dist/{create-branch-NM1OQ9Vk.mjs → create-branch-BPTa-3oe.mjs} +9 -9
  29. package/dist/{create-lBZSfAKV.mjs → create-xCp5Qxzv.mjs} +9 -9
  30. package/dist/{credentials-dN7n9-oM.mjs → credentials-DDGZCExr.mjs} +8 -8
  31. package/dist/{current-task-1oigZEYp.mjs → current-task-CXqMeAkI.mjs} +9 -9
  32. package/dist/dashboard-B9zTXDYK.mjs +20 -0
  33. package/dist/{database-DiSMWtmg.mjs → database-CV_nC20t.mjs} +3 -3
  34. package/dist/db-D2koZa54.mjs +22 -0
  35. package/dist/{delete-D1Apu5tv.mjs → delete-ChZr_uHC.mjs} +7 -7
  36. package/dist/{delete-BV0Dawne.mjs → delete-DOJmKqAE.mjs} +7 -7
  37. package/dist/{delete-runtime-D8z0lCJ2.mjs → delete-runtime-BMzvfj_B.mjs} +2 -2
  38. package/dist/{delete-table-DQHUlwKv.mjs → delete-table-BbD1ux3D.mjs} +7 -7
  39. package/dist/{deprovision-osrI7qAP.mjs → deprovision-DR5NpXeq.mjs} +11 -11
  40. package/dist/{dirty-BTHmduNN.mjs → dirty-D7HBPBUv.mjs} +8 -8
  41. package/dist/{docker-m-PE5frg.mjs → docker-pmX_H1ii.mjs} +3 -3
  42. package/dist/{eid-CANLCfwr.mjs → eid-DVc2ebwX.mjs} +1 -1
  43. package/dist/{export-hg-kX3d5.mjs → export-Bc6K_0BX.mjs} +11 -11
  44. package/dist/field-ilGuKrWV.mjs +18 -0
  45. package/dist/{fields-B_QxZGbf.mjs → fields-CNsoNqGV.mjs} +5 -5
  46. package/dist/{flag-pair-Byca1x-Q.mjs → flag-pair-DtR1AiBQ.mjs} +1 -1
  47. package/dist/{get-Dxyz8B08.mjs → get-BL4-XDrc.mjs} +5 -5
  48. package/dist/{get-DQjJhZRm.mjs → get-BS3kP2wR.mjs} +5 -5
  49. package/dist/{get-BD7Vyb-k.mjs → get-BjzVuL-u.mjs} +6 -6
  50. package/dist/{get-CONAtf64.mjs → get-CKGYT_h9.mjs} +6 -6
  51. package/dist/{get-BBcrLO_W.mjs → get-CX_Ck6Nk.mjs} +5 -5
  52. package/dist/{get-huQZIpRI.mjs → get-CYZbQcOF.mjs} +6 -6
  53. package/dist/{get-Bp_SqgyX.mjs → get-CkYr30at.mjs} +5 -5
  54. package/dist/{get-D-ZPuk_T.mjs → get-Cxo5iHU_.mjs} +5 -5
  55. package/dist/{get-TRJ6QpYc.mjs → get-DfKxQ_oa.mjs} +5 -5
  56. package/dist/{get-lPU3jSyo.mjs → get-Dm4j4-C2.mjs} +5 -5
  57. package/dist/{get-slUdOmG4.mjs → get-IBjYDviZ.mjs} +6 -6
  58. package/dist/{get-BZcSoeSY.mjs → get-pklCz_0L.mjs} +5 -5
  59. package/dist/{get-run-WxHde6zO.mjs → get-run-R1jpsFMw.mjs} +5 -5
  60. package/dist/{has-remote-changes-CQCior6b.mjs → has-remote-changes-B5tQE21X.mjs} +8 -8
  61. package/dist/{import-y-7_YKQH.mjs → import-DdzCXmMi.mjs} +11 -11
  62. package/dist/{input-a1VFtFBh.mjs → input-ikCiip6x.mjs} +1 -1
  63. package/dist/is-dirty-BVGP-zkM.mjs +10 -0
  64. package/dist/{is-dirty-ZgX5mDJq.mjs → is-dirty-bh6hmk9i.mjs} +5 -5
  65. package/dist/{items-ZP8yJJTA.mjs → items-CrWoxVHo.mjs} +6 -6
  66. package/dist/{key-UvYm9cOw.mjs → key-NDEARu2L.mjs} +1 -1
  67. package/dist/{license-2t70RAE_.mjs → license-BOayhs8F.mjs} +3 -3
  68. package/dist/{list-ehmXcC-t.mjs → list-BQV5NshX.mjs} +4 -4
  69. package/dist/{list-DO-Dxbq3.mjs → list-BYCK1KmR.mjs} +5 -5
  70. package/dist/{list-BAEch4jn.mjs → list-BjBJzP7V.mjs} +5 -5
  71. package/dist/{list-DZKxyQw1.mjs → list-Cou-Ac2l.mjs} +4 -4
  72. package/dist/{list-CQVnPfi1.mjs → list-Cxwr9_8m.mjs} +5 -5
  73. package/dist/{list-BHzsTJmU.mjs → list-D3jKvEiW.mjs} +4 -4
  74. package/dist/{list-B2dOeeua.mjs → list-D4LvgIyR.mjs} +4 -4
  75. package/dist/{list-CV-cfKnu.mjs → list-D6eczTGQ.mjs} +4 -4
  76. package/dist/{list-BmI-BGK_.mjs → list-DLypWjAD.mjs} +5 -5
  77. package/dist/{list-dSoWq6_Y.mjs → list-IW7vnt50.mjs} +4 -4
  78. package/dist/{list-BsmGs2Wf.mjs → list-MWSTuRJt.mjs} +4 -4
  79. package/dist/{list-VIZSxtf3.mjs → list-Wgyl5jTw.mjs} +5 -5
  80. package/dist/{list-DjO6IxiH.mjs → list-gW9tCjmY.mjs} +5 -5
  81. package/dist/{login-D4a3b52m.mjs → login-Ce_o5MLd.mjs} +6 -6
  82. package/dist/{logout-BhO5sEm8.mjs → logout-BBmwrBSd.mjs} +5 -5
  83. package/dist/{logs-DS6fKVNx.mjs → logs-BH3YzGoR.mjs} +6 -6
  84. package/dist/{manifest-DalRNBAy.mjs → manifest-VVjycZCe.mjs} +2 -2
  85. package/dist/measure-Bb_do8gt.mjs +19 -0
  86. package/dist/{metadata-CKuOfkMS.mjs → metadata-CtHgIDV0.mjs} +5 -5
  87. package/dist/{metadata-DN4Mqj7s.mjs → metadata-qxadwd31.mjs} +5 -5
  88. package/dist/{package-BPEXn1Of.mjs → package-_D_P9V4h.mjs} +1 -1
  89. package/dist/{parse-id-BqO2IY1b.mjs → parse-id-Dy4xSeLf.mjs} +1 -1
  90. package/dist/{parse-ref-Oyf_TeW-.mjs → parse-ref-FBB8uGZw.mjs} +1 -1
  91. package/dist/{parse-schemas-CJ0dEiTk.mjs → parse-schemas-uB5tn5jL.mjs} +3 -3
  92. package/dist/{poll-DJWznjP9.mjs → poll-DcT586gB.mjs} +2 -2
  93. package/dist/{poll-task-CXSagHdO.mjs → poll-task-DgGZa-HF.mjs} +4 -4
  94. package/dist/{errors-DqPLKwoK.mjs → predicates-DiIiS3k7.mjs} +7 -1
  95. package/dist/{preflight-DQv-qq5r.mjs → preflight-DBQDG_jz.mjs} +4 -4
  96. package/dist/{prompt-g87Vvbx8.mjs → prompt-Bf3DQ-qE.mjs} +1 -1
  97. package/dist/{provision-DXr7ZG8I.mjs → provision-RmlAclSj.mjs} +14 -14
  98. package/dist/ps-BGzvw2a9.mjs +10 -0
  99. package/dist/{ps-DWXhgZVf.mjs → ps-cwwTN6HT.mjs} +3 -3
  100. package/dist/{query-q7b2hzrE.mjs → query-DhWf5_XU.mjs} +6 -6
  101. package/dist/query-RJ_1ZaP2.mjs +89 -0
  102. package/dist/remote-sync-Wo7mzKgy.mjs +28 -0
  103. package/dist/{remove-Brcrdtfx.mjs → remove-CrAURrqj.mjs} +5 -5
  104. package/dist/{remove-32Z7lUm6.mjs → remove-D9ZM9DBZ.mjs} +8 -8
  105. package/dist/{remove-collection-D3RQTzDz.mjs → remove-collection-B2sz1JdF.mjs} +10 -10
  106. package/dist/{render-D8GOkk4P.mjs → render-DXv-D6fU.mjs} +2 -8
  107. package/dist/{rescan-values-BpRkyMZp.mjs → rescan-values-CQq-jhLD.mjs} +5 -5
  108. package/dist/{run-DGMovJHI.mjs → run-NLdh0m0D.mjs} +7 -7
  109. package/dist/{runs-DRnBkXmG.mjs → runs-oT0ELgMP.mjs} +5 -5
  110. package/dist/{runtime-Dwaw7sqU.mjs → runtime-C6l1Ju-X.mjs} +49 -5
  111. package/dist/{schema-tables-C-Rslrnl.mjs → schema-tables-BLYcUDzk.mjs} +5 -5
  112. package/dist/{schemas-DzUHirII.mjs → schemas-BVVEdKjp.mjs} +5 -5
  113. package/dist/{search-CKie8hjZ.mjs → search-BFam2-sx.mjs} +5 -5
  114. package/dist/segment-B0M4sLKF.mjs +19 -0
  115. package/dist/{set-xF9CP68x.mjs → set-6L9BIstn.mjs} +8 -8
  116. package/dist/{set-DuwiAGUc.mjs → set-KA89W3VR.mjs} +6 -6
  117. package/dist/{setting-DWoyNzLC.mjs → setting-DXD5ho6c.mjs} +3 -3
  118. package/dist/{setup-Cn54kGu2.mjs → setup-CFjHjBdY.mjs} +6 -6
  119. package/dist/snippet-Cnk5Slje.mjs +19 -0
  120. package/dist/{start-DpzDRfxQ.mjs → start-tLaBkkBI.mjs} +9 -9
  121. package/dist/{stash-BT5wUeNt.mjs → stash-DzHfWm1n.mjs} +9 -9
  122. package/dist/{status-g9cjxsHd.mjs → status-51muEP07.mjs} +4 -4
  123. package/dist/{status-DKMAE9zo.mjs → status-B5TB381j.mjs} +4 -4
  124. package/dist/{status-D7PR1KJp.mjs → status-EclMz7Yv.mjs} +10 -10
  125. package/dist/{stop-Da7M-CRc.mjs → stop-C4bFdYps.mjs} +8 -8
  126. package/dist/{summary-3quv6ksc.mjs → summary-BNdAw8Te.mjs} +5 -5
  127. package/dist/{sync-schema-HcO7DSYi.mjs → sync-schema-YQWrC6jD.mjs} +5 -5
  128. package/dist/table-Dx13ukJ1.mjs +19 -0
  129. package/dist/transform-BaknXzIk.mjs +24 -0
  130. package/dist/transform-job-Cbg7x7Wv.mjs +19 -0
  131. package/dist/{translate-Z7f_VDDn.mjs → translate-DGO4Vbq8.mjs} +7 -7
  132. package/dist/{tree-DZNnXYjb.mjs → tree-DFBClf8v.mjs} +4 -4
  133. package/dist/{update-fRqtvI5G.mjs → update-BFNyczga.mjs} +11 -11
  134. package/dist/{update-CPc3u-aB.mjs → update-BGQ4CrAK.mjs} +8 -8
  135. package/dist/{update-C9N9kLkB.mjs → update-BWanyZkB.mjs} +7 -7
  136. package/dist/{update-CKrsR2vZ.mjs → update-BgHAOPmj.mjs} +14 -14
  137. package/dist/{update--v4lsiLM.mjs → update-BoyiATwc.mjs} +10 -10
  138. package/dist/{update-D2J1WtKn.mjs → update-C4oIEQ0a.mjs} +7 -7
  139. package/dist/{update-DE0DPo7n.mjs → update-D7phI8Ix.mjs} +15 -10
  140. package/dist/{update-CfLDXi8m.mjs → update-DMMSjt0B.mjs} +10 -10
  141. package/dist/{update-BmvyguU9.mjs → update-Dxyn8J5P.mjs} +14 -9
  142. package/dist/{update-dashcard-28PIWnwP.mjs → update-dashcard-CdoKnQEk.mjs} +7 -7
  143. package/dist/{update-D_2eMRda.mjs → update-owCnAziw.mjs} +7 -7
  144. package/dist/{url-yVWrLimZ.mjs → url-mHVfZ4uL.mjs} +7 -7
  145. package/dist/{uuid-D9rbiLTK.mjs → uuid-BnDZbdAN.mjs} +4 -4
  146. package/dist/{validate-DlXXSNQ-.mjs → validate-GPoiblzw.mjs} +22 -105
  147. package/dist/validate-query-DQDzQCQv.mjs +37 -0
  148. package/dist/{values-K_-V36xz.mjs → values-CmTVidt-.mjs} +5 -5
  149. package/dist/{wait-C2S1JuUq.mjs → wait-DWDeV8l6.mjs} +10 -10
  150. package/dist/{wait-flags-Jdygg1yT.mjs → wait-flags-DGvYn3LJ.mjs} +2 -2
  151. package/dist/{wait-Ch__WrKD.mjs → wait-rHAJDRWM.mjs} +2 -2
  152. package/dist/workspace-BBzIcZC3.mjs +24 -0
  153. package/dist/{workspace-jfsegcq8.mjs → workspace-DVuqKJGG.mjs} +6 -16
  154. package/dist/{workspace-credentials-U6bazYof.mjs → workspace-credentials-B6BL-X0d.mjs} +1 -1
  155. package/package.json +1 -1
  156. package/dist/add-collection-Bw_KL6EH.mjs +0 -11
  157. package/dist/auth-DCoGwYKi.mjs +0 -19
  158. package/dist/card-CtK41cpb.mjs +0 -20
  159. package/dist/collection-CWYozp35.mjs +0 -19
  160. package/dist/create-D_WX4JYl.mjs +0 -40
  161. package/dist/create-o_cxdysF.mjs +0 -40
  162. package/dist/dashboard-GeAXKl0W.mjs +0 -20
  163. package/dist/db-2G-o2xtr.mjs +0 -22
  164. package/dist/field-CzZEYFp6.mjs +0 -18
  165. package/dist/is-dirty-CJ5aaXXs.mjs +0 -10
  166. package/dist/measure-Bagaha3J.mjs +0 -19
  167. package/dist/ps-NVWIylrB.mjs +0 -10
  168. package/dist/query-DR0R8J_B.mjs +0 -94
  169. package/dist/segment-C66MvGDy.mjs +0 -19
  170. package/dist/snippet-TOO4F2a8.mjs +0 -19
  171. package/dist/sync-CcYMBXTo.mjs +0 -28
  172. package/dist/table-CpsE5VUF.mjs +0 -19
  173. package/dist/transform-CUxV3WSi.mjs +0 -24
  174. package/dist/transform-job-Dry0r1Xz.mjs +0 -19
  175. package/dist/validate-query-Bc1-_glK.mjs +0 -21
  176. package/dist/workspace-DAlhADfI.mjs +0 -24
  177. /package/dist/{segment-D0XmKSU2.mjs → segment-BMrUBz94.mjs} +0 -0
  178. /package/dist/{setting-DH7Kgx94.mjs → setting-CTaAeMci.mjs} +0 -0
  179. /package/dist/{snippet-CBTV07b-.mjs → snippet-Dw0Sjzkr.mjs} +0 -0
package/README.md CHANGED
@@ -695,29 +695,33 @@ metabase segment get 1 --json --full
695
695
  ```sh
696
696
  cat segment.json | metabase segment create
697
697
  metabase segment create --file segment.json
698
+ metabase segment create --file segment.json --skip-validate
698
699
  ```
699
700
 
700
- | Flag | Description |
701
- | --------------- | ----------------------- |
702
- | `--body <json>` | Inline JSON body. |
703
- | `--file <path>` | Path to JSON body file. |
701
+ | Flag | Description |
702
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
703
+ | `--body <json>` | Inline JSON body. |
704
+ | `--file <path>` | Path to JSON body file. |
705
+ | `--skip-validate` | Skip the local MBQL 5 pre-flight validation; let the server be the authority. Use only when the bundled schema disagrees with what the server accepts. |
704
706
 
705
- Body fields: `name` (required), `table_id` (required positive integer), `definition` (required MBQL filter object), `description` (optional).
707
+ Body fields: `name` (required), `table_id` (required positive integer), `definition` (required MBQL filter object), `description` (optional). If `definition` is MBQL 5 (`lib/type: "mbql/query"`) it goes through the same pre-flight validation as `card create` and `metabase query`; pass `--skip-validate` to bypass.
706
708
 
707
709
  ### `metabase segment update <id>`
708
710
 
709
- Patch a segment. The body MUST include `revision_message`. Other keys are partial: `name`, `definition`, `archived`, `description`, `caveats`, `points_of_interest`, `show_in_getting_started`.
711
+ Patch a segment. The body MUST include `revision_message`. Other keys are partial: `name`, `definition`, `archived`, `description`, `caveats`, `points_of_interest`, `show_in_getting_started`. If `definition` is MBQL 5 (`lib/type: "mbql/query"`) it goes through the same pre-flight validation as `segment create`; pass `--skip-validate` to bypass.
710
712
 
711
713
  ```sh
712
714
  cat patch.json | metabase segment update 1
713
715
  metabase segment update 1 --file patch.json
714
716
  metabase segment update 1 --body '{"name":"renamed","revision_message":"rename"}'
717
+ metabase segment update 1 --file patch.json --skip-validate
715
718
  ```
716
719
 
717
- | Flag | Description |
718
- | --------------- | ----------------------- |
719
- | `--body <json>` | Inline JSON body. |
720
- | `--file <path>` | Path to JSON body file. |
720
+ | Flag | Description |
721
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
722
+ | `--body <json>` | Inline JSON body. |
723
+ | `--file <path>` | Path to JSON body file. |
724
+ | `--skip-validate` | Skip the local MBQL 5 pre-flight validation; let the server be the authority. Use only when the bundled schema disagrees with what the server accepts. |
721
725
 
722
726
  ### `metabase segment archive <id>`
723
727
 
@@ -755,29 +759,33 @@ metabase measure get 1 --json --full
755
759
  ```sh
756
760
  cat measure.json | metabase measure create
757
761
  metabase measure create --file measure.json
762
+ metabase measure create --file measure.json --skip-validate
758
763
  ```
759
764
 
760
- | Flag | Description |
761
- | --------------- | ----------------------- |
762
- | `--body <json>` | Inline JSON body. |
763
- | `--file <path>` | Path to JSON body file. |
765
+ | Flag | Description |
766
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
767
+ | `--body <json>` | Inline JSON body. |
768
+ | `--file <path>` | Path to JSON body file. |
769
+ | `--skip-validate` | Skip the local MBQL 5 pre-flight validation; let the server be the authority. Use only when the bundled schema disagrees with what the server accepts. |
764
770
 
765
- Body fields: `name` (required), `table_id` (required positive integer), `definition` (required MBQL aggregation object), `description` (optional).
771
+ Body fields: `name` (required), `table_id` (required positive integer), `definition` (required MBQL aggregation object), `description` (optional). If `definition` is MBQL 5 (`lib/type: "mbql/query"`) it goes through the same pre-flight validation as `card create` and `metabase query`; pass `--skip-validate` to bypass.
766
772
 
767
773
  ### `metabase measure update <id>`
768
774
 
769
- Patch a measure. The body MUST include `revision_message`. Other keys are partial: `name`, `definition`, `archived`, `description`.
775
+ Patch a measure. The body MUST include `revision_message`. Other keys are partial: `name`, `definition`, `archived`, `description`. If `definition` is MBQL 5 (`lib/type: "mbql/query"`) it goes through the same pre-flight validation as `measure create`; pass `--skip-validate` to bypass.
770
776
 
771
777
  ```sh
772
778
  cat patch.json | metabase measure update 1
773
779
  metabase measure update 1 --file patch.json
774
780
  metabase measure update 1 --body '{"name":"renamed","revision_message":"rename"}'
781
+ metabase measure update 1 --file patch.json --skip-validate
775
782
  ```
776
783
 
777
- | Flag | Description |
778
- | --------------- | ----------------------- |
779
- | `--body <json>` | Inline JSON body. |
780
- | `--file <path>` | Path to JSON body file. |
784
+ | Flag | Description |
785
+ | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
786
+ | `--body <json>` | Inline JSON body. |
787
+ | `--file <path>` | Path to JSON body file. |
788
+ | `--skip-validate` | Skip the local MBQL 5 pre-flight validation; let the server be the authority. Use only when the bundled schema disagrees with what the server accepts. |
781
789
 
782
790
  ### `metabase measure archive <id>`
783
791
 
@@ -924,73 +932,73 @@ metabase search products --archived
924
932
  | `--table-db-id` | Restrict to items on a given database id. |
925
933
  | `--verified` | Only verified content. |
926
934
 
927
- ## Sync
935
+ ## Remote Sync
928
936
 
929
- Drive Metabase Enterprise Remote Sync (`/api/ee/remote-sync`) — import / export Metabase content against a configured git remote, inspect dirty state, and manage branches. All sync commands require an active EE token and superuser credentials.
937
+ Drive Metabase Enterprise Remote Sync (`/api/ee/remote-sync`) — import / export Metabase content against a configured git remote, inspect dirty state, and manage branches. All remote-sync commands require an active EE token and superuser credentials.
930
938
 
931
- ### `metabase sync status`
939
+ ### `metabase remote-sync status`
932
940
 
933
941
  Roll up the current sync state in one call: configured branch, dirty flag, and the most recent sync task (or `null` if none has ever run).
934
942
 
935
943
  ```sh
936
- metabase sync status
937
- metabase sync status --json
944
+ metabase remote-sync status
945
+ metabase remote-sync status --json
938
946
  ```
939
947
 
940
- ### `metabase sync is-dirty`
948
+ ### `metabase remote-sync is-dirty`
941
949
 
942
950
  Boolean check for whether any synced collection has unsynced local changes.
943
951
 
944
952
  ```sh
945
- metabase sync is-dirty --json
953
+ metabase remote-sync is-dirty --json
946
954
  ```
947
955
 
948
- ### `metabase sync has-remote-changes`
956
+ ### `metabase remote-sync has-remote-changes`
949
957
 
950
958
  Compare the latest version on the remote branch against the version Metabase last imported. Cached for a short TTL server-side; pass `--force-refresh` to bypass.
951
959
 
952
960
  ```sh
953
- metabase sync has-remote-changes
954
- metabase sync has-remote-changes --force-refresh --json
961
+ metabase remote-sync has-remote-changes
962
+ metabase remote-sync has-remote-changes --force-refresh --json
955
963
  ```
956
964
 
957
965
  | Flag | Description |
958
966
  | ----------------- | --------------------------------------------------- |
959
967
  | `--force-refresh` | Bypass the in-memory cache and re-check the remote. |
960
968
 
961
- ### `metabase sync dirty`
969
+ ### `metabase remote-sync dirty`
962
970
 
963
971
  List every object that has unsynced local changes (compact list envelope; `--full` for the per-row payload).
964
972
 
965
973
  ```sh
966
- metabase sync dirty
967
- metabase sync dirty --json
974
+ metabase remote-sync dirty
975
+ metabase remote-sync dirty --json
968
976
  ```
969
977
 
970
- ### `metabase sync current-task`
978
+ ### `metabase remote-sync current-task`
971
979
 
972
980
  Fetch the most recent sync task. Renders `{ status: "idle" }` when no task has ever run, otherwise the full task with its hydrated `status`.
973
981
 
974
982
  ```sh
975
- metabase sync current-task
976
- metabase sync current-task --json
983
+ metabase remote-sync current-task
984
+ metabase remote-sync current-task --json
977
985
  ```
978
986
 
979
- ### `metabase sync cancel-task`
987
+ ### `metabase remote-sync cancel-task`
980
988
 
981
989
  Cancel the currently running sync task. Fails with HTTP 400 if no task is running.
982
990
 
983
991
  ```sh
984
- metabase sync cancel-task --json
992
+ metabase remote-sync cancel-task --json
985
993
  ```
986
994
 
987
- ### `metabase sync wait`
995
+ ### `metabase remote-sync wait`
988
996
 
989
997
  Poll `/current-task` until it reaches a terminal status (`successful`, `errored`, `cancelled`, `timed-out`, `conflict`). Exits 0 on `successful` or `cancelled`; exits 1 on `errored` / `timed-out` / `conflict`. Returns immediately with `{ status: "idle" }` if no task is running.
990
998
 
991
999
  ```sh
992
- metabase sync wait
993
- metabase sync wait --timeout 300000 --json
1000
+ metabase remote-sync wait
1001
+ metabase remote-sync wait --timeout 300000 --json
994
1002
  ```
995
1003
 
996
1004
  | Flag | Description |
@@ -998,14 +1006,14 @@ metabase sync wait --timeout 300000 --json
998
1006
  | `--timeout <ms>` | Polling timeout in ms (default 600000). |
999
1007
  | `--interval <ms>` | Polling interval in ms (default 2000). |
1000
1008
 
1001
- ### `metabase sync import`
1009
+ ### `metabase remote-sync import`
1002
1010
 
1003
1011
  Import content from the configured git remote into Metabase (repo → Metabase). Auto-polls until the resulting task reaches a terminal status; pass `--no-wait` to return immediately after kickoff.
1004
1012
 
1005
1013
  ```sh
1006
- metabase sync import
1007
- metabase sync import --branch main --json
1008
- metabase sync import --force --no-wait
1014
+ metabase remote-sync import
1015
+ metabase remote-sync import --branch main --json
1016
+ metabase remote-sync import --force --no-wait
1009
1017
  ```
1010
1018
 
1011
1019
  | Flag | Description |
@@ -1016,14 +1024,14 @@ metabase sync import --force --no-wait
1016
1024
  | `--timeout <ms>` | Polling timeout in ms (default 600000). Used with `--wait`. |
1017
1025
  | `--interval <ms>` | Polling interval in ms (default 2000). Used with `--wait`. |
1018
1026
 
1019
- ### `metabase sync export`
1027
+ ### `metabase remote-sync export`
1020
1028
 
1021
1029
  Export Metabase changes back to the configured git remote (Metabase → repo). Auto-polls by default.
1022
1030
 
1023
1031
  ```sh
1024
- metabase sync export -m "update dashboards"
1025
- metabase sync export --branch main --json
1026
- metabase sync export --no-wait
1032
+ metabase remote-sync export -m "update dashboards"
1033
+ metabase remote-sync export --branch main --json
1034
+ metabase remote-sync export --no-wait
1027
1035
  ```
1028
1036
 
1029
1037
  | Flag | Description |
@@ -1035,13 +1043,13 @@ metabase sync export --no-wait
1035
1043
  | `--timeout <ms>` | Polling timeout in ms (default 600000). Used with `--wait`. |
1036
1044
  | `--interval <ms>` | Polling interval in ms (default 2000). Used with `--wait`. |
1037
1045
 
1038
- ### `metabase sync stash`
1046
+ ### `metabase remote-sync stash`
1039
1047
 
1040
1048
  Export the current Metabase state to a NEW branch on the remote and switch sync to it. Requires `remote-sync-type` to be `read-write`.
1041
1049
 
1042
1050
  ```sh
1043
- metabase sync stash --new-branch wip
1044
- metabase sync stash --new-branch wip -m "work in progress" --json
1051
+ metabase remote-sync stash --new-branch wip
1052
+ metabase remote-sync stash --new-branch wip -m "work in progress" --json
1045
1053
  ```
1046
1054
 
1047
1055
  | Flag | Description |
@@ -1052,41 +1060,41 @@ metabase sync stash --new-branch wip -m "work in progress" --json
1052
1060
  | `--timeout <ms>` | Polling timeout in ms. Used with `--wait`. |
1053
1061
  | `--interval <ms>` | Polling interval in ms. Used with `--wait`. |
1054
1062
 
1055
- ### `metabase sync branches`
1063
+ ### `metabase remote-sync branches`
1056
1064
 
1057
1065
  List branches available on the configured git remote.
1058
1066
 
1059
1067
  ```sh
1060
- metabase sync branches --json
1068
+ metabase remote-sync branches --json
1061
1069
  ```
1062
1070
 
1063
- ### `metabase sync create-branch <name>`
1071
+ ### `metabase remote-sync create-branch <name>`
1064
1072
 
1065
1073
  Create a new branch on the git remote (from the last imported version) and switch sync to it.
1066
1074
 
1067
1075
  ```sh
1068
- metabase sync create-branch feat/dashboards
1069
- metabase sync create-branch feat/x --json
1076
+ metabase remote-sync create-branch feat/dashboards
1077
+ metabase remote-sync create-branch feat/x --json
1070
1078
  ```
1071
1079
 
1072
- ### `metabase sync add-collection <id>`
1080
+ ### `metabase remote-sync add-collection <id>`
1073
1081
 
1074
1082
  Mark a collection as remote-synced. The toggle cascades to every descendant by `location` prefix, so flagging a parent flags the whole subtree. Returns `{ success, task_id? }`; `task_id` only appears when the toggle triggers a follow-up task (e.g. a finalization import after switching to read-only mode).
1075
1083
 
1076
1084
  ```sh
1077
- metabase sync add-collection 12
1078
- metabase sync add-collection 12 --json --profile prod
1085
+ metabase remote-sync add-collection 12
1086
+ metabase remote-sync add-collection 12 --json --profile prod
1079
1087
  ```
1080
1088
 
1081
1089
  The server rejects toggles while `remote-sync-type` is `read-only` (the install default). Switch first with `metabase setting set remote-sync-type '"read-write"'`.
1082
1090
 
1083
- ### `metabase sync remove-collection <id>`
1091
+ ### `metabase remote-sync remove-collection <id>`
1084
1092
 
1085
1093
  Unmark a collection as remote-synced. Same cascade and same `read-only` precondition as `add-collection`.
1086
1094
 
1087
1095
  ```sh
1088
- metabase sync remove-collection 12
1089
- metabase sync remove-collection 12 --json --profile prod
1096
+ metabase remote-sync remove-collection 12
1097
+ metabase remote-sync remove-collection 12 --json --profile prod
1090
1098
  ```
1091
1099
 
1092
1100
  ## Workspaces
@@ -1332,25 +1340,20 @@ metabase eid translate --body '{"entity_ids":{"card":["abc123XYZ"]}}'
1332
1340
 
1333
1341
  Run an MBQL 5 query with built-in schema validation. Three modes — discover the schema (`--print-schema`), validate without sending (`--dry-run`), run.
1334
1342
 
1335
- Two MBQL flavors:
1336
-
1337
- - **Internal MBQL** (default) — numeric IDs (`database: 1`, `source-table: 7`). POSTs to `/api/dataset`. This is what every existing Metabase API endpoint accepts.
1338
- - **External MBQL** (`--external`) — string-id FKs (`database: "My DB"`, `source-table: ["My DB", null, "orders"]`). POSTs to `/api/dataset/external` (forward-looking representations endpoint).
1339
-
1340
- External and internal MBQL are structurally identical; only the ID types differ. The bundled query schema is synced from `@metabase/representations`; the internal validator overrides `id.yaml` to require positive integers for every ID `$def`.
1343
+ MBQL 5 bodies use numeric IDs (`database: 1`, `source-table: 7`) and POST to `/api/dataset`. The bundled query schema is synced from `@metabase/representations`; `id.yaml` is overridden to require positive integers for every ID `$def`.
1341
1344
 
1342
1345
  ```sh
1343
- metabase query --print-schema # internal JSON Schema bundle
1344
- metabase query --print-schema --external # string-FK variant
1346
+ metabase query --print-schema # JSON Schema bundle
1345
1347
  cat q.json | metabase query --dry-run # validate, no network
1346
1348
  metabase query --file q.json
1347
- metabase query --file q.json --external
1348
1349
  metabase query --file q.json --skip-validate # bypass pre-flight; let server reject
1349
1350
  ```
1350
1351
 
1351
1352
  Body sources: `--file`, `--body`, or stdin (exactly one). Body is JSON.
1352
1353
 
1353
- `--skip-validate` is an escape hatch when the bundled schema disagrees with what the server actually accepts (drift, false negative, edge case). Validation is skipped entirely and the body is sent as-is. Mutually exclusive with `--dry-run` (which is itself the validation mode).
1354
+ Any non-MBQL 5 body skips pre-flight automatically — legacy MBQL 4 (`{ "type": "query", "database": N, "query": { "source-table": T, ... } }`), legacy native (`{ "type": "native", "database": N, "native": { "query": "..." } }`), or any other shape that doesn't carry `"lib/type": "mbql/query"`. The bundled schema only models MBQL 5; `/api/dataset` normalizes the rest server-side via `lib-be/normalize-query` (the same normalizer that backs `card create` / `transform create`), so behavior is symmetric across endpoints. `--dry-run` on a non-MBQL 5 body emits `{ ok: true, errors: [] }` (no schema applies). The double-wrap footgun — an MBQL 5 query nested inside a `{type:"query", query:…}` envelope — is still rejected with a `ConfigError` before send.
1355
+
1356
+ `--skip-validate` is an escape hatch when the bundled schema disagrees with what the server actually accepts (drift, false negative, edge case) for MBQL 5 bodies. Validation is skipped entirely and the body is sent as-is. Mutually exclusive with `--dry-run` (which is itself the validation mode).
1354
1357
 
1355
1358
  Exit codes:
1356
1359
 
@@ -1360,18 +1363,18 @@ Exit codes:
1360
1363
 
1361
1364
  Output by mode:
1362
1365
 
1363
- - `--print-schema` — `{ mode, schema, defs: { "id.yaml", "parameter.yaml", "ref.yaml", "temporal_bucketing.yaml" } }`. The query schema's `$ref`s point into the `defs` namespace by file path; an agent can either feed the bundle directly into Ajv (`addSchema(defs["id.yaml"], "id.yaml")` etc., then `compile(schema)`) or read it as documentation.
1366
+ - `--print-schema` — `{ schema, defs: { "id.yaml", "parameter.yaml", "ref.yaml", "temporal_bucketing.yaml" } }`. The query schema's `$ref`s point into the `defs` namespace by file path; an agent can either feed the bundle directly into Ajv (`addSchema(defs["id.yaml"], "id.yaml")` etc., then `compile(schema)`) or read it as documentation.
1364
1367
  - `--dry-run` — `{ ok: boolean, errors: { path: string, message: string }[] }`. `path` is a JSON Pointer into the body, `message` is the Ajv error string.
1365
1368
  - Run failure (no `--dry-run`) — same `{ ok, errors }` envelope on stdout, exit 2, no request made.
1366
1369
  - Run success — the streamed `CardQueryResult`.
1367
1370
 
1368
- ### MBQL 5 pre-flight in `card create`/`update` and `transform create`/`update`
1371
+ ### MBQL 5 pre-flight in `card create`/`update`, `transform create`/`update`, `measure create`/`update`, and `segment create`/`update`
1369
1372
 
1370
- When the embedded query (`card.dataset_query`, or `transform.source.query` for `source.type: "query"`) is MBQL 5 (`lib/type: "mbql/query"`), it is pre-flight-validated against the same schema as `metabase query`. Validation failure: `{ ok, errors }` envelope on stdout, exit 2, request not made. MBQL 4 (legacy) bodies and Python transform sources skip validation — they're still accepted by the server and we don't ship a schema for them.
1373
+ When the embedded query (`card.dataset_query`, `transform.source.query` for `source.type: "query"`, or `measure.definition` / `segment.definition`) is MBQL 5 (`lib/type: "mbql/query"`), it is pre-flight-validated against the same schema as `metabase query`. Validation failure: `{ ok, errors }` envelope on stdout, exit 2, request not made. MBQL 4 (legacy) bodies and Python transform sources skip validation — they're still accepted by the server and we don't ship a schema for them.
1371
1374
 
1372
- Pass `--skip-validate` to bypass the pre-flight on `card create`, `card update`, `transform create`, or `transform update` — the body is sent as-is and the server is the authority. Same escape hatch as on `metabase query`; use only when the bundled schema disagrees with what the server actually accepts.
1375
+ Pass `--skip-validate` to bypass the pre-flight on any of `card create`, `card update`, `transform create`, `transform update`, `measure create`, `measure update`, `segment create`, or `segment update` — the body is sent as-is and the server is the authority. Same escape hatch as on `metabase query`; use only when the bundled schema disagrees with what the server actually accepts.
1373
1376
 
1374
- Agent discovery path: `metabase __manifest` lists every command's args and description; the description for `card create`/`update` and `transform create`/`update` references `metabase query --print-schema` so an agent can fetch the validating schema directly.
1377
+ Agent discovery path: `metabase __manifest` lists every command's args and description; the description for `card create`/`update`, `transform create`/`update`, `measure create`/`update`, and `segment create`/`update` references `metabase query --print-schema` so an agent can fetch the validating schema directly.
1375
1378
 
1376
1379
  The bundled query schema is synced from a pinned `@metabase/representations` release via `bun run sync:representations`; CI guards against drift.
1377
1380
 
@@ -0,0 +1,11 @@
1
+ import "./package-_D_P9V4h.mjs";
2
+ import "./command-augment-D9pI9Vbh.mjs";
3
+ import "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import "./runtime-C6l1Ju-X.mjs";
6
+ import "./parse-id-Dy4xSeLf.mjs";
7
+ import "./poll-task-DgGZa-HF.mjs";
8
+ import "./poll-DcT586gB.mjs";
9
+ import { SyncSettingsUpdateResult, add_collection_default, setCollectionRemoteSynced, syncSettingsUpdateView } from "./add-collection-FNN_Arg9.mjs";
10
+
11
+ export { add_collection_default as default };
@@ -1,10 +1,10 @@
1
- import { renderItem } from "./render-D8GOkk4P.mjs";
2
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-Dwaw7sqU.mjs";
3
- import { parseId } from "./parse-id-BqO2IY1b.mjs";
4
- import { REMOTE_SYNC_PATHS } from "./poll-task-CXSagHdO.mjs";
1
+ import { renderItem } from "./render-DXv-D6fU.mjs";
2
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-C6l1Ju-X.mjs";
3
+ import { parseId } from "./parse-id-Dy4xSeLf.mjs";
4
+ import { REMOTE_SYNC_PATHS } from "./poll-task-DgGZa-HF.mjs";
5
5
  import { z } from "zod";
6
6
 
7
- //#region src/commands/sync/add-collection.ts
7
+ //#region src/commands/remote-sync/add-collection.ts
8
8
  const SyncSettingsUpdateResult = z.object({
9
9
  success: z.boolean(),
10
10
  task_id: z.number().int().positive().optional()
@@ -41,7 +41,7 @@ var add_collection_default = defineMetabaseCommand({
41
41
  }
42
42
  },
43
43
  outputSchema: SyncSettingsUpdateResult,
44
- examples: ["metabase sync add-collection 12", "metabase sync add-collection 12 --json --profile prod"],
44
+ examples: ["metabase remote-sync add-collection 12", "metabase remote-sync add-collection 12 --json --profile prod"],
45
45
  async run({ args, ctx, getClient }) {
46
46
  const collectionId = parseId(args.id, "id");
47
47
  const client = await getClient();
@@ -6,7 +6,7 @@ var api_key_default = defineCommand({
6
6
  name: "api-key",
7
7
  description: "Manage Metabase API keys"
8
8
  },
9
- subCommands: { create: () => import("./create-D5GQ3L7D.mjs").then((mod) => mod.default) }
9
+ subCommands: { create: () => import("./create-C4Fec2QG.mjs").then((mod) => mod.default) }
10
10
  });
11
11
 
12
12
  //#endregion
@@ -1,10 +1,10 @@
1
- import "./package-BPEXn1Of.mjs";
1
+ import "./package-_D_P9V4h.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-D8GOkk4P.mjs";
4
- import "./errors-DqPLKwoK.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-Dwaw7sqU.mjs";
6
- import { parseId } from "./parse-id-BqO2IY1b.mjs";
7
- import { Card, cardView } from "./card-BOGKT258.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-C6l1Ju-X.mjs";
6
+ import { parseId } from "./parse-id-Dy4xSeLf.mjs";
7
+ import { Card, cardView } from "./card-B2ZlGpQP.mjs";
8
8
 
9
9
  //#region src/commands/card/archive.ts
10
10
  var archive_default = defineMetabaseCommand({
@@ -1,11 +1,11 @@
1
- import "./package-BPEXn1Of.mjs";
1
+ import "./package-_D_P9V4h.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-D8GOkk4P.mjs";
4
- import "./errors-DqPLKwoK.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-Dwaw7sqU.mjs";
6
- import { parseId } from "./parse-id-BqO2IY1b.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-C6l1Ju-X.mjs";
6
+ import { parseId } from "./parse-id-Dy4xSeLf.mjs";
7
7
  import { revisionMessageFlag } from "./revision-message-flag-D4E1lKE5.mjs";
8
- import { Segment, segmentView } from "./segment-D0XmKSU2.mjs";
8
+ import { Segment, segmentView } from "./segment-BMrUBz94.mjs";
9
9
 
10
10
  //#region src/commands/segment/archive.ts
11
11
  var archive_default = defineMetabaseCommand({
@@ -1,9 +1,9 @@
1
- import "./package-BPEXn1Of.mjs";
1
+ import "./package-_D_P9V4h.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-D8GOkk4P.mjs";
4
- import "./errors-DqPLKwoK.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-Dwaw7sqU.mjs";
6
- import { parseId } from "./parse-id-BqO2IY1b.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-C6l1Ju-X.mjs";
6
+ import { parseId } from "./parse-id-Dy4xSeLf.mjs";
7
7
  import { Measure, measureView } from "./measure-jbc7fsCs.mjs";
8
8
  import { revisionMessageFlag } from "./revision-message-flag-D4E1lKE5.mjs";
9
9
 
@@ -1,10 +1,10 @@
1
- import "./package-BPEXn1Of.mjs";
1
+ import "./package-_D_P9V4h.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-D8GOkk4P.mjs";
4
- import "./errors-DqPLKwoK.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-Dwaw7sqU.mjs";
6
- import { parseId } from "./parse-id-BqO2IY1b.mjs";
7
- import { Snippet, snippetView } from "./snippet-CBTV07b-.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-C6l1Ju-X.mjs";
6
+ import { parseId } from "./parse-id-Dy4xSeLf.mjs";
7
+ import { Snippet, snippetView } from "./snippet-Dw0Sjzkr.mjs";
8
8
 
9
9
  //#region src/commands/snippet/archive.ts
10
10
  var archive_default = defineMetabaseCommand({
@@ -0,0 +1,19 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/auth/index.ts
4
+ var auth_default = defineCommand({
5
+ meta: {
6
+ name: "auth",
7
+ description: "Authenticate against a Metabase instance"
8
+ },
9
+ default: "login",
10
+ subCommands: {
11
+ login: () => import("./login-Ce_o5MLd.mjs").then((m) => m.default),
12
+ status: () => import("./status-51muEP07.mjs").then((m) => m.default),
13
+ list: () => import("./list-MWSTuRJt.mjs").then((m) => m.default),
14
+ logout: () => import("./logout-BBmwrBSd.mjs").then((m) => m.default)
15
+ }
16
+ });
17
+
18
+ //#endregion
19
+ export { auth_default as default };
@@ -1,6 +1,6 @@
1
- import { ConfigError } from "./errors-DqPLKwoK.mjs";
2
- import { readInput } from "./input-a1VFtFBh.mjs";
3
- import { parseJson } from "./runtime-Dwaw7sqU.mjs";
1
+ import { ConfigError } from "./predicates-DiIiS3k7.mjs";
2
+ import { readInput } from "./input-ikCiip6x.mjs";
3
+ import { parseJson } from "./runtime-C6l1Ju-X.mjs";
4
4
 
5
5
  //#region src/runtime/body.ts
6
6
  async function readBody(sources, schema) {
@@ -1,13 +1,13 @@
1
- import "./package-BPEXn1Of.mjs";
1
+ import "./package-_D_P9V4h.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-D8GOkk4P.mjs";
4
- import "./errors-DqPLKwoK.mjs";
5
- import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-Dwaw7sqU.mjs";
6
- import { REMOTE_SYNC_PATHS } from "./poll-task-CXSagHdO.mjs";
7
- import "./poll-DJWznjP9.mjs";
3
+ import { renderList } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, listEnvelopeSchema, outputFlags, profileFlag, wrapList } from "./runtime-C6l1Ju-X.mjs";
6
+ import { REMOTE_SYNC_PATHS } from "./poll-task-DgGZa-HF.mjs";
7
+ import "./poll-DcT586gB.mjs";
8
8
  import { z } from "zod";
9
9
 
10
- //#region src/commands/sync/branches.ts
10
+ //#region src/commands/remote-sync/branches.ts
11
11
  const SyncBranchesApiResponse = z.object({ items: z.array(z.string()) });
12
12
  const BranchRow = z.object({ name: z.string() });
13
13
  const branchView = {
@@ -29,7 +29,7 @@ var branches_default = defineMetabaseCommand({
29
29
  ...connectionFlags
30
30
  },
31
31
  outputSchema: SyncBranchListEnvelope,
32
- examples: ["metabase sync branches", "metabase sync branches --json"],
32
+ examples: ["metabase remote-sync branches", "metabase remote-sync branches --json"],
33
33
  async run({ ctx, getClient }) {
34
34
  const client = await getClient();
35
35
  const response = await client.requestParsed(SyncBranchesApiResponse, REMOTE_SYNC_PATHS.branches);
@@ -1,9 +1,9 @@
1
- import "./package-BPEXn1Of.mjs";
1
+ import "./package-_D_P9V4h.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-D8GOkk4P.mjs";
4
- import "./errors-DqPLKwoK.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-Dwaw7sqU.mjs";
6
- import { parseId } from "./parse-id-BqO2IY1b.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-C6l1Ju-X.mjs";
6
+ import { parseId } from "./parse-id-Dy4xSeLf.mjs";
7
7
  import { z } from "zod";
8
8
 
9
9
  //#region src/commands/transform/cancel.ts
@@ -1,16 +1,16 @@
1
- import "./package-BPEXn1Of.mjs";
1
+ import "./package-_D_P9V4h.mjs";
2
2
  import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-D8GOkk4P.mjs";
4
- import "./errors-DqPLKwoK.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-Dwaw7sqU.mjs";
6
- import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-CXSagHdO.mjs";
7
- import "./poll-DJWznjP9.mjs";
3
+ import { renderItem } from "./render-DXv-D6fU.mjs";
4
+ import "./predicates-DiIiS3k7.mjs";
5
+ import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-C6l1Ju-X.mjs";
6
+ import { REMOTE_SYNC_PATHS, SyncTask, syncTaskView } from "./poll-task-DgGZa-HF.mjs";
7
+ import "./poll-DcT586gB.mjs";
8
8
 
9
- //#region src/commands/sync/cancel-task.ts
9
+ //#region src/commands/remote-sync/cancel-task.ts
10
10
  var cancel_task_default = defineMetabaseCommand({
11
11
  meta: {
12
12
  name: "cancel-task",
13
- description: "Cancel the running sync task"
13
+ description: "Cancel the running remote-sync task"
14
14
  },
15
15
  args: {
16
16
  ...outputFlags,
@@ -18,7 +18,7 @@ var cancel_task_default = defineMetabaseCommand({
18
18
  ...connectionFlags
19
19
  },
20
20
  outputSchema: SyncTask,
21
- examples: ["metabase sync cancel-task", "metabase sync cancel-task --json"],
21
+ examples: ["metabase remote-sync cancel-task", "metabase remote-sync cancel-task --json"],
22
22
  async run({ ctx, getClient }) {
23
23
  const client = await getClient();
24
24
  const task = await client.requestParsed(SyncTask, REMOTE_SYNC_PATHS.cancelTask, { method: "POST" });
@@ -7,6 +7,7 @@ const CardType = z.enum([
7
7
  "metric"
8
8
  ]);
9
9
  const CardQueryType = z.enum(["native", "query"]);
10
+ const CardDatasetQuery = z.object({}).loose().refine((value) => "lib/type" in value || "type" in value, { message: "dataset_query must include \"lib/type\" (MBQL 5) or \"type\" (legacy MBQL/native); empty `{}` is rejected" });
10
11
  const Card = z.object({
11
12
  id: z.number().int(),
12
13
  name: z.string(),
@@ -70,7 +71,7 @@ const cardView = {
70
71
  const CardCreateInput = z.object({
71
72
  name: z.string().min(1),
72
73
  type: CardType.optional(),
73
- dataset_query: z.unknown(),
74
+ dataset_query: CardDatasetQuery,
74
75
  display: z.string().min(1),
75
76
  visualization_settings: z.unknown(),
76
77
  description: z.string().nullable().optional(),
@@ -83,7 +84,7 @@ const CardCreateInput = z.object({
83
84
  const CardUpdateInput = z.object({
84
85
  name: z.string().min(1).optional(),
85
86
  type: CardType.optional(),
86
- dataset_query: z.unknown().optional(),
87
+ dataset_query: CardDatasetQuery.optional(),
87
88
  display: z.string().min(1).optional(),
88
89
  visualization_settings: z.unknown().optional(),
89
90
  description: z.string().nullable().optional(),
@@ -0,0 +1,20 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/card/index.ts
4
+ var card_default = defineCommand({
5
+ meta: {
6
+ name: "card",
7
+ description: "Manage Metabase cards (questions, models, metrics)"
8
+ },
9
+ subCommands: {
10
+ list: () => import("./list-Wgyl5jTw.mjs").then((mod) => mod.default),
11
+ get: () => import("./get-BjzVuL-u.mjs").then((mod) => mod.default),
12
+ query: () => import("./query-DhWf5_XU.mjs").then((mod) => mod.default),
13
+ create: () => import("./create-Bn3BDzsS.mjs").then((mod) => mod.default),
14
+ update: () => import("./update-BFNyczga.mjs").then((mod) => mod.default),
15
+ archive: () => import("./archive-C-G9Nxoi.mjs").then((mod) => mod.default)
16
+ }
17
+ });
18
+
19
+ //#endregion
20
+ export { card_default as default };