@metabase/cli 0.4.1-alpha.release-65-integration-branch.5cbe297 → 0.5.1
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.
- package/dist/{add-collection-hv29px39.mjs → add-collection-BnGPc0Vv.mjs} +4 -4
- package/dist/{alert-DnTCjYIu.mjs → alert-DQkF8jYR.mjs} +7 -7
- package/dist/{alerts-_ELZ12ye.mjs → alerts-BncG7w1_.mjs} +6 -6
- package/dist/{append-B9sLLPYT.mjs → append-D4ekYCuD.mjs} +4 -4
- package/dist/{archive-BhIeDoLk.mjs → archive-BQ4OA-R4.mjs} +3 -3
- package/dist/{archive-CwBk5vxQ.mjs → archive-BXr9kFNz.mjs} +3 -3
- package/dist/{archive-BdX0Uvf2.mjs → archive-BifJXCHF.mjs} +3 -3
- package/dist/{archive-DD8C0Krt2.mjs → archive-CxNUeWII2.mjs} +4 -4
- package/dist/{archive-BRX5fKPb.mjs → archive-D2WCz3Oe.mjs} +3 -3
- package/dist/{archive-DDUSmbjn.mjs → archive-DjHLWUfC.mjs} +5 -5
- package/dist/{archive-CdfyB0To.mjs → archive-DnCF-Ecm.mjs} +5 -5
- package/dist/{archive-ZnHzMJaM.mjs → archive-DocyUIME.mjs} +5 -5
- package/dist/{archive-CKWWyI1i.mjs → archive-DpCP4yR1.mjs} +4 -4
- package/dist/{archive-D22VL5Bx.mjs → archive-EhW6blNc.mjs} +3 -3
- package/dist/{archive-3MQyc5Ih.mjs → archive-ULXc3xzI.mjs} +3 -3
- package/dist/{archive-BAHzxkPR.mjs → archive-v08JESCM.mjs} +5 -5
- package/dist/{auth-Ca84a5fv.mjs → auth-BPbsm8yV.mjs} +5 -5
- package/dist/{body-BVrHLwJU.mjs → body-BkkQkGJg.mjs} +2 -3
- package/dist/{branch-flag-Czh8JT1G.mjs → branch-flag-CTDvbaBa.mjs} +1 -1
- package/dist/{branches-frSt4WcS.mjs → branches-lPHtM_xR.mjs} +3 -3
- package/dist/{breaking-zlgxxwdd.mjs → breaking-DjMlCD96.mjs} +6 -6
- package/dist/{broken-BUAzpKLc.mjs → broken-DUX3GWS5.mjs} +8 -8
- package/dist/{bulk-discard-values-DU15VJPb.mjs → bulk-discard-values-Dl8Lzypf.mjs} +5 -5
- package/dist/{bulk-edit-TSa4lNkM.mjs → bulk-edit-N2xLVtfG.mjs} +5 -5
- package/dist/{bulk-rescan-values-BYJAsPC1.mjs → bulk-rescan-values-BK2rH2Ik.mjs} +5 -5
- package/dist/{bulk-sync-schema-DtaOwEtW.mjs → bulk-sync-schema-BKJc9Rzq.mjs} +5 -5
- package/dist/{cancel-DCOvSQsq.mjs → cancel-DzkRVGIk.mjs} +3 -3
- package/dist/{cancel-task-osQLETJh.mjs → cancel-task-BiTlDY7a.mjs} +3 -3
- package/dist/card-BTBDBsu-.mjs +25 -0
- package/dist/{cards-B1pyPl77.mjs → cards-CSL8ukS1.mjs} +4 -4
- package/dist/cli.mjs +619 -198
- package/dist/{client-1UIUBA_V.mjs → client-BBwYPXDW.mjs} +443 -380
- package/dist/collection-B19phRNU.mjs +21 -0
- package/dist/{collection-BgPYl2c5.mjs → collection-B2wRXyTF.mjs} +11 -3
- package/dist/{collection-DPiztU_l.mjs → collection-CTnYZ2Jj.mjs} +1 -1
- package/dist/{collection-namespace-Cizv6-94.mjs → collection-namespace-B1OkM7p1.mjs} +1 -2
- package/dist/{content-translation-XnHISl5-.mjs → content-translation-DoGTQnvH.mjs} +3 -3
- package/dist/{copy-DAKdksBm.mjs → copy-BYukQEtf.mjs} +4 -4
- package/dist/{copy-BCVW48Jq.mjs → copy-XlCT3gvG.mjs} +6 -6
- package/dist/{copy-flags-D7NTgAz1.mjs → copy-flags-ByB2MicL.mjs} +2 -2
- package/dist/{create-qCgnB-oZ.mjs → create-3_oY9KHY.mjs} +3 -3
- package/dist/{create-KyeJjhxH2.mjs → create-B3fm5I-l2.mjs} +4 -4
- package/dist/{create-CuhQ1Khk.mjs → create-BP39g5Jk.mjs} +5 -5
- package/dist/{create-cqbpWaOi.mjs → create-Bl9sS7v7.mjs} +4 -4
- package/dist/{create-BzE4q6F_.mjs → create-Bnb1abv_.mjs} +4 -4
- package/dist/{create-Br5JxAeE.mjs → create-CLZ7w83R.mjs} +4 -4
- package/dist/{create-B5eo9PSN.mjs → create-CYoarNrb.mjs} +4 -4
- package/dist/{create-B57D5E-o.mjs → create-CbT4SPHV.mjs} +5 -5
- package/dist/{create-BfA1pnmS.mjs → create-Cdt8u1wF.mjs} +6 -6
- package/dist/{create-C7fVbQbQ.mjs → create-CqF7vqXC.mjs} +4 -4
- package/dist/{create-XnYN2zoc.mjs → create-CrtIqtXN.mjs} +6 -6
- package/dist/{create-B1ifNWcE.mjs → create-D5_c5SHo.mjs} +5 -5
- package/dist/{create-CW4WF073.mjs → create-DBNxy5rN.mjs} +5 -5
- package/dist/{create-g4pZa_Xa.mjs → create-DZJQp3r7.mjs} +3 -3
- package/dist/{create-D2iZsTRV.mjs → create-DxMmIHI4.mjs} +5 -5
- package/dist/{create-BOvtRwRz.mjs → create-T4PZPVE9.mjs} +4 -4
- package/dist/{create-branch-Cli5cXvk.mjs → create-branch-CUNFdKyB.mjs} +3 -3
- package/dist/{create-D7zeAm-0.mjs → create-jr4xJgSI.mjs} +4 -4
- package/dist/{create--b64pMVM.mjs → create-k1Bo7h7g.mjs} +5 -5
- package/dist/{csv-CWIcAm_-.mjs → csv-CcnhKpuj.mjs} +4 -4
- package/dist/{current-task-eBjusv2o.mjs → current-task-nl2z8sHI.mjs} +4 -4
- package/dist/dashboard-BP0p62fp.mjs +35 -0
- package/dist/data-action-Cr17CfgE.mjs +24 -0
- package/dist/{database-BT7DVgSr.mjs → database-2HYCdHqK.mjs} +1 -1
- package/dist/{database-Kq2AL5jH.mjs → database-BewllGR7.mjs} +1 -1
- package/dist/{dataset-BmvCxGoE.mjs → dataset-D-x2Ho2i.mjs} +3 -14
- package/dist/{db-_H9HAS6H.mjs → db-m5bQcXdn.mjs} +7 -7
- package/dist/{delete-B0O-mf63.mjs → delete-BOma6qIq.mjs} +4 -4
- package/dist/{delete-BMvVkW-m.mjs → delete-BUCh72Bq.mjs} +4 -4
- package/dist/{delete-CynbfvS2.mjs → delete-BXMc-g3Q.mjs} +4 -4
- package/dist/{delete-BW5QXiyJ.mjs → delete-BrbmJ3sn.mjs} +4 -4
- package/dist/{delete-C7QmQlp9.mjs → delete-DulVnxD_.mjs} +4 -4
- package/dist/{delete-DPU-uQxU.mjs → delete-Oc2GE170.mjs} +4 -4
- package/dist/{delete-DOn2uk0u.mjs → delete-QHsiWYay.mjs} +4 -4
- package/dist/{delete-runtime-Cc7TASG7.mjs → delete-runtime-CkNvZfFA.mjs} +1 -1
- package/dist/{delete-table-DFqm6bAq.mjs → delete-table-LgJ17t6j.mjs} +4 -4
- package/dist/{delete-BztmAfPc.mjs → delete-xf2n7SNg.mjs} +4 -4
- package/dist/{dependencies-DZ-kMsDa.mjs → dependencies-BE5QW7Lb.mjs} +5 -5
- package/dist/{dependency-BHKwKjhO.mjs → dependency-BACk_cVP.mjs} +2 -2
- package/dist/dependency-BlTYysYG.mjs +15 -0
- package/dist/{dependency-B4J1bwFh.mjs → dependency-qP1hx2YN.mjs} +1 -1
- package/dist/{dependents-Ia2fe_KK.mjs → dependents-mbgHQNiv.mjs} +9 -9
- package/dist/{dirty-BrXAPows.mjs → dirty-fYlA1N1e.mjs} +4 -4
- package/dist/{discard-values-B9mTgFbV.mjs → discard-values-cIRBP5nT.mjs} +5 -5
- package/dist/document-BaRQ5fBd.mjs +20 -0
- package/dist/{document-BsaKF8UR.mjs → document-DVIu3Vj4.mjs} +1 -1
- package/dist/{document-COQzVLjW.mjs → document-UMG6me2P.mjs} +1 -1
- package/dist/{download-CZdsDdhG.mjs → download-CokVpeK6.mjs} +2 -2
- package/dist/{eid-DsGNJ16z.mjs → eid-CaumGUFD.mjs} +5 -5
- package/dist/{eid-translation-zEHtr5Oc.mjs → eid-translation-Ba92VOHe.mjs} +1 -0
- package/dist/{entity-BFajNdQp.mjs → entity-BHYJtRxp.mjs} +2 -2
- package/dist/{entry-flags-BaZUoxUR.mjs → entry-flags-DjICpQkc.mjs} +4 -4
- package/dist/{events-rkMIMpnS.mjs → events-jEo9fytL.mjs} +6 -6
- package/dist/{execute-DvBse4aF.mjs → execute-H09Qus4_.mjs} +4 -4
- package/dist/{export-BCkzx9zk.mjs → export-YtdZo7LZ.mjs} +7 -7
- package/dist/{export-flags-TuwwRhD6.mjs → export-flags-DzW0Ktkh.mjs} +2 -2
- package/dist/{export-preflight-p7botJyN.mjs → export-preflight-Db_TChn5.mjs} +5 -5
- package/dist/field-DktidTPB.mjs +21 -0
- package/dist/{fields-CJVXOLbB.mjs → fields-DUXlosmx.mjs} +4 -4
- package/dist/{filter-flags-yY4RM312.mjs → filter-flags-DTDcU7OI.mjs} +3 -3
- package/dist/{fks-B6hjrdJP.mjs → fks-Cl2sq-c0.mjs} +6 -6
- package/dist/{get-D1p-5ibI.mjs → get-B-WT6ess.mjs} +5 -5
- package/dist/{get-DpYTiE4D.mjs → get-BilMWiFq.mjs} +5 -5
- package/dist/{get-CWBN0G-4.mjs → get-Bt_zhviQ.mjs} +3 -3
- package/dist/{get-DsbDxSpy.mjs → get-CM596pmP.mjs} +3 -3
- package/dist/{get-BxUgfEPW.mjs → get-CTtzccwr.mjs} +4 -4
- package/dist/{get-oLc5jgid2.mjs → get-CVMWhbA82.mjs} +4 -4
- package/dist/{get-Eforof5e.mjs → get-CWyRAHpz.mjs} +5 -5
- package/dist/{get-BvUNnNRq.mjs → get-C_rjxpoe.mjs} +3 -3
- package/dist/{get-B5L4BUGK.mjs → get-Cg0up9gm.mjs} +3 -3
- package/dist/{get-xmhwvAQJ.mjs → get-CqlNUyFY.mjs} +5 -5
- package/dist/{get-CXeFg0F2.mjs → get-DPiNYmXo.mjs} +5 -5
- package/dist/{get-DyS1mRI6.mjs → get-DTDvlLT3.mjs} +3 -3
- package/dist/{get-C6uLL4bJ.mjs → get-DtcChy9h.mjs} +5 -5
- package/dist/{get-BYtFVJHT.mjs → get-DyK_bvg6.mjs} +4 -4
- package/dist/{get-Do1LC4I52.mjs → get-DySyvotk2.mjs} +5 -5
- package/dist/{get-D7HPiBB0.mjs → get-FxCF0rxc.mjs} +4 -4
- package/dist/{get-CoJcgFky.mjs → get-GuWW4J24.mjs} +5 -5
- package/dist/{get-DPlSzRI0.mjs → get-XS-6R81E.mjs} +3 -3
- package/dist/{get-zotSW00n.mjs → get-oQNL6pLY.mjs} +3 -3
- package/dist/{get-BwKQw_rR.mjs → get-okEsnkvC.mjs} +3 -3
- package/dist/{get-run-bU-d--nM.mjs → get-run-CFGxSm_S.mjs} +4 -4
- package/dist/{get-DSjITPED.mjs → get-zPMv3kZE.mjs} +5 -5
- package/dist/git-sync-BwkWeJAz.mjs +29 -0
- package/dist/{git-sync-DspFahwV.mjs → git-sync-Ch1V1fEK.mjs} +1 -1
- package/dist/glossary-BSgRQ2HO.mjs +14 -0
- package/dist/{glossary-Del97Jqg.mjs → glossary-BkGmCI4X.mjs} +1 -1
- package/dist/{glossary-CdW6RFId.mjs → glossary-QN-hHfOT.mjs} +1 -1
- package/dist/{graph-CHXJ6mB7.mjs → graph-Wf4e0XIa.mjs} +6 -6
- package/dist/{group-D4w87fXL.mjs → group-81zoQcEP.mjs} +1 -1
- package/dist/{has-remote-changes-BXEe8Sv5.mjs → has-remote-changes-BsS3XB0P.mjs} +3 -3
- package/dist/{import-DZQb4bUo.mjs → import-CXd5HdB0.mjs} +7 -7
- package/dist/{input-DjHsV-kD.mjs → input-AXP2LCOV.mjs} +1 -1
- package/dist/{is-dirty-DwQ2_CCB.mjs → is-dirty-TDcfeOde.mjs} +2 -2
- package/dist/{items-DNdICQ7M.mjs → items-BxvhoxYm.mjs} +6 -6
- package/dist/{key-BTaxFn_7.mjs → key-CUPbYxkk.mjs} +1 -1
- package/dist/{library-C4M8TF2N.mjs → library-BKSFtIV9.mjs} +2 -2
- package/dist/{library-DmkpcZPb.mjs → library-DuIrR8LS.mjs} +1 -1
- package/dist/{library-Cdj_uj1H.mjs → library-DzejNMqX.mjs} +5 -5
- package/dist/{list-DoLqxEjq.mjs → list-3Dh5yeq-.mjs} +3 -3
- package/dist/{list-__Q79YXk.mjs → list-6nGX0Rqc.mjs} +4 -4
- package/dist/{list-hINHmdMT.mjs → list-B3Pngm2j.mjs} +5 -5
- package/dist/{list-89ZgbsvW.mjs → list-B5kRBn7k.mjs} +5 -5
- package/dist/{list-DsyvHBAv.mjs → list-B8V_OESj.mjs} +3 -3
- package/dist/{list-DcHPY1Ti.mjs → list-BUjI5G0_.mjs} +4 -4
- package/dist/{list-gqemddWB.mjs → list-Ba7u5Ai9.mjs} +4 -4
- package/dist/{list-CzxrdWB8.mjs → list-CCCy6cBI.mjs} +6 -6
- package/dist/{list-Owrzgtkc.mjs → list-CRXTfEFk.mjs} +3 -3
- package/dist/{list-C7PV9fYj.mjs → list-CUj04tg3.mjs} +6 -6
- package/dist/{list-OKHcr76i.mjs → list-Cf6A9Csi.mjs} +3 -3
- package/dist/{list-F4ENGV7j.mjs → list-Cr5Hoq-E.mjs} +4 -4
- package/dist/{list-C-WGqRqN.mjs → list-D1Q8H3jn.mjs} +6 -6
- package/dist/{list-epIn3uFZ.mjs → list-D7yH-64Z.mjs} +5 -5
- package/dist/{list-M20foZz2.mjs → list-DA1Fo6S6.mjs} +3 -3
- package/dist/{list-CYlPgzD1.mjs → list-D_fsrh8w.mjs} +5 -5
- package/dist/{list-03zaydQe.mjs → list-DjlfBd7W.mjs} +3 -3
- package/dist/{list-CZoaZc9g.mjs → list-DlgjWr4r.mjs} +5 -5
- package/dist/{list-2EWHwbQs.mjs → list-Do-Xnz0I.mjs} +4 -4
- package/dist/{list-Be6kDkyT.mjs → list-DpK3ioES.mjs} +6 -6
- package/dist/{list-CLJvuPXn.mjs → list-DsR58aMq.mjs} +5 -5
- package/dist/{login-BSqGgX8S.mjs → login-CXbCAcuB.mjs} +6 -6
- package/dist/{logout-D92O4mQK.mjs → logout-B6IGzkpG.mjs} +2 -2
- package/dist/{measure-DhX_mmZK.mjs → measure-CbMgNhlG.mjs} +6 -6
- package/dist/{notification-Cuuwoksm.mjs → notification-W2SVssyY.mjs} +1 -1
- package/dist/{parameter-values-BY2WA9qg.mjs → parameter-values-IWi_DNhp.mjs} +3 -3
- package/dist/{parse-enum-BPKULOSw.mjs → parse-enum-B2rGiC6p.mjs} +1 -1
- package/dist/{parse-id-CxHp2akh.mjs → parse-id-Cv5eM7sg.mjs} +1 -1
- package/dist/{parse-ref-8bVX_9IN.mjs → parse-ref-DW7ik6ny.mjs} +1 -1
- package/dist/{parse-text-Bm6eUa-p.mjs → parse-text-CUCSWOeR.mjs} +1 -1
- package/dist/{path-D4Q1ZzCw.mjs → path-C9r9urRK.mjs} +4 -4
- package/dist/{poll-DFZRtTA_.mjs → poll-CX3jPtXb.mjs} +2 -2
- package/dist/{preflight-BPaonBKy.mjs → preflight-CiTgqNUy.mjs} +2 -3
- package/dist/{process-B3Di_HtV.mjs → process-DImdroix.mjs} +1 -1
- package/dist/{publish-BhgyrJ6c.mjs → publish-xH1n74gd.mjs} +4 -4
- package/dist/{pulse-CIza18rO.mjs → pulse-CFj1WfIC.mjs} +1 -1
- package/dist/{query-CsBe-kJn.mjs → query-BOCw0FBK.mjs} +4 -4
- package/dist/{query-DvlGWjgG.mjs → query-CN3BW5WB.mjs} +11 -12
- package/dist/{remapping-CCEivr42.mjs → remapping-Dggq2Fv0.mjs} +4 -4
- package/dist/{remove-collection-LpgGBYCl.mjs → remove-collection-cxSSFxza.mjs} +4 -4
- package/dist/{render-D5ehBS-7.mjs → render-Cb8Hct67.mjs} +2 -2
- package/dist/{replace-DeWgkbfZ.mjs → replace-wVi_XDut.mjs} +4 -4
- package/dist/requirement-check-BE3PuGsC.mjs +60 -0
- package/dist/{rescan-values-CDDVS1tl.mjs → rescan-values-C7b1Ghy-.mjs} +5 -5
- package/dist/{rescan-values-aF18XAv6.mjs → rescan-values-DAp_avxY.mjs} +5 -5
- package/dist/{run-DyGMvbMm.mjs → run-CE6ei7s7.mjs} +4 -4
- package/dist/{run-Buf4B8QH.mjs → run-CUGs7mok.mjs} +4 -4
- package/dist/{run-DlG3Ykj1.mjs → run-DywhwjNG.mjs} +6 -6
- package/dist/{runs-D2CXgW10.mjs → runs--14jim_0.mjs} +5 -5
- package/dist/{runtime-X6hVzSMW.mjs → runtime-Ckns6TKK.mjs} +248 -534
- package/dist/{schema-tables-FUOIyoUU.mjs → schema-tables-CeW0kpA5.mjs} +6 -6
- package/dist/{schemas-CmfNeqzG.mjs → schemas-CHMD0HrY.mjs} +4 -4
- package/dist/{search-BAXg-EJw.mjs → search-CXRavT7G.mjs} +1 -0
- package/dist/{search-Dl7xzF6Q.mjs → search-DyC54bGf.mjs} +7 -7
- package/dist/{search-CLpDqYpY.mjs → search-LmBQu1Jg.mjs} +5 -5
- package/dist/{segment-Bx28f38v.mjs → segment-DeT_Yic6.mjs} +6 -6
- package/dist/{send-CoGV2zkp.mjs → send-BWSJMrDL.mjs} +3 -3
- package/dist/{set-active-CbiJv8Hg.mjs → set-active-C5cLG4_O.mjs} +4 -4
- package/dist/{set-CrR9IumN.mjs → set-r2xiXrT_.mjs} +4 -4
- package/dist/{set-sensitivity-CTHVxpnU.mjs → set-sensitivity-BMLKazua.mjs} +4 -4
- package/dist/{setting-CUxdweNJ.mjs → setting-CDRusiqP.mjs} +4 -4
- package/dist/{setup-4uySIB-t.mjs → setup-BZaJVww3.mjs} +3 -3
- package/dist/{signal-0Yt8JTMn.mjs → signal-4tpCIkqR.mjs} +1 -1
- package/dist/{skill-list-goCqmfFF.mjs → skill-list-D2FhhYS3.mjs} +9 -3
- package/dist/{skills-86j411Qz.mjs → skills-9ihLaSmM.mjs} +3 -3
- package/dist/{skills-DeWsLMwC.mjs → skills-y2iVfW9k.mjs} +2 -2
- package/dist/snippet-Ce0o33Rj.mjs +19 -0
- package/dist/{stash-BNKlbxtD.mjs → stash-Dj-mnIa4.mjs} +5 -5
- package/dist/{status-B7bwHLkk.mjs → status-B2Xj_q8f.mjs} +3 -3
- package/dist/{status-Bul9El-c.mjs → status-BtWz7Pzn.mjs} +16 -7
- package/dist/{subscription-DPAGevGU.mjs → subscription-Dh--agqE.mjs} +6 -6
- package/dist/{subscriptions-DIRsHcKP.mjs → subscriptions-CJ8Jdp9A.mjs} +6 -6
- package/dist/{summary-CeVt80Kb.mjs → summary-ccbkNDbC.mjs} +3 -3
- package/dist/{sync-schema-B9fLcZoa.mjs → sync-schema-CewUOkmm.mjs} +6 -6
- package/dist/{sync-schema-oDTbhjW1.mjs → sync-schema-HwQectZd.mjs} +5 -5
- package/dist/{sync-task-BAMOf6_t.mjs → sync-task-DEzhiaU9.mjs} +3 -3
- package/dist/{table-BFIOH6Pb.mjs → table-CFZU-BRg.mjs} +2 -2
- package/dist/table-P9ovwcaB.mjs +26 -0
- package/dist/{table-selector-flags-BUR0-n6j.mjs → table-selector-flags-p4jun7-v.mjs} +3 -3
- package/dist/{table-Ci6bhZkb.mjs → table-zAdW5_3H.mjs} +5 -5
- package/dist/{text-CdtEI6l6.mjs → text-C2VwKF9D.mjs} +1 -1
- package/dist/{timeline-uDCmwGFT.mjs → timeline-BgWz8DYK.mjs} +1 -1
- package/dist/timeline-DLaBypse.mjs +21 -0
- package/dist/{timeline-CCSU2qOS.mjs → timeline-DcsCXNUt.mjs} +5 -1
- package/dist/{timeline-event-BY2Hj72e.mjs → timeline-event-xAAR6b-v.mjs} +6 -6
- package/dist/transform-10YE8j5K.mjs +28 -0
- package/dist/{transform-D4z70PIN.mjs → transform-CWGJB8N_.mjs} +1 -1
- package/dist/{transform-job-AaMZRxAq.mjs → transform-job-BBZ5L46v.mjs} +1 -1
- package/dist/{transform-job-CCguL6LP.mjs → transform-job-ClX8e5iO.mjs} +2 -1
- package/dist/transform-job-D97AutnF.mjs +22 -0
- package/dist/{transform-tag-CzjLKILh.mjs → transform-tag-BXusFzMX.mjs} +5 -5
- package/dist/{transform-test-BjjCQ2xm.mjs → transform-test-Bexa_K89.mjs} +5 -1
- package/dist/{transform-test-DHGKeuHa.mjs → transform-test-C49ZTK7M.mjs} +1 -1
- package/dist/transform-test-UsH1udc4.mjs +16 -0
- package/dist/{transforms-0uhBh0H4.mjs → transforms-CqV01bMM.mjs} +5 -5
- package/dist/{transport-BmNrb0Lz.mjs → transport-0qFZhEuP.mjs} +144 -41
- package/dist/{tree-oBEw8hDj.mjs → tree-Td6rgyOa.mjs} +3 -3
- package/dist/{unpublish-BJ9OKN1N.mjs → unpublish-D4XTZsFW.mjs} +3 -3
- package/dist/{unreferenced-D6UyA_Nu.mjs → unreferenced-cR-l4zXN.mjs} +6 -6
- package/dist/{update-7zsDGAWa.mjs → update-BJL5975i.mjs} +6 -6
- package/dist/{update-DGwGjOnH.mjs → update-BqkqMOVN.mjs} +5 -5
- package/dist/{update-CKe2Bwpv.mjs → update-C4iu-vQm.mjs} +6 -6
- package/dist/{update-D9eLVWFQ.mjs → update-C7Wmom6x.mjs} +5 -5
- package/dist/{update-BK_SpSrG.mjs → update-C7dZLbsf.mjs} +4 -4
- package/dist/{update-BZgHTH5P.mjs → update-C8xdeYI2.mjs} +4 -4
- package/dist/{update-BqrZ-8IK.mjs → update-CHB4kvz-.mjs} +8 -8
- package/dist/{update-M7yDPmJ-.mjs → update-CND9At61.mjs} +5 -5
- package/dist/{update-bGDXSnBh.mjs → update-CpwWURTp.mjs} +5 -5
- package/dist/{update-CKJ6Das4.mjs → update-D-cTgmb0.mjs} +6 -6
- package/dist/{update-DKagaJw0.mjs → update-DFK2iUSP.mjs} +6 -6
- package/dist/{update-Cv6IMLyu.mjs → update-DROjGe3Q.mjs} +4 -4
- package/dist/{update-Bdi40RG0.mjs → update-DZHgr6Gu.mjs} +5 -5
- package/dist/{update-CHA4VWKT.mjs → update-Dk0E66Va.mjs} +5 -5
- package/dist/{update-DgmlUn64.mjs → update-DqCZsbLh.mjs} +6 -6
- package/dist/{update-CEhub3Wz.mjs → update-DrVc25R8.mjs} +5 -5
- package/dist/{update-CYQkWLpZ.mjs → update-Js0IiqCq.mjs} +6 -6
- package/dist/{update-DneJLQXe.mjs → update-dQeji6RA.mjs} +7 -7
- package/dist/{update-dashcard-DNsf-gJ1.mjs → update-dashcard-BmkfJ7t9.mjs} +4 -4
- package/dist/{update-CXfLvhmK.mjs → update-nGURR-y6.mjs} +6 -6
- package/dist/{upgrade-BRJH93W0.mjs → upgrade-B6V_1cUh.mjs} +4 -4
- package/dist/{upload-DJB7DMA1.mjs → upload-B6zBzMPW.mjs} +2 -2
- package/dist/{upload-CGz8u2wG.mjs → upload-CfYmBv51.mjs} +3 -3
- package/dist/upload-Dvjfz16M.mjs +13 -0
- package/dist/{uuid-3qmLYgrG.mjs → uuid-B8ynbkqG.mjs} +2 -2
- package/dist/{validate-D_iikPkc.mjs → validate-C7DGkwb-.mjs} +1 -1
- package/dist/{validate-query-DIcK8alR.mjs → validate-query-CYUvRvVM.mjs} +2 -2
- package/dist/{values-Bn2Wcz4t.mjs → values-36bzf9cK.mjs} +3 -3
- package/dist/{verify-CA4PEHlO.mjs → verify-BdW-GExk.mjs} +3 -3
- package/dist/{verify-C2K-zMuQ.mjs → verify-C4Tml4fD.mjs} +3 -3
- package/dist/{verify-CCX2N98Q.mjs → verify-Cs9e28YA.mjs} +4 -4
- package/dist/{wait-DCgCJBqX.mjs → wait-BV6JOdgi.mjs} +6 -6
- package/dist/{wait-flags-aRQHTjwg.mjs → wait-flags-DjyK03cm.mjs} +2 -2
- package/dist/{window-2ybHqui2.mjs → window-CfK_j6m1.mjs} +1 -1
- package/package.json +1 -1
- package/skill-data/core/SKILL.md +11 -5
- package/skill-data/dashboard/SKILL.md +6 -0
- package/skill-data/git-sync/SKILL.md +64 -14
- package/dist/card-P2-4BkXV.mjs +0 -25
- package/dist/collection-BI8Fy9vS.mjs +0 -21
- package/dist/dashboard-C-YJxDam.mjs +0 -35
- package/dist/data-action-DER3EMD7.mjs +0 -24
- package/dist/dependency-v9fHJ-N-.mjs +0 -15
- package/dist/document-CGvUmD9i.mjs +0 -20
- package/dist/field-C9AcBe8x.mjs +0 -21
- package/dist/git-sync-D4R0cHvk.mjs +0 -29
- package/dist/glossary-C6EnoEXg.mjs +0 -14
- package/dist/snippet-C3gamfFK.mjs +0 -19
- package/dist/table-C--k-JXA.mjs +0 -26
- package/dist/timeline-ClMmTycg.mjs +0 -21
- package/dist/transform-BZaNFGeK.mjs +0 -28
- package/dist/transform-job-QMI2qWin.mjs +0 -22
- package/dist/transform-test-B9le1jKH.mjs +0 -16
- package/dist/upload-T5wS1XtL.mjs +0 -13
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { i as TransformTagUpdateInput, t as TransformTag } from "./transform-tag-CcElGp3C.mjs";
|
|
7
7
|
import { t as transformTagView } from "./transform-tag-Dmb4u3-Q.mjs";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { o as DataActionUpdateInput, t as DataAction } from "./data-action-DZxVB_hD.mjs";
|
|
7
|
-
import { n as DATA_ACTION_DATASET_QUERY_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-
|
|
7
|
+
import { n as DATA_ACTION_DATASET_QUERY_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-CYUvRvVM.mjs";
|
|
8
8
|
import { n as dataActionView } from "./data-action-R9qxJDPA.mjs";
|
|
9
9
|
//#region src/commands/data-action/update.ts
|
|
10
10
|
var update_default = defineMetabaseCommand({
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { c as CardUpdateInput, t as Card } from "./card-P5mBknsl.mjs";
|
|
7
7
|
import { n as cardView } from "./card-CQNUT9pm.mjs";
|
|
8
|
-
import { o as preflightMbql5Query, s as skipValidateFlag, t as CARD_DATASET_QUERY_LABELS } from "./validate-query-
|
|
8
|
+
import { o as preflightMbql5Query, s as skipValidateFlag, t as CARD_DATASET_QUERY_LABELS } from "./validate-query-CYUvRvVM.mjs";
|
|
9
9
|
//#region src/commands/card/update.ts
|
|
10
10
|
var update_default = defineMetabaseCommand({
|
|
11
11
|
meta: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
|
-
import { o as TransformJobUpdateInput, t as TransformJob } from "./transform-job-
|
|
7
|
-
import { t as transformJobView } from "./transform-job-
|
|
6
|
+
import { o as TransformJobUpdateInput, t as TransformJob } from "./transform-job-ClX8e5iO.mjs";
|
|
7
|
+
import { t as transformJobView } from "./transform-job-BBZ5L46v.mjs";
|
|
8
8
|
//#region src/commands/transform-job/update.ts
|
|
9
9
|
var update_default = defineMetabaseCommand({
|
|
10
10
|
meta: {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { i as SegmentUpdateInput, t as Segment } from "./segment-OsrbUDzw.mjs";
|
|
7
|
-
import { i as SEGMENT_DEFINITION_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-
|
|
7
|
+
import { i as SEGMENT_DEFINITION_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-CYUvRvVM.mjs";
|
|
8
8
|
import { t as segmentView } from "./segment-C_gl5ag6.mjs";
|
|
9
9
|
//#region src/commands/segment/update.ts
|
|
10
10
|
var update_default = defineMetabaseCommand({
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
|
-
import { t as Table, y as TableUpdateInput } from "./table-
|
|
7
|
-
import { u as tableView } from "./table-
|
|
6
|
+
import { t as Table, y as TableUpdateInput } from "./table-zAdW5_3H.mjs";
|
|
7
|
+
import { u as tableView } from "./table-CFZU-BRg.mjs";
|
|
8
8
|
//#region src/commands/table/update.ts
|
|
9
9
|
var update_default = defineMetabaseCommand({
|
|
10
10
|
meta: {
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { f as TransformUpdateInput, t as Transform } from "./transform-DiW7bREn.mjs";
|
|
7
|
-
import { a as TRANSFORM_SOURCE_QUERY_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-
|
|
8
|
-
import { n as transformView } from "./transform-
|
|
9
|
-
import { t as enrichTransformCollectionError } from "./collection-namespace-
|
|
7
|
+
import { a as TRANSFORM_SOURCE_QUERY_LABELS, o as preflightMbql5Query, s as skipValidateFlag } from "./validate-query-CYUvRvVM.mjs";
|
|
8
|
+
import { n as transformView } from "./transform-CWGJB8N_.mjs";
|
|
9
|
+
import { t as enrichTransformCollectionError } from "./collection-namespace-B1OkM7p1.mjs";
|
|
10
10
|
//#region src/commands/transform/update.ts
|
|
11
11
|
var update_default = defineMetabaseCommand({
|
|
12
12
|
meta: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
6
|
import { d as DashcardPatchInput, l as Dashcard } from "./dashboard-Phz3XpRM.mjs";
|
|
7
7
|
import { r as dashcardView } from "./dashboard-XSTr9QCr.mjs";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
4
|
-
import { t as readBody } from "./body-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
|
+
import { t as readBody } from "./body-BkkQkGJg.mjs";
|
|
5
5
|
import { t as bodyInputFlags } from "./body-flags-AqKpN01Y.mjs";
|
|
6
|
-
import { a as TransformTestUpdateInput, t as TransformTest } from "./transform-test-
|
|
7
|
-
import { n as transformTestView } from "./transform-test-
|
|
6
|
+
import { a as TransformTestUpdateInput, t as TransformTest } from "./transform-test-Bexa_K89.mjs";
|
|
7
|
+
import { n as transformTestView } from "./transform-test-C49ZTK7M.mjs";
|
|
8
8
|
//#region src/commands/transform-test/update.ts
|
|
9
9
|
var update_default = defineMetabaseCommand({
|
|
10
10
|
meta: {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { n as throwIfAborted, t as combineAborts } from "./signal-
|
|
4
|
-
import { n as streamProcess } from "./process-
|
|
1
|
+
import { Ct as NetworkError, Dt as UnknownError, Et as TimeoutError, W as HttpError, Z as parseJson, _ as promptConfirm, a as renderItem, ct as outputFlags, f as writeText, kt as errorMessage, nt as version, t as interruptSignal, tt as name, vt as AbortError } from "./cli.mjs";
|
|
2
|
+
import { T as USER_AGENT, t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { n as throwIfAborted, t as combineAborts } from "./signal-4tpCIkqR.mjs";
|
|
4
|
+
import { n as streamProcess } from "./process-DImdroix.mjs";
|
|
5
5
|
import { z } from "zod";
|
|
6
6
|
import { realpathSync } from "node:fs";
|
|
7
7
|
import { compare, valid } from "semver";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as fileNotFoundError } from "./input-
|
|
1
|
+
import { jt as isFileNotFoundError, yt as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { n as fileNotFoundError } from "./input-AXP2LCOV.mjs";
|
|
3
3
|
import { basename } from "node:path";
|
|
4
4
|
import { readFile } from "node:fs/promises";
|
|
5
5
|
//#region src/runtime/upload.ts
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
3
|
import { t as ContentTranslationUploadResult } from "./content-translation-BrHOrmj9.mjs";
|
|
4
|
-
import { n as requireUploadFilePath, t as readCsvFile } from "./upload-
|
|
4
|
+
import { n as requireUploadFilePath, t as readCsvFile } from "./upload-B6zBzMPW.mjs";
|
|
5
5
|
//#region src/output/views/content-translation.ts
|
|
6
6
|
const contentTranslationUploadView = {
|
|
7
7
|
compactPick: ContentTranslationUploadResult,
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { t as defineCommandGroup } from "./group-81zoQcEP.mjs";
|
|
2
|
+
//#region src/commands/upload/index.ts
|
|
3
|
+
var upload_default = defineCommandGroup({
|
|
4
|
+
name: "upload",
|
|
5
|
+
description: "Upload CSV files into Metabase",
|
|
6
|
+
subCommands: {
|
|
7
|
+
csv: () => import("./csv-CcnhKpuj.mjs").then((m) => m.default),
|
|
8
|
+
append: () => import("./append-D4ekYCuD.mjs").then((m) => m.default),
|
|
9
|
+
replace: () => import("./replace-wVi_XDut.mjs").then((m) => m.default)
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
//#endregion
|
|
13
|
+
export { upload_default as default };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ct as outputFlags, d as writeJson, f as writeText, yt as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { Q as parseInteger, t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { randomUUID } from "node:crypto";
|
|
5
5
|
//#region src/commands/uuid.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Pt as escapeJsonPointerSegment, Y as isPlainObject, yt as ConfigError } from "./cli.mjs";
|
|
2
2
|
import { z } from "zod";
|
|
3
3
|
import Ajv2020 from "ajv/dist/2020.js";
|
|
4
4
|
import addFormats from "ajv-formats";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as validateQuery, i as isMbql5Query, n as assertNotLegacyEnvelopeWrappingMbql5 } from "./validate-
|
|
1
|
+
import { d as writeJson, yt as ConfigError } from "./cli.mjs";
|
|
2
|
+
import { a as validateQuery, i as isMbql5Query, n as assertNotLegacyEnvelopeWrappingMbql5 } from "./validate-C7DGkwb-.mjs";
|
|
3
3
|
//#region src/commands/validate-query.ts
|
|
4
4
|
const skipValidateFlag = { "skip-validate": {
|
|
5
5
|
type: "boolean",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, m as formatScalar, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
4
|
import { u as FieldValues } from "./field-5nivEfd6.mjs";
|
|
5
5
|
import { s as fieldValuesView } from "./field-wmN6raOG.mjs";
|
|
6
6
|
//#region src/commands/field/values.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
4
|
import { t as ModerationReview } from "./moderation-review-BdqEH6N1.mjs";
|
|
5
5
|
import { i as moderationReviewView, n as verifyFlags, r as describeReview, t as reviewInput } from "./verify-flags-CMpRkMPa.mjs";
|
|
6
6
|
//#region src/commands/dashboard/verify.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { t as parseId } from "./parse-id-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
4
4
|
import { t as ModerationReview } from "./moderation-review-BdqEH6N1.mjs";
|
|
5
5
|
import { i as moderationReviewView, n as verifyFlags, r as describeReview, t as reviewInput } from "./verify-flags-CMpRkMPa.mjs";
|
|
6
6
|
//#region src/commands/card/verify.ts
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as createClient } from "./client-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { n as createClient } from "./client-BBwYPXDW.mjs";
|
|
2
|
+
import { Ct as NetworkError, Et as TimeoutError, St as MetabaseError, W as HttpError, kt as errorMessage } from "./cli.mjs";
|
|
3
|
+
import { I as probeServer, T as USER_AGENT } from "./runtime-Ckns6TKK.mjs";
|
|
4
4
|
//#region src/core/auth/verify.ts
|
|
5
5
|
const VERIFY_TIMEOUT_MS = 15e3;
|
|
6
6
|
async function verifyAndProbe(url, credential, options = {}) {
|
|
@@ -35,7 +35,7 @@ function failure(error, which) {
|
|
|
35
35
|
if (error instanceof HttpError) return {
|
|
36
36
|
ok: false,
|
|
37
37
|
which,
|
|
38
|
-
kind: error.
|
|
38
|
+
kind: error.kind === "auth" ? "auth" : "server",
|
|
39
39
|
status: error.status,
|
|
40
40
|
endpoint: error.developerDetail.url,
|
|
41
41
|
message: error.userMessage
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as defineMetabaseCommand } from "./runtime-
|
|
3
|
-
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-
|
|
4
|
-
import { r as parseWaitSchedule } from "./wait-flags-
|
|
5
|
-
import { u as syncTaskView } from "./git-sync-
|
|
6
|
-
import { a as throwIfFailedTask, i as taskPollOptions, n as formatSyncTask, r as syncTaskIdleView, t as SyncTaskOrIdle } from "./sync-task-
|
|
1
|
+
import { c as renderSummary, ct as outputFlags, lt as profileFlag, rt as connectionFlags } from "./cli.mjs";
|
|
2
|
+
import { t as defineMetabaseCommand } from "./runtime-Ckns6TKK.mjs";
|
|
3
|
+
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-CX3jPtXb.mjs";
|
|
4
|
+
import { r as parseWaitSchedule } from "./wait-flags-DjyK03cm.mjs";
|
|
5
|
+
import { u as syncTaskView } from "./git-sync-Ch1V1fEK.mjs";
|
|
6
|
+
import { a as throwIfFailedTask, i as taskPollOptions, n as formatSyncTask, r as syncTaskIdleView, t as SyncTaskOrIdle } from "./sync-task-DEzhiaU9.mjs";
|
|
7
7
|
//#region src/commands/git-sync/wait.ts
|
|
8
8
|
const WaitResult = SyncTaskOrIdle;
|
|
9
9
|
var wait_default = defineMetabaseCommand({
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as interruptSignal } from "./cli.mjs";
|
|
2
|
-
import { t as parseId } from "./parse-id-
|
|
3
|
-
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-
|
|
2
|
+
import { t as parseId } from "./parse-id-Cv5eM7sg.mjs";
|
|
3
|
+
import { n as DEFAULT_TIMEOUT_MS, t as DEFAULT_INTERVAL_MS } from "./poll-CX3jPtXb.mjs";
|
|
4
4
|
//#region src/commands/wait-flags.ts
|
|
5
5
|
const waitScheduleFlags = {
|
|
6
6
|
timeout: {
|
package/package.json
CHANGED
package/skill-data/core/SKILL.md
CHANGED
|
@@ -13,7 +13,7 @@ Top-level command groups (run `mb <group> --help` to discover verbs):
|
|
|
13
13
|
```
|
|
14
14
|
auth | db | table | field | upload | content-translation | query | card | dashboard | snippet | segment | measure | collection | library
|
|
15
15
|
document | glossary | timeline | timeline-event | transform | transform-job | transform-tag | transform-test | alert | subscription | setting
|
|
16
|
-
search | dependency | git-sync | setup | eid | uuid | upgrade | skills
|
|
16
|
+
search | dependency | git-sync | data-action | setup | eid | uuid | upgrade | skills
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
The conventions below — auth, flags, output, body input — hold across **every** group. Per-command flags and examples live in each command's `--help`; add `--json` for the machine-readable form with the output JSON Schema. A few flows have their own skills (see "Specialized skills"). When a card needs a query, prefer MBQL over native SQL (portable, pre-flight-validated — load `mbql`); fall back to native SQL when MBQL can't express it.
|
|
@@ -124,7 +124,7 @@ mb transform --help --json | jq -r '.commands[].command' # verbs under "transfo
|
|
|
124
124
|
|
|
125
125
|
## Resource quirks worth memorizing
|
|
126
126
|
|
|
127
|
-
|
|
127
|
+
What `--help` doesn't say: footguns and non-obvious behaviors.
|
|
128
128
|
|
|
129
129
|
- **db traversal: the hydration ladder.** Start with `database get <db-id> --include tables` — the compact table map (id, name, schema, description per table), one call that fits most databases. Pick the relevant tables, then `table fields <table-id>` per table (bounded: fields are per-table). `--include tables.fields` is the full rollup — small databases only. Hundreds of tables? Traverse by schema (`database schemas <db-id>` → `database schema-tables <db-id> <schema>`) or look tables up by name (`search <term> --models table --db-id <db-id> --limit 10`). `db sync-schema` / `rescan-values` queue async work and return `{status:"ok"}` at once; `sync-schema --wait` blocks until `initial_sync_status: complete`.
|
|
130
130
|
- **table fields.** `table get` never returns fields on its own — pass `--include fields` (compact; the underlying query_metadata response also carries FK targets and dimensions, visible under `--full`) or use `table fields <id>` (list envelope). `table update` patches table-level metadata only; physical columns aren't editable.
|
|
@@ -134,7 +134,7 @@ Routine verb shapes (list / get / create / update), every flag, and output schem
|
|
|
134
134
|
- **content-translation.** Admin-only, and separate from Remote Sync. `content-translation download > translations.csv` streams the complete active dictionary; `content-translation upload --file translations.csv` replaces every active translation with the file's contents. Always upload the canonical complete CSV, never a partial patch. An empty dictionary downloads as Metabase's four-row sample dictionary — don't re-upload it as real translations. Metabase limits dictionaries to 1.5 MiB.
|
|
135
135
|
<!-- /requires -->
|
|
136
136
|
- **card.** `dataset_query` is the `mbql/query` object itself (→ `mbql`). `--export-format csv|xlsx` streams the raw export (pipe to a file), bypassing the JSON envelope. `archive` is the only delete; unarchive with `update --body '{"archived":false}'`. `visualization_settings` keys are scoped by `display` and aren't pre-flighted — see `visualization`.
|
|
137
|
-
- **dashboard.** Dashcards round-trip through `PUT /api/dashboard/:id` (no per-dashcard endpoint): `update-dashcard <dash-id> <dashcard-id>` patches one safely; `update --body '{"dashcards":[…]}'` replaces the whole set (omitted ids are deleted server-side; negative ids for new cards). Every dashcard
|
|
137
|
+
- **dashboard.** Dashcards round-trip through `PUT /api/dashboard/:id` (no per-dashcard endpoint): `update-dashcard <dash-id> <dashcard-id>` patches one safely; `update --body '{"dashcards":[…]}'` replaces the whole set (omitted ids are deleted server-side; negative ids for new cards). Every dashcard, existing ones included, needs `card_id`; use `card_id:null` plus a `visualization_settings.virtual_card` block (`{display:"text"|"heading"|"link"|…}`) for non-question cards. `create` takes the **same** `dashcards` array, so lay out the whole dashboard in one call. `create`/`update` pre-flight every positive `card_id` and exit **2** with `{ok:false,errors:[…]}` on a bad ref (non-bypassable). `dashboard get <id>` (or `--full`) hydrates dashcards/tabs; `list` omits them. **The grid is 24 columns wide:** each dashcard's `{col, row, size_x, size_y}` is in grid units — **full-width is `size_x: 24`**. Keep `col + size_x ≤ 24`, start a full-width stack's `col` at 0, and don't overlap (the server stores collisions as sent). Load the `dashboard` skill (layout patterns, per-chart default sizes) before composing any `dashcards` array.
|
|
138
138
|
- **dashboard parameters (filters).** A dashboard's `parameters` array holds its filter widgets; they're part of the dashboard record, so read them with `dashboard get <id> --fields parameters --json` (no separate verb). **Editing replaces the _whole_ array** (like dashcards), so it's a read-modify-write loop and omitting a parameter deletes it. A parameter only filters a card once it is **mapped** onto that dashcard's `parameter_mappings` — an unmapped parameter is an inert widget. `type` is a **closed enum**; an unlisted value is a hard parse error that echoes the full allowed set back to you. `dashboard parameter-values <id> <parameter-id> [--query <substr>]` fetches a widget's selectable values (`{values, has_more_values}`; `--query` is a case-insensitive substring search). Parameter types, ids, mapping targets, and value sources → the `dashboard` skill; load it before authoring a `parameters` array.
|
|
139
139
|
<!-- requires: contentVerification -->
|
|
140
140
|
- **verify.** `card verify <id>` / `dashboard verify <id>` (admins only) mark it verified (rank boost, `search --verified`). `--remove` (or a card query edit) withdraws it; `--text` adds a note; `get <id> --fields moderation_reviews` reads it. Verify only what you checked and the user approved.
|
|
@@ -142,8 +142,11 @@ Routine verb shapes (list / get / create / update), every flag, and output schem
|
|
|
142
142
|
- **alert / subscription are two unrelated systems.** `alert` watches one **card** and fires on a send condition (`/api/notification`: a cron string, `channel/email`-prefixed handlers, typed recipients); `subscription` delivers one **dashboard** on a schedule (`/api/pulse`: structured `schedule_type` + hour/day/frame, bare `email` channels, `{id}|{email}` recipients). The bodies are not interchangeable. Both silently deliver nowhere if the server has no SMTP / Slack app — check `mb setting get 'email-configured?'` (quote it; the `?` is a shell glob) before creating either. Their list-valued fields (`handlers`/`subscriptions`, `channels`/`cards`) **replace wholesale** on update, so adding one recipient is a read-modify-write. `mb card alerts <id>` and `mb dashboard subscriptions <id>` list what's already attached to a card/dashboard; `archive` deactivates rather than deletes. Load the `notification` skill before authoring either body.
|
|
143
143
|
- **snippet `--archived` is a swap, not a union** — list returns _either_ active _or_ archived rows, never both. (Same for `--filter archived` on dashboard/collection.)
|
|
144
144
|
- **segment / measure.** `update` and `archive` require a non-blank `revision_message` (audit-logged); the CLI does not synthesize it on `update`. `archive` defaults to `"Archived via mb CLI"` — override with `--revision-message`. `definition` is a flat MBQL clause (→ `mbql`): segment = a filter, measure = exactly one aggregation.
|
|
145
|
-
- **timeline / timeline-event.**
|
|
145
|
+
- **timeline / timeline-event.** A timeline's events draw only on time-series questions saved in the **same collection** (`collection_id`; null = root) — not sub-collections, never on dashboard cards — and only when the event's `timestamp` falls inside the chart's range. Event `create` requires `timestamp` (ISO 8601), `timezone` (IANA name), `time_matters` (false = date-only), and `timeline_id` — no default timeline is auto-created. There is no `timeline-event list`; use `timeline events <id>` (`--archived` to include archived). Archiving a timeline cascades to its events; `delete` is a **hard** delete of both — prefer `archive`.
|
|
146
146
|
- **collection `<ref>`** (`get`/`items`): positive int, `root`, `trash`, or a 21-char entity_id; `update`/`archive` take the int only. `collection items` pages the server, pulling only what the cap can show — read `has_more`/`next_offset` to continue. `collection tree` is **JSON-only** and hides the Library without `--include-library`. A transform collection needs `collection create --namespace transforms`. `update` keeps `archived` unless `--archived` is given.
|
|
147
|
+
<!-- requires: remoteSync -->
|
|
148
|
+
- **remote-synced collections.** Synced content may depend only on synced content: a write that breaks this fails with 400 `Uses content that is not remote synced.` (a source outside sync scope) or `Used by remote synced content.` (archiving or moving out a dependency). Build versioned content inside the synced collection; to move existing content in, see `git-sync`.
|
|
149
|
+
<!-- /requires -->
|
|
147
150
|
- **setting set** parses the value as **strict JSON**: a string is `'"value"'` (inner quotes), booleans `true`/`false`, numbers bare. Wrong quoting silently errors — confirm with `setting get <key>` after. `setting get --json` works on every value type (wrapping bare-text responses into `{key, value}`).
|
|
148
151
|
- **search vs. list.** Enumerate with `… list` verbs; `search` ranks a query or spans resources. `--search-native-query` matches native query text and keeps only query-bearing models; dashboard questions need `--include-dashboard-questions`.
|
|
149
152
|
<!-- requires: transforms -->
|
|
@@ -176,7 +179,10 @@ This file is enough for any single-command task. For anything deeper, load the r
|
|
|
176
179
|
- **`transform-test-plan`** — planning transform tests.
|
|
177
180
|
<!-- /requires -->
|
|
178
181
|
- **`document`** — Metabase documents (TipTap body, embedding cards).
|
|
179
|
-
<!-- requires:
|
|
182
|
+
<!-- requires: dataActionsWithoutModel -->
|
|
183
|
+
- **`data-action`** — saved SQL writes: enabling, body, parameters, running.
|
|
184
|
+
<!-- /requires -->
|
|
185
|
+
<!-- requires: remoteSync -->
|
|
180
186
|
- **`git-sync`** — round-tripping content to/from a git remote.
|
|
181
187
|
<!-- /requires -->
|
|
182
188
|
- **`data-workflow`** — the guided, end-to-end data workflow: investigate raw data, build clean analysis-ready tables, define reusable segments/measures/metrics, answer questions, build dashboards. **Start here when the user states a goal rather than a single verb** — "make sense of my data", "build a data model", "be my data analyst". It detects where the data is and routes to the right stage.
|
|
@@ -12,6 +12,12 @@ A dashboard starts as cards on a grid; it becomes an **app** when filters drive
|
|
|
12
12
|
|
|
13
13
|
Inspect before you wire: `mb dashboard get <id> --json` hydrates `parameters`, `dashcards`, and `tabs`; `mb dashboard cards <id>` lists just the dashcards. To start from an existing dashboard, `mb dashboard copy <id> --collection-id <id> --json` copies it with its tabs and dashcards (the cards stay referenced; `--deep` duplicates the questions and metrics into the target collection, and a dashboard holding dashboard questions needs it). Cards left out of the copy come back by id as `uncopied`.
|
|
14
14
|
|
|
15
|
+
<!-- requires: remoteSync -->
|
|
16
|
+
|
|
17
|
+
A dashboard bound for a remote-synced collection is built in it directly: create the dashboard there, then its cards. A card only this dashboard shows is best a **dashboard question** — `card create` with `"dashboard_id": <dash-id>` and the dashboard's `collection_id` — so the dashboard and its questions move as one unit. A card shared across dashboards is a regular card and moves into the synced collection before any dashboard that uses it (`git-sync` → "Moving content into or out of a synced collection").
|
|
18
|
+
|
|
19
|
+
<!-- /requires -->
|
|
20
|
+
|
|
15
21
|
## Layout: the grid is 24 columns — not 12
|
|
16
22
|
|
|
17
23
|
Every dashcard carries `{col, row, size_x, size_y}` in grid units: `col` is 0-indexed from the left edge, `row` grows downward, and `col + size_x ≤ 24`. **Full-width is `size_x: 24` — Metabase's per-chart _default_ width of 12 is half a row.** A layout authored on the usual 12-column web-grid assumption crams the whole dashboard into the left half of the viewport. The server stores whatever geometry you send — overlaps and gaps included, no auto-fix.
|
|
@@ -15,7 +15,7 @@ This skill covers the import/export workflow. Flag conventions and auth setup li
|
|
|
15
15
|
|
|
16
16
|
## Precondition: read state before mutating
|
|
17
17
|
|
|
18
|
-
Always run `status` (or
|
|
18
|
+
Always run `status` (or the individual checks below) before `import` or `export`. Importing on a dirty instance silently rejects unless you pass `--force`.
|
|
19
19
|
|
|
20
20
|
<!-- requires: remoteSyncMerge -->
|
|
21
21
|
|
|
@@ -26,11 +26,18 @@ Exporting after the remote moved on ends in a `conflict` task unless the export
|
|
|
26
26
|
```bash
|
|
27
27
|
mb git-sync status --profile <n> --json # → branch, dirty, current task
|
|
28
28
|
mb git-sync is-dirty --profile <n> --json # → {is_dirty: bool}; instance has unexported changes
|
|
29
|
-
mb git-sync has-remote-changes --profile <n> --json # → {has_changes: bool, remote_version, local_version, cached}; remote has unimported commits
|
|
30
29
|
mb git-sync dirty --profile <n> --json # → list the dirty objects
|
|
31
30
|
mb git-sync current-task --profile <n> --json # → in-flight task (or idle)
|
|
32
31
|
```
|
|
33
32
|
|
|
33
|
+
<!-- requires: remoteSyncRemoteChanges -->
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
mb git-sync has-remote-changes --profile <n> --json # → {has_changes: bool, remote_version, local_version, cached}; remote has unimported commits
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
<!-- /requires -->
|
|
40
|
+
|
|
34
41
|
**Clean up before exporting.** If you've created entities you intend to delete (a failed transform you're going to retry, a card you authored to test a body shape, a draft dashboard) — do the deletes _before_ the first `git-sync export`. Once committed, the cleanup needs a second commit, and the failed entity stays visible in `git log` forever. For transforms, prefer `transform update <id>` over delete + create (see the `transform` skill).
|
|
35
42
|
|
|
36
43
|
## Import (remote → instance)
|
|
@@ -53,8 +60,13 @@ Pulls the configured branch and applies it to the instance. Polls until the task
|
|
|
53
60
|
Workflow:
|
|
54
61
|
|
|
55
62
|
1. Read state (above) — confirm `is_dirty: false` (or `--force` is intended).
|
|
56
|
-
2.
|
|
57
|
-
|
|
63
|
+
2. `git-sync import --branch <branch>` — runs to terminal status by default.
|
|
64
|
+
|
|
65
|
+
<!-- requires: remoteSyncRemoteChanges -->
|
|
66
|
+
|
|
67
|
+
Between the two, confirm `has-remote-changes` reports `has_changes: true` — there's actually something to import.
|
|
68
|
+
|
|
69
|
+
<!-- /requires -->
|
|
58
70
|
|
|
59
71
|
<!-- requires: remoteSyncMerge -->
|
|
60
72
|
|
|
@@ -110,17 +122,29 @@ mb git-sync export-preflight --profile <n> --json # → {has_changes, clean, c
|
|
|
110
122
|
|
|
111
123
|
A dry run against the live remote branch, writing nothing. Read it between the state check and the export, and decide from the fields:
|
|
112
124
|
|
|
113
|
-
| Answer | Meaning | Move
|
|
114
|
-
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
115
|
-
| `has_changes: false` | The remote has not moved past the last sync, or nothing has been synced yet — and then `force_push_casualties` is empty whatever the remote holds. | `export -m "..."` applies as-is. Don't read empty casualties on a never-synced instance as leave to `--force`.
|
|
116
|
-
| `has_changes: true`, `reason: null` | The remote moved on. `clean` says whether a three-way merge would apply; `conflicts` names the entities changed on both sides; `summary` counts what a merge would fold in. | `clean: true`: `export --merge -m "..."`. `clean: false`: the conflicts need the user's call
|
|
117
|
-
| `reason: "history-rewritten"` | The remote was force-pushed or rebased, so there is no merge base. | Only `export --force` can push, and only with the user's explicit go-ahead; `force_push_casualties` is exactly what it would delete or overwrite.
|
|
125
|
+
| Answer | Meaning | Move |
|
|
126
|
+
| ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
127
|
+
| `has_changes: false` | The remote has not moved past the last sync, or nothing has been synced yet — and then `force_push_casualties` is empty whatever the remote holds. | `export -m "..."` applies as-is. Don't read empty casualties on a never-synced instance as leave to `--force`. |
|
|
128
|
+
| `has_changes: true`, `reason: null` | The remote moved on. `clean` says whether a three-way merge would apply; `conflicts` names the entities changed on both sides; `summary` counts what a merge would fold in. | `clean: true`: `export --merge -m "..."`. `clean: false`: the conflicts need the user's call between the three options under "After a `conflict` task". A plain `export` ends in a `conflict` task, and so does `stash`: its new branch starts at the moved remote tip. |
|
|
129
|
+
| `reason: "history-rewritten"` | The remote was force-pushed or rebased, so there is no merge base. | Only `export --force` can push, and only with the user's explicit go-ahead; `force_push_casualties` is exactly what it would delete or overwrite. |
|
|
130
|
+
|
|
131
|
+
`force_push_casualties` is reported on every answer: it is the remote content a force push would discard instead of merging, so read it before ever passing `--force`. It is empty when nothing has been synced yet, yet `export --force` then replaces the remote's managed directories wholesale: check the remote before forcing a first export.
|
|
118
132
|
|
|
119
|
-
|
|
133
|
+
Read the preflight before every export: an export that finds the divergence itself ends in `conflict`, and after that these fields can't be trusted (below).
|
|
120
134
|
|
|
121
135
|
### After a `conflict` task
|
|
122
136
|
|
|
123
|
-
A task that ends in `conflict`
|
|
137
|
+
Never answer a conflict with a retry. A task that ends in `conflict` may make the server count the remote commit it saw as synced; the server version does not say whether it does. If it does, `has-remote-changes` and `export-preflight` report nothing pending, `force_push_casualties` comes back empty, and a retried `export`, `export --merge` or `import --merge` succeeds without bringing the remote's changes into Metabase; a later full or forced export can then overwrite them on the remote. So don't decide from those reads. Take the user's call between:
|
|
138
|
+
|
|
139
|
+
- **The remote's side:** `import --force`. Discards Metabase's un-pushed work.
|
|
140
|
+
- **Metabase's side:** `export --force`. Overwrites the remote, and its casualties can't be previewed after a conflict: show the user the remote's commits since the last export in git first.
|
|
141
|
+
- **Both, through a reviewed PR:**
|
|
142
|
+
1. Note the tracked branch from `mb git-sync status --json` (`branch`): this is `<original>`.
|
|
143
|
+
2. `mb git-sync create-branch <name>`
|
|
144
|
+
3. `mb git-sync export -m "..."`
|
|
145
|
+
4. `mb git-sync import --force`, which reloads the instance from `<name>`.
|
|
146
|
+
5. Open a PR from `<name>` into `<original>` and review its diff before it merges. If the server counted the conflict as synced, `<name>` starts at the remote's tip, so the PR can undo the remote's edits to the conflicting entities without a git conflict: restore any such edit in the PR.
|
|
147
|
+
6. Once the PR merges, `mb git-sync import --branch <original>` tracks the original branch again and loads the merged result.
|
|
124
148
|
|
|
125
149
|
<!-- /requires -->
|
|
126
150
|
|
|
@@ -169,7 +193,7 @@ mb git-sync remove-collection <collection-id> --profile <n> --json
|
|
|
169
193
|
|
|
170
194
|
`<collection-id>` is a **positive integer** (the bulk endpoint's schema is `pos-int? → boolean`; nano-id / `root` / `trash` refs are not supported). Get the id from `collection list` (see `core`).
|
|
171
195
|
|
|
172
|
-
Both verbs return `{ success: true
|
|
196
|
+
Both verbs return `{ success: true }`, plus a `task_id` only when the toggle started a follow-up task (e.g. a finalization import after switching to read-only).
|
|
173
197
|
|
|
174
198
|
**Cascade.** A toggle on a parent cascades to every descendant by `location` prefix — `add-collection 4` flips `4` plus every collection nested under it. `remove-collection 4` is the symmetric inverse. There is no per-leaf-only mode.
|
|
175
199
|
|
|
@@ -183,6 +207,32 @@ mb setting set remote-sync-type '"read-write"' --profile <n>
|
|
|
183
207
|
|
|
184
208
|
**Verifying the result.** `mb git-sync status --profile <n> --json` lists the flagged collections under `synced_collections`, and `mb collection get <id> --json` shows the per-collection `is_remote_synced` flag.
|
|
185
209
|
|
|
210
|
+
## Moving content into or out of a synced collection
|
|
211
|
+
|
|
212
|
+
When remote sync is configured and the content is meant to be versioned, create it in the synced collection from the start. Nothing reaches git until `git-sync export`, and "Clean up before exporting" covers the drafts.
|
|
213
|
+
|
|
214
|
+
Synced content may only depend on synced content. Creating a card, dashboard, document, or collection in a synced collection, moving one in, or updating one inside it walks its dependencies, and the server refuses with 400 `Uses content that is not remote synced.` if any of them sits outside sync scope. What counts as a dependency:
|
|
215
|
+
|
|
216
|
+
- **Card:** the cards it is built on (source model, question, or metric), cards referenced as `{{#id}}` in native SQL, the card behind a filter's value source (`values_source_config.card_id`), and snippets — a snippet counts as synced only when the Library is.
|
|
217
|
+
- **Dashboard:** every dashcard's card, `series` cards, cards in parameter mappings and parameter value sources, actions, and the cards and dashboards a link card points to.
|
|
218
|
+
- Warehouse tables never count: a card on a raw table moves freely.
|
|
219
|
+
|
|
220
|
+
Three ways through:
|
|
221
|
+
|
|
222
|
+
1. **Bottom-up.** Move the sources first — models, then metrics, then the questions built on them — and the dashboard last. `card update <id> --body '{"collection_id":<synced-id>}'`, then `dashboard update <id> --body '{"collection_id":<synced-id>}'`.
|
|
223
|
+
2. **The whole containing collection.** `mb collection update <id> --parent-id <synced-id>` checks once, after the whole subtree has moved, so references inside the subtree pass.
|
|
224
|
+
3. **Dashboard questions.** A card created with `dashboard_id` (and the dashboard's `collection_id`) moves with its dashboard in the same transaction, so it never blocks the move.
|
|
225
|
+
|
|
226
|
+
The reverse holds too: archiving something, or moving it out of sync scope, is refused with 400 `Used by remote synced content.` while synced content still depends on it. The error names the dependents by model and id (`Used by remote synced content: Card 12, Dashboard 3. …`); move or archive those first, or leave the dependency in place.
|
|
227
|
+
|
|
228
|
+
Reading the inbound refusal: the error lists the blocking content as bare ids with no model type (`Uses content that is not remote synced: ids 412, 77. …`) — these are the dependencies to move first. Most are cards (`mb card get <id>`); otherwise try `mb dashboard get <id>` or `mb snippet get <id>`, and match the name against the content you meant to move.
|
|
229
|
+
|
|
230
|
+
<!-- requires: dependencyGraph -->
|
|
231
|
+
|
|
232
|
+
To plan the order before the first move, `mb dependency graph dashboard <id> --json` (or `card <id>`) lists everything the entity reads from; every card and snippet node outside the synced collection moves first.
|
|
233
|
+
|
|
234
|
+
<!-- /requires -->
|
|
235
|
+
|
|
186
236
|
<!-- requires: library -->
|
|
187
237
|
|
|
188
238
|
## Published table metadata (Library) and sync scope
|
|
@@ -203,11 +253,11 @@ Flagging the collection records it for the next export, which serializes its cur
|
|
|
203
253
|
|
|
204
254
|
## Don't (git-sync-specific)
|
|
205
255
|
|
|
206
|
-
- Don't turn instance-side changes into hand-written repo files
|
|
256
|
+
- Don't turn instance-side changes into hand-written repo files: export them and PR the exported branch (see the top of this skill). Files pushed behind Metabase's back race its own sync tasks.
|
|
207
257
|
- Don't conclude from an empty `dirty` list that a change type isn't tracked. Dirty-tracking only records changes to _eligible_ objects; the usual cause is scope (the collection isn't flagged — see "Published table metadata"), not capability. Check `synced_collections` in `status` before concluding.
|
|
208
258
|
- Don't run `git-sync import --force` or `git-sync export --force` without explicit user confirmation. Both are lossy — `--force` import discards instance-side work, `--force` export overwrites the remote branch.
|
|
209
259
|
- Don't drive `git-sync` against a Metabase instance that doesn't have remote-sync configured — every verb returns an error pointing at the missing `remote-sync-*` settings. To check: `mb setting get remote-sync-url --profile <n> --json`.
|
|
210
260
|
- Don't author content directly via `card create` / `transform create` and then assume `git-sync export` will commit it cleanly — the instance and repo can drift if you mix direct API writes with sync-tracked changes. If you do, follow direct writes immediately with `git-sync export -m "..."` to keep them in step.
|
|
261
|
+
- Don't move a dashboard or question into a synced collection before what it depends on, and don't retry a `Uses content that is not remote synced.` refusal unchanged. Move the listed dependencies first, move the whole containing collection, or build the content in the synced collection to begin with (see "Moving content into or out of a synced collection").
|
|
211
262
|
- Don't omit `-m` on `export` if the user wants a meaningful commit message — the default server-generated message is generic.
|
|
212
|
-
- Don't `git-sync export` to `main`/`master` without explicit user confirmation — sync work is conventionally on a feature branch. See "Branch guard" above.
|
|
213
263
|
- Don't reach for `mb setting set` to mark a collection as remote-synced — that endpoint writes single-key settings, not the bulk `collections` map. Use `mb git-sync add-collection <id>` / `mb git-sync remove-collection <id>` (above), and remember the toggle cascades to descendants.
|