@metabase/cli 0.1.5 → 0.1.7

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 (228) hide show
  1. package/README.md +128 -115
  2. package/dist/add-collection-C9BdVBs2.mjs +11 -0
  3. package/dist/{add-collection-C_iovi9i.mjs → add-collection-DQjTlDNF.mjs} +12 -5
  4. package/dist/archive-B3qiL-kK.mjs +40 -0
  5. package/dist/{archive-DdaP94H3.mjs → archive-BXzghEQX.mjs} +10 -9
  6. package/dist/{archive-WaEW85NB.mjs → archive-CBGKzEAl.mjs} +9 -8
  7. package/dist/{archive-BKPO8lEO.mjs → archive-CuVk8iwN.mjs} +10 -9
  8. package/dist/archive-DTN9tLGT.mjs +40 -0
  9. package/dist/{archive-Dvzrmdbk.mjs → archive-De8jzzq7.mjs} +10 -9
  10. package/dist/auth-D9eAyVoG.mjs +19 -0
  11. package/dist/{body-XtR7-uCO.mjs → body-tcURGnGh.mjs} +4 -4
  12. package/dist/{branches-XUY4JY-X.mjs → branches-CIGkjXIk.mjs} +11 -7
  13. package/dist/{cancel-BrUVO_ax.mjs → cancel-pPsvgJ0Z.mjs} +9 -8
  14. package/dist/{cancel-task-oXheTOB6.mjs → cancel-task-BLGE4UlL.mjs} +12 -8
  15. package/dist/capabilities-7e9MgquN.mjs +29 -0
  16. package/dist/card-DDDrWcDU.mjs +20 -0
  17. package/dist/{card-CQxvHeyP.mjs → card-ezYiriML.mjs} +1 -1
  18. package/dist/{cards-CONTTAG9.mjs → cards-Dq3nx_9n.mjs} +8 -7
  19. package/dist/cli.mjs +264 -44
  20. package/dist/collection-DkEvCDar.mjs +20 -0
  21. package/dist/{predicates-CGO17Q15.mjs → command-augment-BH9qgQ5u.mjs} +66 -14
  22. package/dist/{create-Cs2xntFG.mjs → create-9DBTkbMq.mjs} +18 -16
  23. package/dist/{create-kYpjobrq.mjs → create-B1dyuL9Y.mjs} +16 -10
  24. package/dist/create-BIphz0kO.mjs +52 -0
  25. package/dist/create-BcgoukG4.mjs +50 -0
  26. package/dist/create-BdPoSk_7.mjs +50 -0
  27. package/dist/{create-DZxUeqdf.mjs → create-BrUqxreg.mjs} +11 -10
  28. package/dist/create-DHscDhRd.mjs +50 -0
  29. package/dist/{create-Dq25vsMu.mjs → create-aPaUEGdr.mjs} +11 -10
  30. package/dist/{create-branch-D5u14AxL.mjs → create-branch-DGoc9CUU.mjs} +12 -8
  31. package/dist/{create-Ca9lIDwP.mjs → create-w3mQg9n4.mjs} +11 -10
  32. package/dist/{credentials-BIQ1cEzM.mjs → credentials-qryRLUed.mjs} +12 -11
  33. package/dist/current-task-DZM28rnr.mjs +40 -0
  34. package/dist/{dashboard-CnMD04PQ.mjs → dashboard-B4bn3z6t.mjs} +2 -1
  35. package/dist/dashboard-BLf1RZlk.mjs +21 -0
  36. package/dist/{database-vvig8k4x.mjs → database-BXiue1in.mjs} +1 -1
  37. package/dist/{database-BSvzYlRe.mjs → database-Ce1gOJF7.mjs} +3 -3
  38. package/dist/db-CWTFe_FZ.mjs +22 -0
  39. package/dist/{delete-VTAS9EUt.mjs → delete-BPaFdHZP.mjs} +11 -8
  40. package/dist/{delete-CUx6RT9e.mjs → delete-BrJOotpW.mjs} +11 -8
  41. package/dist/{remove-C6bS0Z6w.mjs → delete-FFj1xQWO.mjs} +25 -20
  42. package/dist/{delete-runtime-DfFMWJJ6.mjs → delete-runtime-uuYbd4k2.mjs} +9 -7
  43. package/dist/{delete-table-DzUneMKe.mjs → delete-table-CNupWUO0.mjs} +11 -8
  44. package/dist/{deprovision-CpJfGgCt.mjs → deprovision-BNr9fPDY.mjs} +18 -12
  45. package/dist/{dirty-nkAOXxgC.mjs → dirty-BCkNOY8c.mjs} +11 -7
  46. package/dist/{docker-D5FTIoD0.mjs → docker-Ds252Mwc.mjs} +4 -4
  47. package/dist/{translate-Cqsd0Px5.mjs → eid-CLY5X0Uw.mjs} +43 -23
  48. package/dist/error-ZsFeevV2.mjs +191 -0
  49. package/dist/{export-BWvY7X_G.mjs → export-CgHgWW3I.mjs} +20 -18
  50. package/dist/{field-B3gvaqpK.mjs → field-E0IBy4Uw.mjs} +12 -3
  51. package/dist/field-LL6W_c-c.mjs +18 -0
  52. package/dist/{fields-dH16G5UV.mjs → fields-RkRWU-u9.mjs} +9 -8
  53. package/dist/{get-D96QEU49.mjs → get-42tJ7BNp.mjs} +8 -7
  54. package/dist/{get-C6SR3A9t.mjs → get-B8l4t4Pz.mjs} +10 -9
  55. package/dist/{get-BnBRKHr7.mjs → get-B9kwSs6U.mjs} +8 -7
  56. package/dist/{get-7macOPAI.mjs → get-Bo4Cpd_c.mjs} +7 -7
  57. package/dist/{get-BcqxMVC1.mjs → get-C9O_aEGo.mjs} +8 -7
  58. package/dist/{get-CKxlhMy1.mjs → get-CRvbChoX.mjs} +8 -7
  59. package/dist/{get-B7i_nYJB.mjs → get-CTDqioaj.mjs} +8 -7
  60. package/dist/{get-D8e_RzZ0.mjs → get-CiZrZJLt.mjs} +10 -9
  61. package/dist/{get-B08K82JV.mjs → get-CvmqPN30.mjs} +8 -7
  62. package/dist/{get-CACaBFLt.mjs → get-DmzgSgrl.mjs} +9 -8
  63. package/dist/{get-R7OaVL_t.mjs → get-DsqGHNHN.mjs} +8 -7
  64. package/dist/get-run-CBwcRc8E.mjs +38 -0
  65. package/dist/{get-DNN1X2gN.mjs → get-sMpa-X4E.mjs} +9 -8
  66. package/dist/{get-DAWofnzK.mjs → get-y17zJMnU.mjs} +8 -7
  67. package/dist/git-sync-CrWTo3YX.mjs +28 -0
  68. package/dist/{has-remote-changes-BAnIXQXU.mjs → has-remote-changes-CfRidwXT.mjs} +13 -8
  69. package/dist/{import-CfdPEMng.mjs → import-BZV0Z2KR.mjs} +21 -18
  70. package/dist/{input-BQ-BZA8h.mjs → input-cMSEqISy.mjs} +7 -4
  71. package/dist/is-dirty-CPzOnnH6.mjs +10 -0
  72. package/dist/{is-dirty-CZWcG0vj.mjs → is-dirty-hKcB4OH9.mjs} +9 -4
  73. package/dist/{items-DqwahOKf.mjs → items-C94eW2Yd.mjs} +10 -9
  74. package/dist/key-vkNkH82H.mjs +17 -0
  75. package/dist/license-B37055sr.mjs +17 -0
  76. package/dist/{list-L63TpX1t.mjs → list-B0V7FeL2.mjs} +7 -7
  77. package/dist/{list-Bkd7Nbds.mjs → list-BFlzLGlw.mjs} +7 -6
  78. package/dist/{list-yxVAE1S7.mjs → list-BJXaGk-z.mjs} +7 -6
  79. package/dist/{list-BqNMpIXy.mjs → list-BS_Bxejg.mjs} +9 -8
  80. package/dist/{list-J277Qtki.mjs → list-BmHoYJr7.mjs} +7 -6
  81. package/dist/list-C-oZe1_p.mjs +173 -0
  82. package/dist/{list-ViT2KWhv.mjs → list-CF1pMN4S.mjs} +7 -6
  83. package/dist/{list-BpNU1neq.mjs → list-CU6sOfI-.mjs} +9 -7
  84. package/dist/{list-oftHLFbE.mjs → list-CqN4gvCk.mjs} +9 -7
  85. package/dist/{list-DBOYoJtA.mjs → list-DUXdt0XI.mjs} +10 -6
  86. package/dist/{list-D41gfkKb.mjs → list-DfDZr55C.mjs} +10 -8
  87. package/dist/{list-vF4EneaE.mjs → list-DrINpVLM.mjs} +7 -6
  88. package/dist/{list-DJcGwJ4W.mjs → list-DuSoEk_J.mjs} +9 -8
  89. package/dist/{list-CQkDqphl.mjs → list-HS15y_WN.mjs} +7 -6
  90. package/dist/login-enh9Yimb.mjs +181 -0
  91. package/dist/{logout-DD4q5whi.mjs → logout-BWLPLDh8.mjs} +13 -11
  92. package/dist/{logs-Ci3mJE2z.mjs → logs-Cu3QtvPs.mjs} +9 -8
  93. package/dist/{manifest-CGM7XNLC.mjs → manifest-BNh0Lw6p.mjs} +15 -15
  94. package/dist/{measure-BEQfnLdN.mjs → measure-Bt3InQsA.mjs} +2 -2
  95. package/dist/measure-CDlEPFtB.mjs +19 -0
  96. package/dist/{metadata-BDat-jN9.mjs → metadata-BTTEBWdS.mjs} +10 -9
  97. package/dist/{metadata-29_qlqbz.mjs → metadata-D2TxboMm.mjs} +9 -8
  98. package/dist/parse-enum-CrEWOhuY.mjs +11 -0
  99. package/dist/{parse-id-CysSaCbf.mjs → parse-id-0_tOPvfI.mjs} +1 -1
  100. package/dist/{parse-ref-D1yeDOn8.mjs → parse-ref-DKag6a6I.mjs} +1 -1
  101. package/dist/{parse-schemas-B10n01ez.mjs → parse-schemas-D-qVLl4z.mjs} +2 -2
  102. package/dist/{path-DLByFMMA.mjs → path-C8GrBdgT.mjs} +7 -7
  103. package/dist/{poll-p9Y7-JEQ.mjs → poll-4eoh5J0r.mjs} +2 -2
  104. package/dist/{poll-task-BQe0NvJZ.mjs → poll-task-51WRdugU.mjs} +19 -20
  105. package/dist/{preflight-CvFu0Cct.mjs → preflight-BhsErYz3.mjs} +4 -4
  106. package/dist/{process-zJeVJZTM.mjs → process-CM7Uu5q_.mjs} +1 -1
  107. package/dist/{prompt-DgDNy_Pc.mjs → prompt-CFKoys7k.mjs} +3 -1
  108. package/dist/provision-Chf86BF0.mjs +83 -0
  109. package/dist/{ps-BxQdpkr5.mjs → ps-CEYtsKBj.mjs} +5 -3
  110. package/dist/ps-CIDwaubS.mjs +11 -0
  111. package/dist/{query-C7zTlFJA.mjs → query-BBCAF-tG.mjs} +17 -14
  112. package/dist/{query-CFH4nBlK.mjs → query-DYVBnu9d.mjs} +12 -9
  113. package/dist/query-result-ABPLz6I4.mjs +19 -0
  114. package/dist/{remove-BuWxx3hY.mjs → remove-2yInufA6.mjs} +14 -12
  115. package/dist/remove-collection-CBAHz0Dk.mjs +44 -0
  116. package/dist/{render-DuoDUTVL.mjs → render-0_GsapXa.mjs} +51 -23
  117. package/dist/render-khznBlla.mjs +32 -0
  118. package/dist/{rescan-values-DabyRYQ_.mjs → rescan-values-cfTSNQZo.mjs} +12 -11
  119. package/dist/{run-Cl-9RtC4.mjs → run-qgdEJv-I.mjs} +17 -15
  120. package/dist/{runs-BH6s1Zao.mjs → runs-BFIIH4GL.mjs} +9 -8
  121. package/dist/{runtime-CDu6fykq.mjs → runtime-Duawf5lE.mjs} +653 -428
  122. package/dist/{schema-tables-i58wp_p3.mjs → schema-tables-C2xM3dho.mjs} +9 -8
  123. package/dist/{schemas-_m8RYRl9.mjs → schemas-BP7xiktH.mjs} +7 -6
  124. package/dist/{search-DObOsjbP.mjs → search-DYP3lOlq.mjs} +12 -16
  125. package/dist/segment-B6HnNGDs.mjs +19 -0
  126. package/dist/{set-CwVWeAsi.mjs → set-DpRQqdo7.mjs} +13 -11
  127. package/dist/{set-CJA9dpK6.mjs → set-Tt-ioa4L.mjs} +14 -13
  128. package/dist/setting-DUa96KF3.mjs +17 -0
  129. package/dist/{setup-DqBOe3HZ.mjs → setup-BPlllnim.mjs} +10 -9
  130. package/dist/{skills-CHU7uuDU.mjs → skills-BkregMyb.mjs} +2 -2
  131. package/dist/{skills-C2rTVj0n.mjs → skills-SqbPo0BI.mjs} +3 -3
  132. package/dist/snippet-dJ68tGsl.mjs +19 -0
  133. package/dist/{start-CfruN4wF.mjs → start-DJZA67WF.mjs} +70 -38
  134. package/dist/{stash-CWuXKSZq.mjs → stash-C89zNKxo.mjs} +21 -18
  135. package/dist/{status-D-RYZB9G.mjs → status-B1EJ_jv0.mjs} +16 -9
  136. package/dist/status-BNvFPemM.mjs +100 -0
  137. package/dist/status-D5wSqYV_.mjs +34 -0
  138. package/dist/{stop-D8Hr4cKX.mjs → stop-5rCLmkCQ.mjs} +16 -11
  139. package/dist/{summary-Lt2XLBK9.mjs → summary-Cihbx0Qs.mjs} +8 -7
  140. package/dist/{sync-schema-BDElSynU.mjs → sync-schema-C3odu0ZH.mjs} +12 -11
  141. package/dist/table-J2f0STnB.mjs +19 -0
  142. package/dist/{table-B-PYcgGb.mjs → table-qDD2kApF.mjs} +1 -1
  143. package/dist/{transform-job-BrhOLO4M.mjs → transform-job-DjhoJbiV.mjs} +1 -1
  144. package/dist/transform-job-OW4SDhsQ.mjs +19 -0
  145. package/dist/transform-q1LYWQtW.mjs +24 -0
  146. package/dist/{tree-DfvjDjmk.mjs → tree-mvq9gM9w.mjs} +7 -6
  147. package/dist/{update-DzgXF082.mjs → update-BoIiuC70.mjs} +16 -14
  148. package/dist/{update-qnFY5IuC.mjs → update-C0jP0AKT.mjs} +12 -11
  149. package/dist/{update-zp7pCBZH.mjs → update-CbBnHz42.mjs} +16 -14
  150. package/dist/{update-B0bjPqKC.mjs → update-CtOo3LsX.mjs} +13 -12
  151. package/dist/{update-CVxOxmt6.mjs → update-DCrOQ1PW.mjs} +17 -15
  152. package/dist/{update-BYduslhn.mjs → update-DEZayTb4.mjs} +20 -15
  153. package/dist/{update-BgcroYkF.mjs → update-DwRxdflw.mjs} +12 -11
  154. package/dist/{update-D9Z8cL7h.mjs → update-Rr4usmCo.mjs} +12 -11
  155. package/dist/{update-DuA8-cCq.mjs → update-VvKMnwsM.mjs} +16 -14
  156. package/dist/{update-dashcard-CQ3kmmss.mjs → update-dashcard-DFvIz8Qj.mjs} +12 -11
  157. package/dist/{update-CqnDMNtZ.mjs → update-tRparnUs.mjs} +18 -16
  158. package/dist/{upgrade-CIgTr2CG.mjs → upgrade-D-Rl_fH9.mjs} +16 -29
  159. package/dist/{url-B5MgZXzg.mjs → url-BB6jeNQj.mjs} +11 -10
  160. package/dist/{uuid-CJz9TmHI.mjs → uuid-BSVUk8u2.mjs} +8 -6
  161. package/dist/{validate-CB0bu50i.mjs → validate-dPEOnOf8.mjs} +2 -1
  162. package/dist/{validate-query-CavIA0Q2.mjs → validate-query-CYvOP8Ld.mjs} +3 -3
  163. package/dist/values-D1RJE4H6.mjs +45 -0
  164. package/dist/verify-A7BWfBPZ.mjs +79 -0
  165. package/dist/{wait-BFqBlg0y.mjs → wait-B17I_pWy.mjs} +2 -2
  166. package/dist/{wait-tDp9ZOou.mjs → wait-DK5QDZ8n.mjs} +14 -10
  167. package/dist/{wait-flags-CN-e9zNq.mjs → wait-flags-DlfbIXHw.mjs} +20 -9
  168. package/dist/{workspace-credentials-4lIxxz4g.mjs → workspace-credentials-8CBMQJFz.mjs} +2 -2
  169. package/dist/workspace-ri6r3zWo.mjs +25 -0
  170. package/dist/{yaml-ECiog374.mjs → yaml-Gv6wRFMF.mjs} +1 -1
  171. package/package.json +2 -1
  172. package/skill-data/core/SKILL.md +55 -453
  173. package/skill-data/git-sync/SKILL.md +1 -1
  174. package/skill-data/mbql/SKILL.md +156 -0
  175. package/skill-data/mbql/references/operators.md +253 -0
  176. package/skill-data/transform/SKILL.md +2 -40
  177. package/skill-data/viz/SKILL.md +137 -0
  178. package/skill-data/viz/references/settings.md +312 -0
  179. package/skill-data/workspace/SKILL.md +45 -63
  180. package/skills/metabase-cli/SKILL.md +5 -26
  181. package/dist/add-collection-ucsyAMkV.mjs +0 -11
  182. package/dist/api-key-BENHbTbV.mjs +0 -13
  183. package/dist/auth-DICRtJDy.mjs +0 -19
  184. package/dist/card-l-UmrUIo.mjs +0 -20
  185. package/dist/collection-oV0olVY-.mjs +0 -19
  186. package/dist/command-augment-D9pI9Vbh.mjs +0 -11
  187. package/dist/create-CrUq6sib.mjs +0 -125
  188. package/dist/create-D3Z878yr.mjs +0 -50
  189. package/dist/create-Le3Bqn7b.mjs +0 -48
  190. package/dist/create-V-q2rU0T.mjs +0 -48
  191. package/dist/create-swbIXdo5.mjs +0 -48
  192. package/dist/current-task-DCq7rk9V.mjs +0 -36
  193. package/dist/dashboard-hbKDd36X.mjs +0 -20
  194. package/dist/db-qVK6NsdB.mjs +0 -22
  195. package/dist/eid-CDFXX_6H.mjs +0 -13
  196. package/dist/field-C0LE7RQI.mjs +0 -18
  197. package/dist/flag-pair-Fmcdkrfx.mjs +0 -17
  198. package/dist/get-run-CwFuR4Uw.mjs +0 -36
  199. package/dist/git-sync-DV7YjniX.mjs +0 -28
  200. package/dist/is-dirty-LxVbm2C5.mjs +0 -10
  201. package/dist/key-CCJdVWKc.mjs +0 -12
  202. package/dist/license-Cb6ewEJO.mjs +0 -17
  203. package/dist/list-DV6CONhp.mjs +0 -55
  204. package/dist/login-D1nZwgKv.mjs +0 -192
  205. package/dist/measure-XhJuL77y.mjs +0 -19
  206. package/dist/package-DFUprkSZ.mjs +0 -85
  207. package/dist/provision-BP-b4Are.mjs +0 -77
  208. package/dist/ps-Bk6unzaX.mjs +0 -11
  209. package/dist/remove-collection-Bc4roCq0.mjs +0 -38
  210. package/dist/segment-DfxZdJmR.mjs +0 -19
  211. package/dist/setting-Czy4ws6h.mjs +0 -18
  212. package/dist/snippet-BCY4KHBU.mjs +0 -19
  213. package/dist/status-1oUnw803.mjs +0 -56
  214. package/dist/status-J9HIDcA5.mjs +0 -32
  215. package/dist/table-BwX3Ib5f.mjs +0 -19
  216. package/dist/transform-iaAi37V0.mjs +0 -24
  217. package/dist/transform-job-Bemonf82.mjs +0 -19
  218. package/dist/values-BXN6tx1i.mjs +0 -36
  219. package/dist/workspace-BBsT0H0g.mjs +0 -24
  220. /package/dist/{body-flags-BK7J6Daz.mjs → body-flags-D7q87Btw.mjs} +0 -0
  221. /package/dist/{collection-B3sPXRLs.mjs → collection-Bcy8cWYH.mjs} +0 -0
  222. /package/dist/{paginate-CTSfuYiF.mjs → paginate-BexjkjbY.mjs} +0 -0
  223. /package/dist/{revision-message-flag-oyq2xrDU.mjs → revision-message-flag-DY29-cgz.mjs} +0 -0
  224. /package/dist/{segment-BMrUBz94.mjs → segment-DhBmcr_E.mjs} +0 -0
  225. /package/dist/{setting-CTaAeMci.mjs → setting-BzCng1Ub.mjs} +0 -0
  226. /package/dist/{snippet-CSWqkslB.mjs → snippet-bi_0XbNT.mjs} +0 -0
  227. /package/dist/{transform-DR4ejuPM.mjs → transform-BKahefz_.mjs} +0 -0
  228. /package/dist/{workspace-DUfqhPm5.mjs → workspace-D8HtUN0y.mjs} +0 -0
