@metabase/cli 0.1.10 → 0.1.11
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/.claude-plugin/marketplace.json +1 -1
- package/README.md +9 -6
- package/dist/{add-collection-DUqTrC5T.mjs → add-collection-DKULSPwT.mjs} +4 -4
- package/dist/add-collection-DyEe_xRO.mjs +10 -0
- package/dist/{archive-44EWiXud.mjs → archive-BJ6uL3hh.mjs} +3 -3
- package/dist/{archive-BEIyIsin.mjs → archive-BL_0fXhf.mjs} +3 -3
- package/dist/{archive-DtE2H4A6.mjs → archive-BLbaqc-5.mjs} +3 -3
- package/dist/{archive-_GMNY8wH.mjs → archive-BLxX3J6I.mjs} +3 -3
- package/dist/{archive-B59Y7ajB.mjs → archive-DQsV2uwy.mjs} +3 -3
- package/dist/{archive-0krZxAXq.mjs → archive-ibJVYsBC.mjs} +3 -3
- package/dist/{archive-BZfpjMir.mjs → archive-y-_m3XID.mjs} +3 -3
- package/dist/auth-BKaQjcmP.mjs +19 -0
- package/dist/{body-BdRyuvU4.mjs → body-DCQg78AF.mjs} +1 -1
- package/dist/{branches-Jpv-FNds.mjs → branches-CJVscsZe.mjs} +4 -4
- package/dist/{cancel-ChC4lFd4.mjs → cancel-C8W0sPix.mjs} +3 -3
- package/dist/{cancel-task-DyhIkNaL.mjs → cancel-task-dDgQDswT.mjs} +4 -4
- package/dist/card-CGBvUmCW.mjs +20 -0
- package/dist/{cards-O-nKkQKP.mjs → cards-B7HE8BT6.mjs} +3 -3
- package/dist/cli.mjs +23 -23
- package/dist/collection-Ch7pPKHD.mjs +20 -0
- package/dist/{collection-namespace-7724zUMx.mjs → collection-namespace-CBCApZJf.mjs} +1 -1
- package/dist/{create-DS52EhPd.mjs → create-84jcfY4N.mjs} +3 -3
- package/dist/{create-BuKx7kw6.mjs → create-B6mzc8UK.mjs} +3 -3
- package/dist/{create-B4f4Pldw.mjs → create-BQA6nM5n.mjs} +4 -4
- package/dist/{create-BxRsXQrm.mjs → create-BWaBYzhC.mjs} +3 -3
- package/dist/{create-CvYKJOcE.mjs → create-DN8us8si.mjs} +3 -3
- package/dist/{create-BbF9zVFP.mjs → create-DPASPFGi.mjs} +4 -4
- package/dist/{create-D45uFXlo.mjs → create-Di9NY7kK.mjs} +3 -3
- package/dist/{create-BnFHcnlL.mjs → create-VjvMdgM5.mjs} +3 -3
- package/dist/{create-branch-KOWUIE72.mjs → create-branch-CCoDX2Qf.mjs} +4 -4
- package/dist/{create-DeZ2x2Db.mjs → create-vNcD4jfq.mjs} +3 -3
- package/dist/{current-task-ClcWPPMc.mjs → current-task-QdxA3mSX.mjs} +4 -4
- package/dist/dashboard-BDb2krMr.mjs +21 -0
- package/dist/db-CoVdkdVm.mjs +22 -0
- package/dist/{delete-D68oS73R.mjs → delete-ByJ6guaH.mjs} +3 -3
- package/dist/{delete-CX2VUA5R.mjs → delete-CE_Jfjni.mjs} +3 -3
- package/dist/{delete-table-DLvL9mDA.mjs → delete-table-D5LDUkOk.mjs} +3 -3
- package/dist/{dirty-1OrXpc7E.mjs → dirty-C6yzkIPn.mjs} +4 -4
- package/dist/document-BA2S1ev3.mjs +19 -0
- package/dist/{eid-CzLhHZMW.mjs → eid-ZOyix96k.mjs} +3 -3
- package/dist/{error-BWXBhqLW.mjs → error-C1bUYXn7.mjs} +2 -1
- package/dist/{export-B5z8w-xo.mjs → export-BhbBX-pl.mjs} +6 -6
- package/dist/field-B5bptFqL.mjs +18 -0
- package/dist/{fields-sC7pzmPX.mjs → fields-CZ6IK8Qf.mjs} +3 -3
- package/dist/{get-ByZ4HR2T.mjs → get-157SWRte.mjs} +3 -3
- package/dist/{get-Bo1FGyFs.mjs → get-9b0ZEWh1.mjs} +3 -3
- package/dist/{get-Dl62Fy6Y.mjs → get-B03gdAun.mjs} +3 -3
- package/dist/{get-CHb6J908.mjs → get-BKWZA_22.mjs} +2 -2
- package/dist/{get-DTHLETau.mjs → get-Bbo2Y-aL.mjs} +3 -3
- package/dist/{get-ZesERdyk.mjs → get-BtqQ98nb.mjs} +2 -2
- package/dist/{get-reSMTfQi.mjs → get-C0emTO1r.mjs} +2 -2
- package/dist/{get-DLwb_gUh.mjs → get-CqKttHWW.mjs} +3 -3
- package/dist/{get-BYw3xS0X.mjs → get-D49EdHgH.mjs} +3 -3
- package/dist/{get-lcX52Skc.mjs → get-DIyv2a7h.mjs} +3 -3
- package/dist/{get-BC60bhel.mjs → get-DclzgC5G.mjs} +3 -3
- package/dist/{get-Fn9WkNhS.mjs → get-DlzC0xCg.mjs} +3 -3
- package/dist/{get-4GEDd9YN.mjs → get-mR01pCNG.mjs} +3 -3
- package/dist/{get-C6n86-dS.mjs → get-nl41R-2q.mjs} +3 -3
- package/dist/{get-run-CpCbHJad.mjs → get-run-_dlMCGp5.mjs} +3 -3
- package/dist/git-sync-DqJmONiB.mjs +28 -0
- package/dist/{has-remote-changes-CPz_-uxd.mjs → has-remote-changes-CToITRyl.mjs} +4 -4
- package/dist/{import-DaWgprK6.mjs → import-xnYHb4QX.mjs} +6 -6
- package/dist/{is-dirty-DZlI7lQx.mjs → is-dirty-BHyMmUVV.mjs} +3 -3
- package/dist/is-dirty-BvA3yzRc.mjs +9 -0
- package/dist/{items-hgbRYsYD.mjs → items-D3AmbIOO.mjs} +3 -3
- package/dist/{list-DO8T-nmF.mjs → list-5ZZfaOzm.mjs} +2 -2
- package/dist/{list-DBlsRSpZ.mjs → list-BHCVZh7Q.mjs} +2 -2
- package/dist/{list-CCZnH2-Z.mjs → list-BdStkg8G.mjs} +2 -2
- package/dist/{list-CGdOC9zX.mjs → list-BhZYkbc9.mjs} +2 -2
- package/dist/{list-kath_2cX.mjs → list-BkzrFyJO.mjs} +2 -2
- package/dist/{list-Cd2nOCAx.mjs → list-BtTRJyrR.mjs} +2 -2
- package/dist/{list-DOVX3vCb.mjs → list-Byn-dRW4.mjs} +3 -3
- package/dist/{list-BgHESP7b.mjs → list-C5NywUBH.mjs} +2 -2
- package/dist/{list-B9J3ujwn.mjs → list-CA6MlByL.mjs} +2 -2
- package/dist/{list-BWv5y307.mjs → list-CIu1zfpU.mjs} +2 -2
- package/dist/{list-BGerkRHH.mjs → list-C_d7ppOJ.mjs} +3 -3
- package/dist/{list-CKeVS1IZ.mjs → list-D7Np4fwk.mjs} +2 -2
- package/dist/{list-D9EuxFHO.mjs → list-DKPhFATP.mjs} +2 -2
- package/dist/{list-36H-dvJZ.mjs → list-DSJwMHXB.mjs} +2 -2
- package/dist/{login-BzrAGJfu.mjs → login-jWvDDvEm.mjs} +3 -3
- package/dist/{logout-CKBiltoS.mjs → logout-Bltlsm6u.mjs} +2 -2
- package/dist/measure-DBX4k13t.mjs +19 -0
- package/dist/{metadata-BjOrKtnv.mjs → metadata-BKcyjsoA.mjs} +3 -3
- package/dist/{metadata-BcGcUEVJ.mjs → metadata-Bf2TfG8F.mjs} +3 -3
- package/dist/{parse-id--iVTCKSo.mjs → parse-id-CWRJlQVK.mjs} +1 -1
- package/dist/{path-LgGU6Bd0.mjs → path-Djw9IARu.mjs} +2 -2
- package/dist/{poll-BucRFJT-.mjs → poll-hJrV0cPm.mjs} +1 -1
- package/dist/{poll-task-DTzKB3T3.mjs → poll-task-DK6X9Juu.mjs} +2 -2
- package/dist/{preflight-CzqVX0PP.mjs → preflight-DjSPp3Ct.mjs} +1 -1
- package/dist/{query-BVZkK6Qk.mjs → query-Cc-9oPsW.mjs} +3 -3
- package/dist/{query-DG_jygDF.mjs → query-Do5n5SZc.mjs} +3 -3
- package/dist/{remove-collection-HdeAfLyi.mjs → remove-collection-DVvnmU06.mjs} +6 -6
- package/dist/{rescan-values-hWubCruZ.mjs → rescan-values-CHluR3JC.mjs} +3 -3
- package/dist/{run-C1-lDmQF.mjs → run-CcJbcaw8.mjs} +5 -5
- package/dist/{runs-Q6DYQyqj.mjs → runs-Dc8qZBhl.mjs} +3 -3
- package/dist/{runtime-colqvhLf.mjs → runtime-jWkzCPlL.mjs} +1 -1
- package/dist/{schema-tables-BEastV_8.mjs → schema-tables-CZ6EMHUZ.mjs} +3 -3
- package/dist/{schemas-CgawwI_k.mjs → schemas-Br1cpOZc.mjs} +3 -3
- package/dist/{search-BWo7xSPP.mjs → search-DB2joPgt.mjs} +3 -3
- package/dist/segment-BWcyA1P-.mjs +19 -0
- package/dist/{set-7Nm2ZTb_.mjs → set-BRhVzEWd.mjs} +3 -3
- package/dist/{setting-DSGXJehQ.mjs → setting-CuxO4T1n.mjs} +3 -3
- package/dist/{setup-aJLGLrIT.mjs → setup-Bn4jwxdl.mjs} +3 -3
- package/dist/{skills-Q2AFsYvc.mjs → skills-Db1r65S5.mjs} +3 -3
- package/dist/snippet-C9UM6NwC.mjs +19 -0
- package/dist/{stash-DPQ0c-Cd.mjs → stash-Dp2JFgmp.mjs} +6 -6
- package/dist/{status-CvAATvV0.mjs → status-BxGBwALE.mjs} +2 -2
- package/dist/{status-CvKPrV5X.mjs → status-j09luNai.mjs} +5 -5
- package/dist/{summary-CeOnoOq2.mjs → summary-DVrj7DSa.mjs} +3 -3
- package/dist/{sync-schema-aOPBc3CY.mjs → sync-schema-BVHvjzGX.mjs} +5 -5
- package/dist/table-DYI8K12W.mjs +19 -0
- package/dist/transform-CvbMbJtI.mjs +24 -0
- package/dist/transform-job-CtzgvccZ.mjs +19 -0
- package/dist/{tree-MOQOBeAP.mjs → tree-BEPw6xbY.mjs} +2 -2
- package/dist/{update-BWyCK8QV.mjs → update-B5VBJFU9.mjs} +5 -5
- package/dist/{update-Bj9s0ri8.mjs → update-BXaT0Faw.mjs} +4 -4
- package/dist/{update-CitS-QRN.mjs → update-Bd0ASKUG.mjs} +5 -5
- package/dist/{update-BD9xkglP.mjs → update-Bn5wUyTQ.mjs} +4 -4
- package/dist/{update-BRrnfG0q.mjs → update-C5vlBTII.mjs} +4 -4
- package/dist/{update-Dri4Zg2H.mjs → update-C875_WGf.mjs} +4 -4
- package/dist/{update-DfNKr_vS.mjs → update-CAoOJRwz.mjs} +4 -4
- package/dist/{update-57uxZWcR.mjs → update-DiG6SSGm.mjs} +4 -4
- package/dist/{update-BkMWBzvk.mjs → update-DzKPxRBE.mjs} +4 -4
- package/dist/{update-dashcard-D_-ura3Y.mjs → update-dashcard-7bZtw04E.mjs} +4 -4
- package/dist/{update-B6mg3AZD.mjs → update-fVqLtZ_t.mjs} +4 -4
- package/dist/{upgrade-CFkZ4USY.mjs → upgrade-DdCxE9Ml.mjs} +2 -2
- package/dist/{uuid-DpinhSxA.mjs → uuid-DywghRXO.mjs} +2 -2
- package/dist/{values-BSS4DRxk.mjs → values-DSul3siC.mjs} +3 -3
- package/dist/{verify-B_A7v8TY.mjs → verify-DzDyKXOa.mjs} +1 -1
- package/dist/{wait-D3iSnjMM.mjs → wait-CacFZI5Y.mjs} +5 -5
- package/dist/{wait-flags-_LnHOeBA.mjs → wait-flags-DV419apK.mjs} +2 -2
- package/package.json +2 -1
- package/skill-data/core/SKILL.md +22 -23
- package/skill-data/data-analysis/SKILL.md +65 -0
- package/skill-data/data-transformation/SKILL.md +200 -0
- package/skill-data/document/SKILL.md +4 -4
- package/skill-data/mbql/SKILL.md +20 -20
- package/skill-data/robot-data-engineer/SKILL.md +142 -0
- package/skill-data/semantic-layer/SKILL.md +166 -0
- package/skill-data/transform/SKILL.md +46 -48
- package/skill-data/visualization/SKILL.md +5 -3
- package/skills/metabase-cli/SKILL.md +6 -0
- package/dist/add-collection-D9wXgmRj.mjs +0 -10
- package/dist/auth-cFC5m69m.mjs +0 -19
- package/dist/card-ClvGX6dQ.mjs +0 -20
- package/dist/collection-DjvowSJC.mjs +0 -20
- package/dist/dashboard-BFeURTOw.mjs +0 -21
- package/dist/db-CSH1kwQr.mjs +0 -22
- package/dist/document-KdT_Xj6r.mjs +0 -19
- package/dist/field-CTFnZI8G.mjs +0 -18
- package/dist/git-sync-C2vib8rx.mjs +0 -28
- package/dist/is-dirty-Bb0Rtj7x.mjs +0 -9
- package/dist/measure-Dw1QpRZa.mjs +0 -19
- package/dist/segment-DMuYvFjg.mjs +0 -19
- package/dist/snippet-Df2TrP7-.mjs +0 -19
- package/dist/table-pK4OkVtL.mjs +0 -19
- package/dist/transform-D60veFH8.mjs +0 -24
- package/dist/transform-job-DXt5LsrY.mjs +0 -19
|
@@ -8,7 +8,7 @@ allowed-tools: Read, Write, Edit, Bash, AskUserQuestion
|
|
|
8
8
|
|
|
9
9
|
A **transform** persists the result of a query (native SQL or MBQL) to a warehouse table the user can read from cards, dashboards, and other transforms. It runs on a schedule (via `transform-job`) or on-demand (`transform run`).
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Flag conventions, body-input precedence, and output flags live in the `core` skill (`mb skills get core`). Deciding _which_ transforms to build — modeling a whole raw database into a set of clean, analysis-ready tables — is the `data-transformation` skill (`mb skills get data-transformation`).
|
|
12
12
|
|
|
13
13
|
## Body shape
|
|
14
14
|
|
|
@@ -17,37 +17,32 @@ A transform has two halves:
|
|
|
17
17
|
- `source` — the query to run (`type: "query"`, with `query.type` of `native` or `mbql`).
|
|
18
18
|
- `target` — the warehouse destination (`type: "table"`, with `database`, `schema`, `name`).
|
|
19
19
|
|
|
20
|
-
Native SQL is the simplest source and the easiest to author by hand
|
|
20
|
+
Native SQL is the simplest source and the easiest to author by hand. MBQL is what the Metabase UI emits and is more verbose; pull a sample with `mb transform get <id> --full --json` if you need its shape.
|
|
21
21
|
|
|
22
22
|
For an **MBQL 5** `source.query` (`lib/type: "mbql/query"`), the body shape, the "options object is always second" clause rule, UUID minting, aggregation/order-by refs, naming aggregation output columns, and the `--print-schema` → `--dry-run` validation loop are all in the `mbql` skill — **`mb skills get mbql`**. The MBQL-5 pre-flight on `transform create`/`update` is documented there too (legacy MBQL 4 and native sources skip it). For a transform target, naming your aggregation output columns matters more than usual — a bare `count` / `avg_2` becomes the warehouse column name; see the `mbql` skill's "Naming aggregation output columns".
|
|
23
23
|
|
|
24
24
|
## Create + run (native SQL)
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
EOF
|
|
49
|
-
|
|
50
|
-
TRANSFORM_ID=$(mb transform create --file /tmp/transform.json --profile <name> --json | jq -r '.id')
|
|
27
|
+
# Author the SQL formatted — it's what `mb transform get` and the Metabase editor show.
|
|
28
|
+
cat > ./.scratch/user_counts_by_signup_year.sql <<'SQL'
|
|
29
|
+
SELECT
|
|
30
|
+
date_trunc('year', created_at)::date AS signup_year,
|
|
31
|
+
COUNT(*)::int AS user_count
|
|
32
|
+
FROM public.users
|
|
33
|
+
GROUP BY 1
|
|
34
|
+
ORDER BY 1
|
|
35
|
+
SQL
|
|
36
|
+
|
|
37
|
+
# Embed it with jq --rawfile so the newlines survive as \n in valid JSON (don't hand-write the SQL as one line).
|
|
38
|
+
jq -n --rawfile q ./.scratch/user_counts_by_signup_year.sql \
|
|
39
|
+
'{ name: "user_counts_by_signup_year",
|
|
40
|
+
description: "Sample transform: counts users by year of signup",
|
|
41
|
+
source: { type: "query", query: { type: "native", database: <db-id>, native: { query: $q } } },
|
|
42
|
+
target: { type: "table", database: <db-id>, schema: "public", name: "user_counts_by_signup_year" } }' \
|
|
43
|
+
> ./.scratch/transform.json
|
|
44
|
+
|
|
45
|
+
TRANSFORM_ID=$(mb transform create --file ./.scratch/transform.json --profile <name> --json | jq -r '.id')
|
|
51
46
|
mb transform run "$TRANSFORM_ID" --wait --profile <name> --json
|
|
52
47
|
```
|
|
53
48
|
|
|
@@ -57,8 +52,8 @@ Notes:
|
|
|
57
52
|
- Target `schema` is the schema the result table is written into (e.g. `public`).
|
|
58
53
|
- `--wait` on `transform run` polls until status is `succeeded` or `failed`. Without it you only get `{message: "Transform run started", run_id, final: null}` and have to poll yourself.
|
|
59
54
|
- `--sync` implies `--wait`, then waits until the run's output table is registered — the run registers it itself, no `db sync-schema` needed — adding `target_table_id` to the envelope. Use it when you'll build MBQL on the output (see "Inspect").
|
|
60
|
-
- The `--json` envelope is shape-stable: `{message, run_id, final}` (plus `target_table_id` under `--sync` — a number, or `null` if the table didn't register before the timeout). `final` is
|
|
61
|
-
-
|
|
55
|
+
- The `--json` envelope is shape-stable: `{message, run_id, final}` (plus `target_table_id` under `--sync` — a number, or `null` if the table didn't register before the timeout). `final` is `null` when `--wait` is omitted or the run never started, otherwise a full `TransformRun` object with `status` and `message`. On a failed run (`final.status` ∈ {`failed`, `timeout`, `canceled`}) the CLI exits 1 and writes a one-line summary `transform run <id> failed` to stderr; the failure detail lives only in `final.message` on stdout, so `jq -r '.final.message'` is where to look.
|
|
56
|
+
- **Keep the SQL formatted.** Author it multi-line in `./.scratch/<name>.sql` and embed with `jq --rawfile` (jq ≥1.6, which JSON-encodes the file so newlines become `\n`). The stored `native.query` is what `mb transform get` and the Metabase editor render — a single-line blob is valid JSON but unreadable when anyone opens the transform. Single-quote the heredoc delimiter (`<<'SQL'`) so the shell leaves `$vars` in the query alone (e.g. Postgres `$1`, `$$`).
|
|
62
57
|
- `transform create --json` returns the agent-facing compact projection: `{id, name, description, source_type, target: {type, database, schema, name}, target_db_id}`. Read `target.schema`/`target.name` directly off the create output — no follow-up `transform get` needed to verify where the transform will write.
|
|
63
58
|
- If a transform with the same `name` already has a YAML representation on disk under the configured remote-sync repo, `create` mints a `_2` suffix on the exported filename (the new transform gets a fresh `entity_id`; the prior one isn't touched). For "iterate on the same concept" workflows, prefer `transform update <id>` — see "Iterating on a failing transform" below.
|
|
64
59
|
- **`collection_id` only accepts a collection in the `:transforms` namespace.** Transforms aren't filed next to cards and dashboards — passing a normal analytics collection id (the kind a dashboard lives in) fails create/update with `collection_id: A Transform can only go in Collections in the :transforms namespace.` Omit `collection_id` to leave the transform uncollected (the common case), or create one with `mb collection create --body '{"name":"…"}' --namespace transforms --json` and pass the returned `id`. Cards and dashboards you build **on top of** the transform's output table go in ordinary collections as usual — so "put the transform and its dashboard in collection X" generally means _X holds the dashboard + cards; the transform stays in the transforms namespace._
|
|
@@ -70,14 +65,14 @@ mb transform list --profile <name> --json
|
|
|
70
65
|
mb transform get <id> --profile <name> --full --json # full transform incl. last run summary
|
|
71
66
|
```
|
|
72
67
|
|
|
73
|
-
After a run the table physically exists in the warehouse, but Metabase addresses tables/columns by numeric id, so **MBQL and the UI can't reference a brand-new table until the instance syncs** (native SQL — a native `card` or `mb query` against `<schema>.<name>` — reads it immediately). Run and register in one step with `--sync
|
|
68
|
+
After a run the table physically exists in the warehouse, but Metabase addresses tables/columns by numeric id, so **MBQL and the UI can't reference a brand-new table until the instance syncs** (native SQL — a native `card` or `mb query` against `<schema>.<name>` — reads it immediately). Run and register in one step with `--sync`.
|
|
74
69
|
|
|
75
70
|
```bash
|
|
76
71
|
TABLE_ID=$(mb transform run <id> --sync --profile <name> --json | jq -r '.target_table_id')
|
|
77
72
|
mb table get "$TABLE_ID" --include fields --profile <name> --json # field ids for MBQL
|
|
78
73
|
```
|
|
79
74
|
|
|
80
|
-
|
|
75
|
+
On `target_table_id: null` (still syncing when the poll timed out; exit 0) re-poll `mb transform get <id> --full --json` until the `target_table_id` / `table` linkage lands.
|
|
81
76
|
|
|
82
77
|
Columns and types are inferred from the result set; change the SELECT shape and the next run fails on a column mismatch — drop the table first (`transform delete-table <id>`). A changed shape also needs a re-run with `--sync` before MBQL sees the new/renamed columns.
|
|
83
78
|
|
|
@@ -104,14 +99,14 @@ Notes:
|
|
|
104
99
|
|
|
105
100
|
## Update body: send only writable keys, never round-trip the GET body
|
|
106
101
|
|
|
107
|
-
`transform update <id>` is **PATCH semantics** — only send the fields you
|
|
102
|
+
`transform update <id>` is **PATCH semantics** — only send the fields you want to change. The endpoint accepts exactly these writable keys:
|
|
108
103
|
|
|
109
104
|
```
|
|
110
105
|
name, description, source, target, run_trigger,
|
|
111
106
|
tag_ids, collection_id, owner_user_id, owner_email
|
|
112
107
|
```
|
|
113
108
|
|
|
114
|
-
**Don't paste the output of `transform get` into a `transform update` body.** The GET response carries server-side fields (`id`, `entity_id`, `created_at`, `updated_at`, `creator_id`, `last_run`, `target_db_id`, `target_table_id`, `source_type`, `source_database_id`, `source_readable`, `creator`, `owner`, `table`, …) that the PUT endpoint isn't built to handle.
|
|
109
|
+
**Don't paste the output of `transform get` into a `transform update` body.** The GET response carries server-side fields (`id`, `entity_id`, `created_at`, `updated_at`, `creator_id`, `last_run`, `target_db_id`, `target_table_id`, `source_type`, `source_database_id`, `source_readable`, `creator`, `owner`, `table`, …) that the PUT endpoint isn't built to handle. Unknown top-level keys flow into `t2/update!` and produce a leaked H2 SQL error like:
|
|
115
110
|
|
|
116
111
|
```
|
|
117
112
|
Column "TAGS" not found; SQL statement:
|
|
@@ -130,13 +125,15 @@ Right shape — patch only what changes:
|
|
|
130
125
|
# Rename only:
|
|
131
126
|
mb transform update <id> --body '{"name":"renamed"}' --profile <name> --json
|
|
132
127
|
|
|
133
|
-
# Rewrite the SQL only:
|
|
134
|
-
cat > /
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
128
|
+
# Rewrite the SQL only — author it formatted, embed with jq:
|
|
129
|
+
cat > ./.scratch/orders.sql <<'SQL'
|
|
130
|
+
SELECT …
|
|
131
|
+
FROM public.orders
|
|
132
|
+
SQL
|
|
133
|
+
jq -n --rawfile q ./.scratch/orders.sql \
|
|
134
|
+
'{ source: { type: "query", query: { type: "native", database: <db-id>, native: { query: $q } } } }' \
|
|
135
|
+
> ./.scratch/patch.json
|
|
136
|
+
mb transform update <id> --file ./.scratch/patch.json --profile <name> --json
|
|
140
137
|
|
|
141
138
|
# Change tag membership (note: tag_ids, not tags):
|
|
142
139
|
mb transform update <id> --body '{"tag_ids":[1,3]}' --profile <name> --json
|
|
@@ -148,12 +145,12 @@ If you really must round-trip, project to the writable subset:
|
|
|
148
145
|
mb transform get <id> --full --profile <name> --json \
|
|
149
146
|
| jq '{name, description, source, target, run_trigger, tag_ids, collection_id, owner_user_id, owner_email}
|
|
150
147
|
| with_entries(select(.value != null))' \
|
|
151
|
-
> /
|
|
148
|
+
> ./.scratch/patch.json
|
|
152
149
|
```
|
|
153
150
|
|
|
154
151
|
## Iterating on a failing transform
|
|
155
152
|
|
|
156
|
-
When `transform run` fails and you want to retry with a fixed body, **prefer `transform update <id> --file body.json` over `transform delete <id>` + `transform create`.** Update keeps the same row, the same `entity_id`, the same materialized table, and the same on-disk YAML filename
|
|
153
|
+
When `transform run` fails and you want to retry with a fixed body, **prefer `transform update <id> --file body.json` over `transform delete <id>` + `transform create`.** Update keeps the same row, the same `entity_id`, the same materialized table, and the same on-disk YAML filename:
|
|
157
154
|
|
|
158
155
|
- `git-sync export` produces **one** clean commit containing only the fix, instead of "broken transform" + "remove broken transform" landing as two commits in `git log`.
|
|
159
156
|
- You don't have to chase `_2` suffixes minted when two YAMLs share a `name` on disk (see the `transform create` notes above).
|
|
@@ -163,17 +160,18 @@ Recipe:
|
|
|
163
160
|
|
|
164
161
|
```bash
|
|
165
162
|
# 1. Try once
|
|
166
|
-
ID=$(mb transform create --file /
|
|
163
|
+
ID=$(mb transform create --file ./.scratch/t.json --profile <n> --json | jq -r '.id')
|
|
167
164
|
mb transform run "$ID" --wait --profile <n> --json # → failed
|
|
168
165
|
|
|
169
166
|
# 2. Fix the body in place; PATCH only what changed.
|
|
170
167
|
# Source-only patch — keeps name, target, tags untouched on the server.
|
|
171
|
-
cat > /
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
168
|
+
cat > ./.scratch/source.sql <<'SQL'
|
|
169
|
+
<fixed SQL, formatted>
|
|
170
|
+
SQL
|
|
171
|
+
jq -n --rawfile q ./.scratch/source.sql \
|
|
172
|
+
'{ source: { type: "query", query: { type: "native", database: <db-id>, native: { query: $q } } } }' \
|
|
173
|
+
> ./.scratch/source-patch.json
|
|
174
|
+
mb transform update "$ID" --file ./.scratch/source-patch.json --profile <n> --json
|
|
177
175
|
|
|
178
176
|
# 3. Re-run
|
|
179
177
|
mb transform run "$ID" --wait --profile <n> --json # → succeeded
|
|
@@ -6,6 +6,8 @@ allowed-tools: Read, Write, Edit, Bash, AskUserQuestion
|
|
|
6
6
|
|
|
7
7
|
# Visualization: pick the chart, then set it
|
|
8
8
|
|
|
9
|
+
> **Shared contract (read first).** This skill is part of the `robot-data-engineer` family and follows its shared rules: audience is a non-technical user, so no database jargon (skip "normalize"/"grain"; ERD/foreign key are fine; explain "wide"/"long" the first time you use them). Ask before showing PII row-by-row (names, emails, phones) — default to aggregates. When asked for something the CLI can't do (alerts, dashboard filters), name the limit instead of erroring into raw SQL. Honor the autonomy mode the user picked. Full text and the autonomy slider live in the router — run `mb skills get robot-data-engineer` and read its **Shared Contract** if you haven't.
|
|
10
|
+
|
|
9
11
|
A card has two presentation fields alongside its `dataset_query`:
|
|
10
12
|
|
|
11
13
|
- **`display`** — the chart type (`bar`, `line`, `pie`, `scalar`, `map`, `table`, …). One closed set; pick from the enum below.
|
|
@@ -13,7 +15,7 @@ A card has two presentation fields alongside its `dataset_query`:
|
|
|
13
15
|
|
|
14
16
|
Nothing validates `visualization_settings` — there is no pre-flight to fail past. A `display` typo or a misnamed key is accepted by the API; the card just renders as a default table or drops the setting. So **the feedback loop is read-back, not pre-flight**: after `card create`/`update`, confirm with `mb card get <id> --full --json` (or open the card) that it rendered as intended.
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
Flag conventions and body-input precedence live in the `core` skill (`mb skills get core`); the `dataset_query` itself is the `mbql` skill's job (`mb skills get mbql`). This skill is only about how the result is displayed.
|
|
17
19
|
|
|
18
20
|
Two steps: **(1) pick the `display` that fits the data**, then **(2) bind the data columns and set options**.
|
|
19
21
|
|
|
@@ -64,7 +66,7 @@ Closed `display` enum (card-level, non-hidden): `table`, `bar`, `line`, `area`,
|
|
|
64
66
|
|
|
65
67
|
`graph.dimensions`, `graph.metrics`, `pie.dimension`, `pie.metric`, `scalar.field`, `funnel.metric`, `map.latitude_column`, `sankey.source`, … all take **output column-name strings** — the names the query _produces_, not field ids. A `count` aggregation outputs the column `count`; a breakout on a field outputs that field's name; a named aggregation outputs its `name`. These strings are **identical in the API form and the portable (git-sync) form** — no numeric-vs-name footgun here.
|
|
66
68
|
|
|
67
|
-
|
|
69
|
+
The names come from the query's output, not from `mb field`/`mb table`. If you set `name` on an aggregation (see the `mbql` skill), use that same string here.
|
|
68
70
|
|
|
69
71
|
## Minimum-viable settings per chart family (API form)
|
|
70
72
|
|
|
@@ -136,7 +138,7 @@ For anything beyond a single dimension + metric — combo charts, conditional fo
|
|
|
136
138
|
mb card get <id> --full --json | jq '.visualization_settings'
|
|
137
139
|
```
|
|
138
140
|
|
|
139
|
-
Paste that block into your `card create`/`update` body. The server produced it, so it's valid for that `display`.
|
|
141
|
+
Paste that block into your `card create`/`update` body. The server produced it, so it's valid for that `display`.
|
|
140
142
|
|
|
141
143
|
## Full per-visualization key catalog
|
|
142
144
|
|
|
@@ -19,3 +19,9 @@ Before running any `mb` command, load the workflow content from the CLI:
|
|
|
19
19
|
mb skills get core # auth, flag conventions, every command group
|
|
20
20
|
mb skills list # everything available on the installed version
|
|
21
21
|
```
|
|
22
|
+
|
|
23
|
+
**Doing a whole job, not one command?** If the user wants an outcome — "make sense of my data", "build a data model", "go from raw data to a dashboard", "answer questions about my data", "be my data analyst", "set up analytics for X" — load the front-door router instead and let it drive:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
mb skills get robot-data-engineer
|
|
27
|
+
```
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
-
import "./error-BWXBhqLW.mjs";
|
|
3
|
-
import "./runtime-colqvhLf.mjs";
|
|
4
|
-
import "./capabilities-7L9GVMd_.mjs";
|
|
5
|
-
import "./parse-id--iVTCKSo.mjs";
|
|
6
|
-
import "./poll-BucRFJT-.mjs";
|
|
7
|
-
import "./poll-task-DTzKB3T3.mjs";
|
|
8
|
-
import { SyncSettingsUpdateResult, add_collection_default, setCollectionRemoteSynced, syncSettingsUpdateView } from "./add-collection-DUqTrC5T.mjs";
|
|
9
|
-
|
|
10
|
-
export { add_collection_default as default };
|
package/dist/auth-cFC5m69m.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/auth/index.ts
|
|
4
|
-
var auth_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "auth",
|
|
7
|
-
description: "Authenticate against a Metabase instance"
|
|
8
|
-
},
|
|
9
|
-
default: "login",
|
|
10
|
-
subCommands: {
|
|
11
|
-
login: () => import("./login-BzrAGJfu.mjs").then((m) => m.default),
|
|
12
|
-
status: () => import("./status-CvAATvV0.mjs").then((m) => m.default),
|
|
13
|
-
list: () => import("./list-BGerkRHH.mjs").then((m) => m.default),
|
|
14
|
-
logout: () => import("./logout-CKBiltoS.mjs").then((m) => m.default)
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { auth_default as default };
|
package/dist/card-ClvGX6dQ.mjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/card/index.ts
|
|
4
|
-
var card_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "card",
|
|
7
|
-
description: "Manage Metabase cards (questions, models, metrics)"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-CGdOC9zX.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-BYw3xS0X.mjs").then((mod) => mod.default),
|
|
12
|
-
query: () => import("./query-BVZkK6Qk.mjs").then((mod) => mod.default),
|
|
13
|
-
create: () => import("./create-CvYKJOcE.mjs").then((mod) => mod.default),
|
|
14
|
-
update: () => import("./update-BkMWBzvk.mjs").then((mod) => mod.default),
|
|
15
|
-
archive: () => import("./archive-44EWiXud.mjs").then((mod) => mod.default)
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
//#endregion
|
|
20
|
-
export { card_default as default };
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/collection/index.ts
|
|
4
|
-
var collection_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "collection",
|
|
7
|
-
description: "Manage Metabase collections"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-36H-dvJZ.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-reSMTfQi.mjs").then((mod) => mod.default),
|
|
12
|
-
items: () => import("./items-hgbRYsYD.mjs").then((mod) => mod.default),
|
|
13
|
-
tree: () => import("./tree-MOQOBeAP.mjs").then((mod) => mod.default),
|
|
14
|
-
create: () => import("./create-DS52EhPd.mjs").then((mod) => mod.default),
|
|
15
|
-
archive: () => import("./archive-BZfpjMir.mjs").then((mod) => mod.default)
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
|
|
19
|
-
//#endregion
|
|
20
|
-
export { collection_default as default };
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/dashboard/index.ts
|
|
4
|
-
var dashboard_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "dashboard",
|
|
7
|
-
description: "Manage Metabase dashboards"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-DBlsRSpZ.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-ByZ4HR2T.mjs").then((mod) => mod.default),
|
|
12
|
-
cards: () => import("./cards-O-nKkQKP.mjs").then((mod) => mod.default),
|
|
13
|
-
create: () => import("./create-B4f4Pldw.mjs").then((mod) => mod.default),
|
|
14
|
-
update: () => import("./update-CitS-QRN.mjs").then((mod) => mod.default),
|
|
15
|
-
"update-dashcard": () => import("./update-dashcard-D_-ura3Y.mjs").then((mod) => mod.default),
|
|
16
|
-
archive: () => import("./archive-0krZxAXq.mjs").then((mod) => mod.default)
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
//#endregion
|
|
21
|
-
export { dashboard_default as default };
|
package/dist/db-CSH1kwQr.mjs
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/db/index.ts
|
|
4
|
-
var db_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "db",
|
|
7
|
-
description: "Inspect and sync Metabase databases",
|
|
8
|
-
alias: "database"
|
|
9
|
-
},
|
|
10
|
-
subCommands: {
|
|
11
|
-
list: () => import("./list-Cd2nOCAx.mjs").then((m) => m.default),
|
|
12
|
-
get: () => import("./get-Fn9WkNhS.mjs").then((m) => m.default),
|
|
13
|
-
metadata: () => import("./metadata-BjOrKtnv.mjs").then((m) => m.default),
|
|
14
|
-
schemas: () => import("./schemas-CgawwI_k.mjs").then((m) => m.default),
|
|
15
|
-
"schema-tables": () => import("./schema-tables-BEastV_8.mjs").then((m) => m.default),
|
|
16
|
-
"sync-schema": () => import("./sync-schema-aOPBc3CY.mjs").then((m) => m.default),
|
|
17
|
-
"rescan-values": () => import("./rescan-values-hWubCruZ.mjs").then((m) => m.default)
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
//#endregion
|
|
22
|
-
export { db_default as default };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/document/index.ts
|
|
4
|
-
var document_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "document",
|
|
7
|
-
description: "Manage Metabase documents"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-B9J3ujwn.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-BC60bhel.mjs").then((mod) => mod.default),
|
|
12
|
-
create: () => import("./create-D45uFXlo.mjs").then((mod) => mod.default),
|
|
13
|
-
update: () => import("./update-57uxZWcR.mjs").then((mod) => mod.default),
|
|
14
|
-
archive: () => import("./archive-_GMNY8wH.mjs").then((mod) => mod.default)
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { document_default as default };
|
package/dist/field-CTFnZI8G.mjs
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/field/index.ts
|
|
4
|
-
var field_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "field",
|
|
7
|
-
description: "Manage Metabase fields"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
get: () => import("./get-Dl62Fy6Y.mjs").then((m) => m.default),
|
|
11
|
-
values: () => import("./values-BSS4DRxk.mjs").then((m) => m.default),
|
|
12
|
-
summary: () => import("./summary-CeOnoOq2.mjs").then((m) => m.default),
|
|
13
|
-
update: () => import("./update-B6mg3AZD.mjs").then((m) => m.default)
|
|
14
|
-
}
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
//#endregion
|
|
18
|
-
export { field_default as default };
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/git-sync/index.ts
|
|
4
|
-
var git_sync_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "git-sync",
|
|
7
|
-
description: "Sync Metabase content with a git remote"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
status: () => import("./status-CvKPrV5X.mjs").then((mod) => mod.default),
|
|
11
|
-
"is-dirty": () => import("./is-dirty-Bb0Rtj7x.mjs").then((mod) => mod.default),
|
|
12
|
-
"has-remote-changes": () => import("./has-remote-changes-CPz_-uxd.mjs").then((mod) => mod.default),
|
|
13
|
-
dirty: () => import("./dirty-1OrXpc7E.mjs").then((mod) => mod.default),
|
|
14
|
-
"current-task": () => import("./current-task-ClcWPPMc.mjs").then((mod) => mod.default),
|
|
15
|
-
"cancel-task": () => import("./cancel-task-DyhIkNaL.mjs").then((mod) => mod.default),
|
|
16
|
-
wait: () => import("./wait-D3iSnjMM.mjs").then((mod) => mod.default),
|
|
17
|
-
import: () => import("./import-DaWgprK6.mjs").then((mod) => mod.default),
|
|
18
|
-
export: () => import("./export-B5z8w-xo.mjs").then((mod) => mod.default),
|
|
19
|
-
stash: () => import("./stash-DPQ0c-Cd.mjs").then((mod) => mod.default),
|
|
20
|
-
branches: () => import("./branches-Jpv-FNds.mjs").then((mod) => mod.default),
|
|
21
|
-
"create-branch": () => import("./create-branch-KOWUIE72.mjs").then((mod) => mod.default),
|
|
22
|
-
"add-collection": () => import("./add-collection-D9wXgmRj.mjs").then((mod) => mod.default),
|
|
23
|
-
"remove-collection": () => import("./remove-collection-HdeAfLyi.mjs").then((mod) => mod.default)
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
//#endregion
|
|
28
|
-
export { git_sync_default as default };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import "./command-augment-BH9qgQ5u.mjs";
|
|
2
|
-
import "./error-BWXBhqLW.mjs";
|
|
3
|
-
import "./runtime-colqvhLf.mjs";
|
|
4
|
-
import "./capabilities-7L9GVMd_.mjs";
|
|
5
|
-
import "./poll-BucRFJT-.mjs";
|
|
6
|
-
import "./poll-task-DTzKB3T3.mjs";
|
|
7
|
-
import { IsDirtyResult, is_dirty_default } from "./is-dirty-DZlI7lQx.mjs";
|
|
8
|
-
|
|
9
|
-
export { is_dirty_default as default };
|
|
@@ -1,19 +0,0 @@
|
|
|
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-CKeVS1IZ.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-C6n86-dS.mjs").then((mod) => mod.default),
|
|
12
|
-
create: () => import("./create-DeZ2x2Db.mjs").then((mod) => mod.default),
|
|
13
|
-
update: () => import("./update-Dri4Zg2H.mjs").then((mod) => mod.default),
|
|
14
|
-
archive: () => import("./archive-B59Y7ajB.mjs").then((mod) => mod.default)
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { measure_default as default };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/segment/index.ts
|
|
4
|
-
var segment_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "segment",
|
|
7
|
-
description: "Manage Metabase segments"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-kath_2cX.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-Bo1FGyFs.mjs").then((mod) => mod.default),
|
|
12
|
-
create: () => import("./create-BxRsXQrm.mjs").then((mod) => mod.default),
|
|
13
|
-
update: () => import("./update-DfNKr_vS.mjs").then((mod) => mod.default),
|
|
14
|
-
archive: () => import("./archive-DtE2H4A6.mjs").then((mod) => mod.default)
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { segment_default as default };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/snippet/index.ts
|
|
4
|
-
var snippet_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "snippet",
|
|
7
|
-
description: "Manage Metabase native query snippets"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-BWv5y307.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-DLwb_gUh.mjs").then((mod) => mod.default),
|
|
12
|
-
create: () => import("./create-BuKx7kw6.mjs").then((mod) => mod.default),
|
|
13
|
-
update: () => import("./update-BRrnfG0q.mjs").then((mod) => mod.default),
|
|
14
|
-
archive: () => import("./archive-BEIyIsin.mjs").then((mod) => mod.default)
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { snippet_default as default };
|
package/dist/table-pK4OkVtL.mjs
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/table/index.ts
|
|
4
|
-
var table_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "table",
|
|
7
|
-
description: "Manage Metabase tables"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-DOVX3vCb.mjs").then((m) => m.default),
|
|
11
|
-
get: () => import("./get-DTHLETau.mjs").then((m) => m.default),
|
|
12
|
-
metadata: () => import("./metadata-BcGcUEVJ.mjs").then((m) => m.default),
|
|
13
|
-
fields: () => import("./fields-sC7pzmPX.mjs").then((m) => m.default),
|
|
14
|
-
update: () => import("./update-BD9xkglP.mjs").then((m) => m.default)
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { table_default as default };
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/transform/index.ts
|
|
4
|
-
var transform_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "transform",
|
|
7
|
-
description: "Manage Metabase transforms"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-DO8T-nmF.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-lcX52Skc.mjs").then((mod) => mod.default),
|
|
12
|
-
create: () => import("./create-BbF9zVFP.mjs").then((mod) => mod.default),
|
|
13
|
-
update: () => import("./update-BWyCK8QV.mjs").then((mod) => mod.default),
|
|
14
|
-
delete: () => import("./delete-CX2VUA5R.mjs").then((mod) => mod.default),
|
|
15
|
-
"delete-table": () => import("./delete-table-DLvL9mDA.mjs").then((mod) => mod.default),
|
|
16
|
-
run: () => import("./run-C1-lDmQF.mjs").then((mod) => mod.default),
|
|
17
|
-
cancel: () => import("./cancel-ChC4lFd4.mjs").then((mod) => mod.default),
|
|
18
|
-
"get-run": () => import("./get-run-CpCbHJad.mjs").then((mod) => mod.default),
|
|
19
|
-
runs: () => import("./runs-Q6DYQyqj.mjs").then((mod) => mod.default)
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
//#endregion
|
|
24
|
-
export { transform_default as default };
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { defineCommand } from "citty";
|
|
2
|
-
|
|
3
|
-
//#region src/commands/transform-job/index.ts
|
|
4
|
-
var transform_job_default = defineCommand({
|
|
5
|
-
meta: {
|
|
6
|
-
name: "transform-job",
|
|
7
|
-
description: "Manage Metabase transform jobs"
|
|
8
|
-
},
|
|
9
|
-
subCommands: {
|
|
10
|
-
list: () => import("./list-D9EuxFHO.mjs").then((mod) => mod.default),
|
|
11
|
-
get: () => import("./get-4GEDd9YN.mjs").then((mod) => mod.default),
|
|
12
|
-
create: () => import("./create-BnFHcnlL.mjs").then((mod) => mod.default),
|
|
13
|
-
update: () => import("./update-Bj9s0ri8.mjs").then((mod) => mod.default),
|
|
14
|
-
delete: () => import("./delete-D68oS73R.mjs").then((mod) => mod.default)
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
//#endregion
|
|
19
|
-
export { transform_job_default as default };
|