@@ -1,6 +1,6 @@
1
- import { getMetabaseAugment } from "./command-augment-D9pI9Vbh.mjs";
2
- import { writeJson } from "./render-DuoDUTVL.mjs";
3
- import "./predicates-CGO17Q15.mjs";
1
+ import { getMetabaseAugment, resolveCitty, toAliasArray } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { Capabilities } from "./capabilities-7e9MgquN.mjs";
3
+ import { writeJson } from "./render-0_GsapXa.mjs";
4
4
  import { defineCommand } from "citty";
5
5
  import { z } from "zod";
6
6
 
@@ -26,9 +26,11 @@ const ManifestArg = z.object({
26
26
  const ManifestEntry = z.object({
27
27
  command: z.string(),
28
28
  description: z.string(),
29
+ details: z.string().optional(),
29
30
  examples: z.array(z.string()),
30
31
  args: z.array(ManifestArg),
31
- outputSchema: z.unknown().nullable()
32
+ outputSchema: z.unknown().nullable(),
33
+ capabilities: Capabilities.nullable()
32
34
  });
33
35
  const Manifest = z.object({
34
36
  version: z.literal(1),
@@ -53,13 +55,17 @@ async function walk(cmd, path) {
53
55
  }
54
56
  const args = await resolveCitty(cmd.args) ?? {};
55
57
  const augment = getMetabaseAugment(cmd);
56
- return [{
58
+ if (augment === null) return [];
59
+ const entry = {
57
60
  command: path.join(" "),
58
61
  description: readDescription(meta),
59
- examples: augment ? Array.from(augment.examples) : [],
62
+ examples: Array.from(augment.examples),
60
63
  args: convertArgs(args),
61
- outputSchema: augment?.outputSchema ? z.toJSONSchema(augment.outputSchema) : null
62
- }];
64
+ outputSchema: augment.outputSchema ? z.toJSONSchema(augment.outputSchema) : null,
65
+ capabilities: augment.capabilities
66
+ };
67
+ if (augment.details !== null) entry.details = augment.details;
68
+ return [entry];
63
69
  }
64
70
  function readDescription(meta) {
65
71
  if (meta === void 0) return "";
@@ -87,17 +93,11 @@ function readOptions(def) {
87
93
  return [...def.options];
88
94
  }
89
95
  function readAlias(def) {
90
- if (!("alias" in def) || def.alias === void 0) return [];
91
- return Array.isArray(def.alias) ? def.alias : [def.alias];
96
+ return "alias" in def ? toAliasArray(def.alias) : [];
92
97
  }
93
98
  function isPrimitiveDefault(value) {
94
99
  return typeof value === "string" || typeof value === "boolean" || typeof value === "number";
95
100
  }
96
- async function resolveCitty(value) {
97
- if (value === void 0) return void 0;
98
- if (typeof value === "function") return value();
99
- return value;
100
- }
101
101
 
102
102
  //#endregion
103
103
  //#region src/commands/manifest.ts
@@ -10,8 +10,8 @@ const Measure = z.object({
10
10
  definition: z.unknown(),
11
11
  creator_id: z.number().int(),
12
12
  entity_id: z.string().nullable(),
13
- dimensions: z.array(z.unknown()).nullable(),
14
- dimension_mappings: z.array(z.unknown()).nullable(),
13
+ dimensions: z.array(z.unknown()).nullish(),
14
+ dimension_mappings: z.array(z.unknown()).nullish(),
15
15
  definition_description: z.string().nullable().optional(),
16
16
  result_column_name: z.string().nullable().optional(),
17
17
  created_at: z.string(),
@@ -0,0 +1,19 @@
1
+ import { defineCommand } from "citty";
2
+
3
+ //#region src/commands/measure/index.ts
4
+ var measure_default = defineCommand({
5
+ meta: {
6
+ name: "measure",
7
+ description: "Manage Metabase measures"
8
+ },
9
+ subCommands: {
10
+ list: () => import("./list-HS15y_WN.mjs").then((mod) => mod.default),
11
+ get: () => import("./get-y17zJMnU.mjs").then((mod) => mod.default),
12
+ create: () => import("./create-BdPoSk_7.mjs").then((mod) => mod.default),
13
+ update: () => import("./update-CbBnHz42.mjs").then((mod) => mod.default),
14
+ archive: () => import("./archive-CuVk8iwN.mjs").then((mod) => mod.default)
15
+ }
16
+ });
17
+
18
+ //#endregion
19
+ export { measure_default as default };
@@ -1,12 +1,12 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import "./field-B3gvaqpK.mjs";
8
- import "./table-B-PYcgGb.mjs";
9
- import { Database, databaseView } from "./database-vvig8k4x.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderItem } from "./render-0_GsapXa.mjs";
6
+ import "./field-E0IBy4Uw.mjs";
7
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
8
+ import "./table-qDD2kApF.mjs";
9
+ import { Database, databaseView } from "./database-BXiue1in.mjs";
10
10
 
11
11
  //#region src/commands/db/metadata.ts
12
12
  var metadata_default = defineMetabaseCommand({
@@ -14,6 +14,7 @@ var metadata_default = defineMetabaseCommand({
14
14
  name: "metadata",
15
15
  description: "Get a database with its tables and fields hydrated"
16
16
  },
17
+ capabilities: { minVersion: 58 },
17
18
  args: {
18
19
  ...outputFlags,
19
20
  ...profileFlag,
@@ -1,11 +1,11 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import "./field-B3gvaqpK.mjs";
8
- import { TableQueryMetadata, tableView } from "./table-B-PYcgGb.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderItem } from "./render-0_GsapXa.mjs";
6
+ import "./field-E0IBy4Uw.mjs";
7
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
8
+ import { TableQueryMetadata, tableView } from "./table-qDD2kApF.mjs";
9
9
 
10
10
  //#region src/commands/table/metadata.ts
11
11
  var metadata_default = defineMetabaseCommand({
@@ -13,6 +13,7 @@ var metadata_default = defineMetabaseCommand({
13
13
  name: "metadata",
14
14
  description: "Get a table with its fields, FKs, and dimensions hydrated"
15
15
  },
16
+ capabilities: { minVersion: 58 },
16
17
  args: {
17
18
  ...outputFlags,
18
19
  ...profileFlag,
@@ -0,0 +1,11 @@
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
+
3
+ //#region src/commands/parse-enum.ts
4
+ function parseEnumFlag(value, schema, name) {
5
+ const result = schema.safeParse(value);
6
+ if (result.success) return result.data;
7
+ throw new ConfigError(`invalid ${name}: "${value}" (expected one of: ${schema.options.join(", ")})`);
8
+ }
9
+
10
+ //#endregion
11
+ export { parseEnumFlag };
@@ -1,4 +1,4 @@
1
- import { parseInteger } from "./runtime-CDu6fykq.mjs";
1
+ import { parseInteger } from "./runtime-Duawf5lE.mjs";
2
2
 
3
3
  //#region src/commands/parse-id.ts
4
4
  function parseId(value, name = "id") {
@@ -1,4 +1,4 @@
1
- import { ConfigError } from "./predicates-CGO17Q15.mjs";
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
2
 
3
3
  //#region src/commands/collection/parse-ref.ts
4
4
  const SPECIAL_TOKENS = new Set(["root", "trash"]);
@@ -1,5 +1,5 @@
1
- import { ConfigError } from "./predicates-CGO17Q15.mjs";
2
- import { parseCsv } from "./runtime-CDu6fykq.mjs";
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { parseCsv } from "./runtime-Duawf5lE.mjs";
3
3
 
4
4
  //#region src/commands/workspace/database/parse-schemas.ts
5
5
  function parseSchemasCsv(raw) {
@@ -1,10 +1,10 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderList } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { defineMetabaseCommand, listEnvelopeSchema, outputFlags, wrapList } from "./runtime-CDu6fykq.mjs";
6
- import "./yaml-ECiog374.mjs";
7
- import { findSkillByName, loadAllSkills, loadVisibleSkills } from "./skills-CHU7uuDU.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { listEnvelopeSchema, outputFlags, wrapList } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderList } from "./render-0_GsapXa.mjs";
6
+ import "./yaml-Gv6wRFMF.mjs";
7
+ import { findSkillByName, loadAllSkills, loadVisibleSkills } from "./skills-BkregMyb.mjs";
8
8
  import { z } from "zod";
9
9
 
10
10
  //#region src/commands/skills/path.ts
@@ -1,5 +1,5 @@
1
- import { TimeoutError } from "./predicates-CGO17Q15.mjs";
2
- import { combineAborts, throwIfAborted } from "./runtime-CDu6fykq.mjs";
1
+ import { TimeoutError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { combineAborts, throwIfAborted } from "./runtime-Duawf5lE.mjs";
3
3
  import { setTimeout } from "node:timers/promises";
4
4
 
5
5
  //#region src/runtime/poll.ts
@@ -1,5 +1,5 @@
1
- import { parseJsonOrPlain } from "./runtime-CDu6fykq.mjs";
2
- import { DEFAULT_INTERVAL_MS, DEFAULT_TIMEOUT_MS, pollUntil } from "./poll-p9Y7-JEQ.mjs";
1
+ import { parseJsonOrPlain } from "./runtime-Duawf5lE.mjs";
2
+ import { pollUntil } from "./poll-4eoh5J0r.mjs";
3
3
  import { z } from "zod";
4
4
 
5
5
  //#region src/domain/git-sync.ts
@@ -144,23 +144,6 @@ const syncTaskIdleView = {
144
144
  label: "Status"
145
145
  }]
146
146
  };
147
- const pollFlags = {
148
- wait: {
149
- type: "boolean",
150
- description: "Poll the resulting task until it reaches a terminal status",
151
- default: true
152
- },
153
- timeout: {
154
- type: "string",
155
- description: "Polling timeout in ms (used with --wait)",
156
- default: String(DEFAULT_TIMEOUT_MS)
157
- },
158
- interval: {
159
- type: "string",
160
- description: "Polling interval in ms (used with --wait)",
161
- default: String(DEFAULT_INTERVAL_MS)
162
- }
163
- };
164
147
  function isTerminal(status) {
165
148
  return TERMINAL_STATUSES.has(status);
166
149
  }
@@ -190,6 +173,22 @@ function throwIfFailedTask(final, verb) {
190
173
  const detail = final.error_message ? `: ${final.error_message}` : "";
191
174
  throw new Error(`git-sync ${verb} ${final.status}${detail}`);
192
175
  }
176
+ function formatSyncTask(task) {
177
+ const kind = task.sync_task_type === "export" ? "Export" : "Import";
178
+ const label = `${kind} task #${task.id}`;
179
+ const detail = task.error_message ? `: ${task.error_message}` : "";
180
+ switch (task.status) {
181
+ case "running": {
182
+ const percent = task.progress === null ? "" : ` (${Math.round(task.progress * 100)}%)`;
183
+ return `${label} is running${percent}.`;
184
+ }
185
+ case "successful": return `${label} succeeded.`;
186
+ case "errored": return `${label} errored${detail}.`;
187
+ case "timed-out": return `${label} timed out${detail}.`;
188
+ case "conflict": return `${label} hit conflicts${detail}.`;
189
+ case "cancelled": return `${label} was cancelled.`;
190
+ }
191
+ }
193
192
 
194
193
  //#endregion
195
- export { REMOTE_SYNC_PATHS, SyncDirtyItem, SyncDirtyItemCompact, SyncTask, SyncTaskOrIdle, fetchCurrentTask, fetchOptionalParsed, pollFlags, pollSyncTask, syncDirtyItemView, syncTaskIdleView, syncTaskView, throwIfFailedTask };
194
+ export { REMOTE_SYNC_PATHS, SyncDirtyItem, SyncDirtyItemCompact, SyncTask, SyncTaskOrIdle, fetchCurrentTask, fetchOptionalParsed, formatSyncTask, pollSyncTask, syncDirtyItemView, syncTaskIdleView, syncTaskView, throwIfFailedTask };
@@ -1,7 +1,7 @@
1
- import { writeJson } from "./render-DuoDUTVL.mjs";
2
- import { ChainedRequestError, ConfigError, MetabaseError } from "./predicates-CGO17Q15.mjs";
3
- import { HttpError } from "./runtime-CDu6fykq.mjs";
4
- import { Card } from "./card-CQxvHeyP.mjs";
1
+ import { ChainedRequestError, ConfigError, MetabaseError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { HttpError } from "./runtime-Duawf5lE.mjs";
3
+ import { writeJson } from "./render-0_GsapXa.mjs";
4
+ import { Card } from "./card-ezYiriML.mjs";
5
5
  import { z } from "zod";
6
6
 
7
7
  //#region src/commands/dashboard/preflight.ts
@@ -1,4 +1,4 @@
1
- import { isNotFoundError } from "./predicates-CGO17Q15.mjs";
1
+ import { isNotFoundError } from "./command-augment-BH9qgQ5u.mjs";
2
2
  import { spawn } from "node:child_process";
3
3
 
4
4
  //#region src/runtime/process.ts
@@ -1,4 +1,4 @@
1
- import { AbortError, ConfigError } from "./predicates-CGO17Q15.mjs";
1
+ import { AbortError, ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
2
  import { confirm, isCancel, password, text } from "@clack/prompts";
3
3
 
4
4
  //#region src/output/prompt.ts
@@ -6,8 +6,10 @@ async function promptText(opts) {
6
6
  requireTty(opts.message);
7
7
  const value = await text({
8
8
  message: opts.message,
9
+ defaultValue: "",
9
10
  ...opts.placeholder !== void 0 && { placeholder: opts.placeholder },
10
11
  ...opts.initialValue !== void 0 && { initialValue: opts.initialValue },
12
+ ...opts.defaultValue !== void 0 && { defaultValue: opts.defaultValue },
11
13
  ...opts.validate !== void 0 && { validate: opts.validate }
12
14
  });
13
15
  if (isCancel(value)) throw new AbortError();
@@ -0,0 +1,83 @@
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary } from "./render-0_GsapXa.mjs";
6
+ import "./input-cMSEqISy.mjs";
7
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
8
+ import { readBody } from "./body-tcURGnGh.mjs";
9
+ import { bodyInputFlags } from "./body-flags-D7q87Btw.mjs";
10
+ import "./poll-4eoh5J0r.mjs";
11
+ import { parseWaitFlags, waitFlags } from "./wait-flags-DlfbIXHw.mjs";
12
+ import { Workspace, WorkspaceProvisionInput, workspaceView } from "./workspace-D8HtUN0y.mjs";
13
+ import { waitForDatabaseProvisioned } from "./wait-B17I_pWy.mjs";
14
+ import { parseSchemasCsv } from "./parse-schemas-D-qVLl4z.mjs";
15
+
16
+ //#region src/commands/workspace/database/provision.ts
17
+ var provision_default = defineMetabaseCommand({
18
+ meta: {
19
+ name: "provision",
20
+ description: "Provision a database into a workspace"
21
+ },
22
+ capabilities: {
23
+ minVersion: 62,
24
+ tokenFeature: "workspaces"
25
+ },
26
+ args: {
27
+ ...outputFlags,
28
+ ...profileFlag,
29
+ ...connectionFlags,
30
+ ...bodyInputFlags,
31
+ ...waitFlags,
32
+ schemas: {
33
+ type: "string",
34
+ description: "Comma-separated input schemas (alternative to --body / --file)"
35
+ },
36
+ id: {
37
+ type: "positional",
38
+ description: "Workspace id",
39
+ required: true
40
+ },
41
+ "db-id": {
42
+ type: "positional",
43
+ description: "Database id (alternative to --body / --file)",
44
+ required: false
45
+ }
46
+ },
47
+ outputSchema: Workspace,
48
+ examples: [
49
+ "mb workspace database provision 1 5 --schemas analytics,github",
50
+ "mb workspace database provision 1 5 --schemas analytics --wait",
51
+ "mb workspace database provision 1 --file provision.json"
52
+ ],
53
+ async run({ args, ctx, getClient }) {
54
+ const workspaceId = parseId(args.id);
55
+ const databaseIdArg = args["db-id"];
56
+ const schemasFlag = args.schemas;
57
+ const wait = parseWaitFlags(args);
58
+ let body;
59
+ if (databaseIdArg !== void 0 && databaseIdArg !== "") {
60
+ const databaseId = parseId(databaseIdArg, "db-id");
61
+ if (schemasFlag === void 0 || schemasFlag === "") throw new ConfigError("--schemas is required when providing a db-id");
62
+ const input_schemas = parseSchemasCsv(schemasFlag);
63
+ body = WorkspaceProvisionInput.parse({
64
+ database_id: databaseId,
65
+ input_schemas
66
+ });
67
+ } else body = await readBody({
68
+ flag: args.body,
69
+ file: args.file
70
+ }, WorkspaceProvisionInput);
71
+ const client = await getClient();
72
+ const initial = await client.requestParsed(Workspace, `/api/ee/workspace-manager/${workspaceId}/database`, {
73
+ method: "POST",
74
+ body
75
+ });
76
+ const final = wait.enabled ? await waitForDatabaseProvisioned(client, workspaceId, body.database_id, wait.schedule) : initial;
77
+ const message = wait.enabled ? `Provisioned database ${body.database_id} into workspace ${workspaceId}.` : `Started provisioning database ${body.database_id} into workspace ${workspaceId}; rerun with --wait to block until ready.`;
78
+ renderSummary(final, workspaceView, message, ctx);
79
+ }
80
+ });
81
+
82
+ //#endregion
83
+ export { provision_default as default };
@@ -1,6 +1,7 @@
1
- import { renderList } from "./render-DuoDUTVL.mjs";
2
- import { defineMetabaseCommand, listEnvelopeSchema, localUrl, outputFlags, wrapList } from "./runtime-CDu6fykq.mjs";
3
- import { CONTAINER_STATES, checkDockerReady, listWorkspaceContainers } from "./docker-D5FTIoD0.mjs";
1
+ import { listEnvelopeSchema, outputFlags, wrapList } from "./error-ZsFeevV2.mjs";
2
+ import { defineMetabaseCommand, localUrl } from "./runtime-Duawf5lE.mjs";
3
+ import { renderList } from "./render-0_GsapXa.mjs";
4
+ import { CONTAINER_STATES, checkDockerReady, listWorkspaceContainers } from "./docker-Ds252Mwc.mjs";
4
5
  import { z } from "zod";
5
6
 
6
7
  //#region src/commands/workspace/ps.ts
@@ -51,6 +52,7 @@ var ps_default = defineMetabaseCommand({
51
52
  name: "ps",
52
53
  description: "List workspaces with a local container (running or stopped)"
53
54
  },
55
+ capabilities: null,
54
56
  args: { ...outputFlags },
55
57
  outputSchema: LocalWorkspaceListEnvelope,
56
58
  examples: ["mb workspace ps", "mb workspace ps --json"],
@@ -0,0 +1,11 @@
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import "./error-ZsFeevV2.mjs";
3
+ import "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import "./render-0_GsapXa.mjs";
6
+ import "./poll-4eoh5J0r.mjs";
7
+ import "./process-CM7Uu5q_.mjs";
8
+ import "./docker-Ds252Mwc.mjs";
9
+ import { LocalWorkspace, LocalWorkspaceCompact, LocalWorkspaceListEnvelope, LocalWorkspaceState, localWorkspaceView, ps_default } from "./ps-CEYtsKBj.mjs";
10
+
11
+ export { ps_default as default };
@@ -1,15 +1,16 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem, writeJson } from "./render-DuoDUTVL.mjs";
4
- import { ConfigError } from "./predicates-CGO17Q15.mjs";
5
- import "./input-BQ-BZA8h.mjs";
6
- import { connectionFlags, defineMetabaseCommand, outputFlags, profileFlag } from "./runtime-CDu6fykq.mjs";
7
- import { readBody } from "./body-XtR7-uCO.mjs";
8
- import { bodyInputFlags } from "./body-flags-BK7J6Daz.mjs";
9
- import "./field-B3gvaqpK.mjs";
10
- import { CardQueryResult, cardQueryView } from "./card-CQxvHeyP.mjs";
11
- import { assertNotLegacyEnvelopeWrappingMbql5, getQuerySchemaBundle, isMbql5Query, validateQuery } from "./validate-CB0bu50i.mjs";
12
- import { skipValidateFlag } from "./validate-query-CavIA0Q2.mjs";
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary, writeJson } from "./render-0_GsapXa.mjs";
6
+ import "./input-cMSEqISy.mjs";
7
+ import "./field-E0IBy4Uw.mjs";
8
+ import { CardQueryResult, cardQueryView } from "./card-ezYiriML.mjs";
9
+ import { readBody } from "./body-tcURGnGh.mjs";
10
+ import { bodyInputFlags } from "./body-flags-D7q87Btw.mjs";
11
+ import { assertNotLegacyEnvelopeWrappingMbql5, getQuerySchemaBundle, isMbql5Query, validateQuery } from "./validate-dPEOnOf8.mjs";
12
+ import { skipValidateFlag } from "./validate-query-CYvOP8Ld.mjs";
13
+ import { formatQueryResult } from "./query-result-ABPLz6I4.mjs";
13
14
  import { z } from "zod";
14
15
 
15
16
  //#region src/commands/query.ts
@@ -18,8 +19,10 @@ const QUERY_ENDPOINT = "/api/dataset";
18
19
  var query_default = defineMetabaseCommand({
19
20
  meta: {
20
21
  name: "query",
21
- description: "Run an MBQL 5 query (validates against the bundled schema first); --print-schema emits the schema for agent discovery, --dry-run validates without sending. Any non-MBQL 5 body — legacy MBQL 4 ({type:\"query\", …}), legacy native ({type:\"native\", …}), or any other non-{lib/type:\"mbql/query\"} shape — skips pre-flight automatically and is normalized server-side by lib-be/normalize-query. The bundled schema only models MBQL 5. Every clause options object carries a `lib/uuid` (UUID v4); mint these via `mb uuid` — never author them by hand."
22
+ description: "Run an ad-hoc MBQL or native query"
22
23
  },
24
+ details: "Reads a JSON query body from --body, --file, or stdin and runs it. MBQL 5 is Metabase's structured query format, shaped {\"lib/type\":\"mbql/query\", \"database\": <id>, \"stages\": [...]}; it is checked against a bundled JSON Schema before sending — --print-schema prints that schema, and --dry-run reports any errors as {ok, errors:[{path, message}]} and exits 2 without sending. Legacy MBQL 4 and native-SQL bodies are not checked and run as-is. Run `mb skills get mbql` for the body shape, clause rules, and the iterate-with-dry-run loop.",
25
+ capabilities: { minVersion: 58 },
23
26
  args: {
24
27
  ...outputFlags,
25
28
  ...profileFlag,
@@ -82,7 +85,7 @@ var query_default = defineMetabaseCommand({
82
85
  method: "POST",
83
86
  body
84
87
  });
85
- renderItem(queryResult, cardQueryView, ctx);
88
+ renderSummary(queryResult, cardQueryView, () => formatQueryResult(queryResult), ctx);
86
89
  }
87
90
  });
88
91
 
@@ -1,11 +1,12 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import { ConfigError } from "./predicates-CGO17Q15.mjs";
5
- import { connectionFlags, defineMetabaseCommand, outputFlags, parseJson, profileFlag } from "./runtime-CDu6fykq.mjs";
6
- import { parseId } from "./parse-id-CysSaCbf.mjs";
7
- import "./field-B3gvaqpK.mjs";
8
- import { CardQueryResult, cardQueryView } from "./card-CQxvHeyP.mjs";
1
+ import { ConfigError } from "./command-augment-BH9qgQ5u.mjs";
2
+ import { connectionFlags, outputFlags, profileFlag } from "./error-ZsFeevV2.mjs";
3
+ import { defineMetabaseCommand, parseJson } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary } from "./render-0_GsapXa.mjs";
6
+ import "./field-E0IBy4Uw.mjs";
7
+ import { CardQueryResult, cardQueryView } from "./card-ezYiriML.mjs";
8
+ import { parseId } from "./parse-id-0_tOPvfI.mjs";
9
+ import { formatQueryResult } from "./query-result-ABPLz6I4.mjs";
9
10
  import { z } from "zod";
10
11
  import { Writable } from "node:stream";
11
12
 
@@ -27,6 +28,7 @@ var query_default = defineMetabaseCommand({
27
28
  name: "query",
28
29
  description: "Run a saved card and return results (json envelope, or stream CSV/JSON/XLSX via --export-format)"
29
30
  },
31
+ capabilities: { minVersion: 58 },
30
32
  args: {
31
33
  ...outputFlags,
32
34
  ...profileFlag,
@@ -85,7 +87,8 @@ var query_default = defineMetabaseCommand({
85
87
  body: { parameters }
86
88
  });
87
89
  const limit = args.limit === void 0 || args.limit === "" ? null : parseId(args.limit, "limit");
88
- renderItem(applyLimit(result, limit), cardQueryView, ctx);
90
+ const limited = applyLimit(result, limit);
91
+ renderSummary(limited, cardQueryView, () => formatQueryResult(limited), ctx);
89
92
  }
90
93
  });
91
94
  function parseParameters(raw) {
@@ -0,0 +1,19 @@
1
+ import { formatScalar, renderRows } from "./render-0_GsapXa.mjs";
2
+
3
+ //#region src/output/query-result.ts
4
+ function formatQueryResult(result) {
5
+ if (result.status !== "completed" || result.data === void 0) {
6
+ const hasError = typeof result.error === "string" && result.error !== "";
7
+ const detail = hasError ? `: ${result.error}` : "";
8
+ return `Query ${result.status}${detail}`;
9
+ }
10
+ const head = result.data.cols.map((col) => col.display_name ?? col.name);
11
+ const rowCount = result.row_count ?? result.data.rows.length;
12
+ const summary = `${rowCount} row${rowCount === 1 ? "" : "s"}.`;
13
+ if (result.data.rows.length === 0) return summary;
14
+ const rows = result.data.rows.map((row) => Array.isArray(row) ? row.map((cell) => formatScalar(cell)) : [formatScalar(row)]);
15
+ return `${renderRows(head, rows)}\n${summary}`;
16
+ }
17
+
18
+ //#endregion
19
+ export { formatQueryResult };
@@ -1,12 +1,12 @@
1
- import "./package-DFUprkSZ.mjs";
2
- import "./command-augment-D9pI9Vbh.mjs";
3
- import { renderItem } from "./render-DuoDUTVL.mjs";
4
- import "./predicates-CGO17Q15.mjs";
5
- import { clearLicense, defineMetabaseCommand, outputFlags } from "./runtime-CDu6fykq.mjs";
6
- import { promptConfirm } from "./prompt-DgDNy_Pc.mjs";
1
+ import "./command-augment-BH9qgQ5u.mjs";
2
+ import { outputFlags } from "./error-ZsFeevV2.mjs";
3
+ import { clearLicense, defineMetabaseCommand } from "./runtime-Duawf5lE.mjs";
4
+ import "./capabilities-7e9MgquN.mjs";
5
+ import { renderSummary } from "./render-0_GsapXa.mjs";
6
+ import { promptConfirm } from "./prompt-CFKoys7k.mjs";
7
7
  import { z } from "zod";
8
8
 
9
- //#region src/commands/license/remove.ts
9
+ //#region src/commands/workspace/license/remove.ts
10
10
  const LicenseRemoveResult = z.object({
11
11
  removed: z.boolean(),
12
12
  aborted: z.boolean()
@@ -26,6 +26,7 @@ var remove_default = defineMetabaseCommand({
26
26
  name: "remove",
27
27
  description: "Remove the stored license token"
28
28
  },
29
+ capabilities: null,
29
30
  args: {
30
31
  ...outputFlags,
31
32
  yes: {
@@ -35,7 +36,7 @@ var remove_default = defineMetabaseCommand({
35
36
  }
36
37
  },
37
38
  outputSchema: LicenseRemoveResult,
38
- examples: ["mb license remove --yes"],
39
+ examples: ["mb workspace license remove --yes"],
39
40
  async run({ args, ctx }) {
40
41
  if (!args.yes && process.stdin.isTTY === true) {
41
42
  const ok = await promptConfirm({
@@ -43,18 +44,19 @@ var remove_default = defineMetabaseCommand({
43
44
  initialValue: false
44
45
  });
45
46
  if (!ok) {
46
- renderItem({
47
+ renderSummary({
47
48
  removed: false,
48
49
  aborted: true
49
- }, licenseRemoveView, ctx);
50
+ }, licenseRemoveView, "Left the stored license token in place.", ctx);
50
51
  return;
51
52
  }
52
53
  }
53
54
  const removed = await clearLicense();
54
- renderItem({
55
+ const message = removed ? "License token removed." : "No license token was stored.";
56
+ renderSummary({
55
57
  removed,
56
58
  aborted: false
57
- }, licenseRemoveView, ctx);
59
+ }, licenseRemoveView, message, ctx);
58
60
  }
59
61
  });
60
62